Matlab fmincon函数用法

Matlab fmincon函数用法这个函数在之前优化工具箱一文中已经介绍过,由于其应用广泛,所以这里通过实例单独整理一下其用法。一、基本介绍求解问题的标准型为minF(X)s.tAX<=bAeqX=beqG(x)<=0Ceq(X)=0VLB<=X<=VUB其中X为n维变元向量,G(x)与Ceq(X)均为非线性函数组成的向量,其它变量的含…

大家好,又见面了,我是你们的朋友全栈君。

这个函数在之前优化工具箱一文中已经介绍过,由于其应用广泛,所以这里通过实例单独整理一下其用法。

一、基本介绍

求解问题的标准型为

min F(X)

s.t

AX <= b

AeqX = beq

G(x) <= 0

Ceq(X) = 0

VLB <= X <= VUB

 

其中X为n维变元向量,G(x)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划,二次规划中相同,用Matlab求解上述问题,基本步骤分为三步:

1. 首先建立M文件fun.m定义目标函数F(X):

function f = fun(X);

f = F(X)

 

2. 若约束条件中有非线性约束:G(x) <= 0 或 Ceq(x) = 0,则建立M文件nonlcon.m定义函数G(X)和Ceq(X);

function [G, Ceq] = nonlcon(X)

G = …

Ceq = …

 

3. 建立主程序,非线性规划求解的函数时fmincon,命令的基本格式如下:

其形式如下:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

求解问题的标准型为
min F(X)
s.t
AX <= b(线性不等式约束)
AeqX = beq(线性等式约束)
G(x) <= 0(非线性不等式约束)
Ceq(X) = 0(非线性等式约束)
lb <= X <= ub(变量约束)
————————————————

 

 

注意:

(1)fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options 参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法,当既有等式约束又有梯度约束时,使用中型算法。

(2)fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中 求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。

(3)fmincon函数可能会给出局部最优解,这与初值X0的选取有关。

 

二、实例

1. 第一种方法,直接设置边界

主要是指直接设置A,b等参数。

例1:min f = -x1 – 2*x2 + 1/2*x1^2 + 1/2 * x2^2

2*x1 + 3*x2 <= 6

x1 + 4*x2 <= 5

x1, x2 >= 0

 

function ex131101

 

x0 = [1; 1];

A = [2, 3; 1, 4];

b = [6, 5];

Aeq = [];

beq = [];

VLB = [0; 0];

VUB = [];

[x, fval] = fmincon(@fun3, x0, A, b, Aeq, beq, VLB, VUB)

 

function f = fun3(x)

f = -x(1) – 2*x(2) + (1/2)*x(1)^2 + (1/2)*x(2)^2;

 

2. 第二种方法,通过函数设置边界

例2: min f(x) = exp(x1) * (4*x1^2 + 2*x2^2 + 4*x1*x2 + 2*x2 + 1)

x1 + x2 = 0

1.5 + x1 * x2 – x1 – x2  <= 0

-x1*x2 – 10 <= 0

function youh3

clc;

x0 = [-1, 1];

A = [];b = [];

Aeq = []; beq = [];

vlb = []; vub = [];

[x, fval] = fmincon(@fun4, x0, A, b, Aeq, beq, vlb, vub, @mycon)

 

function f = fun4(x);

f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);

 

function [g, ceq] = mycon(x)

g = [1.5 + x(1)*x(2) – x(1) – x(2); -x(1)*x(2) – 10];

ceq = [x(1) + x(2)];

 

3. 进阶用法,增加梯度以及传递参数

这里用无约束优化函数fminunc做示例,对于fmincon方法相同,只需将边界项设为空即可。

(1)定义目标函数

function [J, grad] = costFunction(theta, X, y)

%COSTFUNCTION Compute cost and gradient for logistic regression

%   J = COSTFUNCTION(theta, X, y) computes the cost of using theta as the

%   parameter for logistic regression and the gradient of the cost

%   w.r.t. to the parameters.

 

% Initialize some useful values

