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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于cesuim三维框架开发的三维路径分析的实现「建议收藏」

    基于cesuim三维框架开发的三维路径分析的实现「建议收藏」1、可以利用百度地图web服务或者天地图web服务,得到二维的路径分析的经纬度;2、利用cesuim地形数据采样接口:sampleTerrain得到高程,然后就有了三维路径分析的坐标信息;3、然后利用画线的接口,就能完成路径分析;记录一下sanpleTerrain的用法://QuerytheterrainheightoftwoCartographicpositionsva…

    2022年8月24日
    5
  • NOIP游记_广州文化之旅

    NOIP游记_广州文化之旅这道题最初博主理解错误,误以为学了某种文化就不能到排斥这种文化的地方去(明明也是这样写的好吧),实际上只用判断到达的国家是否排斥现在所在国家的文化,那就简单多了,Floyd走起,下面是代码:#include&lt;stdio.h&gt;usingnamespacestd;constintMAX=999999;constintMAXN=105;intn,k…

    2022年8月22日
    7
  • Maximal Information Coefficient (MIC)最大互信息系数详解与实现「建议收藏」

    Maximal Information Coefficient (MIC)最大互信息系数详解与实现「建议收藏」MICMIC即:MaximalInformationCoefficient最大互信息系数。使用MIC来衡量两个基因之间的关联程度,线性或非线性关系,相较于MutualInformation(MI)互信息而言有更高的准确度。MIC是一种优秀的数据关联性的计算方式。本篇文章将会详细介绍MIC的算法原理,优缺点以及Python的具体实现方式,并给出一个可视化方案。互信息?互信息(Mut…

    2022年9月18日
    3
  • 3种常用的图片压缩方法

    3种常用的图片压缩方法3种常用的图片压缩方法:把图片上传到阿里云或七牛云,借用云端的图片缩放技术进行压缩。后端对图片尺寸大小进行压缩。前端用Canvas作为媒介压缩图片。作为一名前端攻城狮,主要介绍用Canvas作为媒介压缩图片。…

    2022年6月18日
    33
  • docker部署jenkins安装使用教程_docker关闭所有容器

    docker部署jenkins安装使用教程_docker关闭所有容器前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月30日
    6
  • pycharm安装matplotlib 遇到的问题

    pycharm安装matplotlib 遇到的问题pycharm安装matplotlib遇到的问题打入命令安装。pipinstallmatplotlib安装到一半时报错。提示说得先升级pip版本。然而升级pip又报错。。。。跑去pychram,setting里面更新pip,成功后,再次安装matplotlib,又提示失败,需要升级pip,再次打入升级pip成功后,再安装matplotlib,又是失败。。。。。。服了找到的其它方法:直接去官方下载文件,https://www.lfd.uci.edu/~gohlke/pyt

    2022年8月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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