m = length(y); % number of training examples

 

% You need to return the following variables correctly 

J = 0;

grad = zeros(size(theta));

 

% ====================== YOUR CODE HERE ======================

% Instructions: Compute the cost of a particular choice of theta.

%               You should set J to the cost.

%               Compute the partial derivatives and set grad to the partial

%               derivatives of the cost w.r.t. each parameter in theta

%

% Note: grad should have the same dimensions as theta

%

 

z = X * theta;

hx = 1 ./ (1 + exp(-z));

J = 1/m * sum([-y’ * log(hx) – (1 – y)’ * log(1 – hx)]);

 

for  j = 1: length(theta)

    grad(j) = 1/m * sum((hx – y)’ * X(:,j));

end

 

 

% =============================================================

 

end

 

(2)优化求极小值

%  Set options for fminunc

options = optimset(‘GradObj’, ‘on’, ‘MaxIter’, 400);

 

%  Run fminunc to obtain the optimal theta

%  This function will return theta and the cost 

[theta, cost] = …

    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

 

% [theta, cost] = …

%   fminunc(@(t)(costFunction(t, X, y)), initial_theta);

% Print theta to screen

fprintf(‘Cost at theta found by fminunc: %f\n’, cost);

fprintf(‘theta: \n’);

fprintf(‘ %f \n’, theta);

 http://blog.sina.com.cn/s/blog_84024a4a0101e1ym.html

 https://blog.csdn.net/qq_38784454/article/details/80329021

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132041.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 智能小区管理系统_php导航网源码

    智能小区管理系统_php导航网源码☞文末有福利哟,请关注小枣获取方案智慧小区智慧物业管理系统一体化解决方案传统物业在管理上不仅成本高,服务质量也很难有所保障。现在很多小区都安装了智能物业管理系统,它将信息手段与现代物业管理工作相结合,帮助物业管理团队及时响应客户需求,降低运营成本,提升服务品质。智慧物业是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,将物业各个单位紧密连接起来,实现数据的融合,建立起高效…

  • 全面了解风险决策引擎【一】

    全面了解风险决策引擎【一】决策引擎对很多风控从业者来说都是绕不开的必学知识点,每一个与金融业务相关的技术框架,都需要一个成熟稳定的决策引擎组件来支持,而目前,只有15%左右的互联网产品配置了这一工具。本文旨在帮助大家认识决策引擎,包括前台规则配置与后台技术搭建,另外提供几个比较不错的轻量级开源引擎供大家进一步学习。全文总计1.7w字,因内容较长,可分四部分进行阅读: 1.决策引擎介绍(适用人员:还没使用决策引擎的老板) 2.前台规则管理(适用人员:业务、分析、模型、决策) 3.后台引擎框架(适用

  • mybatis code helper pro 2.9 激活[最新免费获取]

    (mybatis code helper pro 2.9 激活)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 在laravel框架中使用ajax请求报错419

    在laravel框架中使用ajax请求报错419

    2021年10月27日
  • 请描述一下activity的生命周期_activity生命周期七种方法

    请描述一下activity的生命周期_activity生命周期七种方法博主声明:转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。本文首发于此博主:威威喵|博客主页:https://blog.csdn.net/smile_running在学习Android时候,通常一开始学习的都是它的生命周期,谁让我们第一个创建的就是MainActivity类呢。学习Activity就要从它…

  • 怎么测试网站的稳定性_稳定性长期试验需进行多少个月试验

    怎么测试网站的稳定性_稳定性长期试验需进行多少个月试验今天面试遇到一个问题,如何进行网站的稳定性测试?因为之前从事的是电信行业,其稳定性测试是发送确定的traffic,运行72小时,观测系统的资源使用情况,traffic处理是否正常,有无内存泄漏,有无进程崩溃,其他资源使用是否正常等等。所以也给了一个类似的稳定性测试思路:按照系统设计容量的性能指标,模拟最大并发访问需求,运行72小时,看系统响应时间,监控资源利用的方法。回来查询发现,网易对这个问题也…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号