目录

  • Syntax
  • Description
  • Examples
    • Linear Inequality Constraint
    • Linear Inequality and Equality Constraint
    • Bound Constraints
    • Nonlinear Constraints

参考:fmincon的官方文档

Syntax

x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(problem)
[x,fval] = fmincon(___)
[x,fval,exitflag,output] = fmincon(___)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)

Description

求解带约束的非线性优化问题。
求解 f(x)f(x)f(x) 满足约束的最小值,表达式如下:
min⁡xf(x)满足{c(x)≤0ceq(x)=0A⋅x≤bAeq⋅x=beqlb≤x≤ub\min_{x} f(x) \quad 满足 \quad \left\{ \begin{array}{lr} c(x) \leq 0 & \\ ceq(x) = 0 & \\ A \cdot x \leq b & \\ Aeq \cdot x = beq & \\ lb \leq x \leq ub \end{array} \right. xmin​f(x)满足⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​c(x)≤0ceq(x)=0A⋅x≤bAeq⋅x=beqlb≤x≤ub​​
c(x)≤0c(x) \leq 0c(x)≤0 是非线性不等式约束;ceq(x)=0ceq(x) = 0ceq(x)=0 是非线性等式约束;A⋅x≤bA \cdot x \leq bA⋅x≤b是线性不等式约束;Aeq⋅x=beqAeq \cdot x = beqAeq⋅x=beq是线性等式约束;lb≤x≤ublb \leq x \leq ublb≤x≤ub是xxx的上下界约束。
"⋅\cdot⋅ "是点乘,bbb 和 beqbeqbeq 是向量,AAA 和 AeqAeqAeq 是矩阵,c(x)c(x)c(x) 和 ceq(x)ceq(x)ceq(x) 是返回一个向量,而 f(x)f(x)f(x) 是返回一个标量。 f(x)f(x)f(x) ,c(x)c(x)c(x) 和 ceq(x)ceq(x)ceq(x) 可以是非线性函数。xlbub 可以是向量或矩阵;参见:Matrix Arguments。


x=fmincon(fun,x0,A,b)x = fmincon(fun,x0,A,b)x=fmincon(fun,x0,A,b) 从 x0x0x0 开始,寻找一个 xxx , 满足 f(x)f(x)f(x) 最小且满足约束 A⋅x≤bA \cdot x ≤ bA⋅x≤b 。 x0x0x0 可以是标量,向量或矩阵。

传递额外参数说明了如何将额外参数传递给目标函数和非线性约束函数。


x=fmincon(fun,x0,A,b,Aeq,beq)x = fmincon(fun,x0,A,b,Aeq,beq)x=fmincon(fun,x0,A,b,Aeq,beq) 从 x0x0x0 开始,寻找一个 xxx ,满足 funfunfun 最小且满足Aeq⋅x=beqAeq \cdot x = beqAeq⋅x=beq 和 A⋅x≤bA \cdot x ≤ bA⋅x≤b. 如果没有不等式约束, 置 A=[]A = []A=[] 、b=[]b = []b=[].


x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 从 x0x0x0 开始,寻找一个 xxx ,满足 funfunfun 最小且满足Aeq⋅x=beqAeq \cdot x = beqAeq⋅x=beq 、 A⋅x≤bA \cdot x ≤ bA⋅x≤b 且 lb≤x≤ublb ≤ x ≤ ublb≤x≤ub. 如果不存在等式约束, 设置 Aeq=[]Aeq = []Aeq=[] 、 beq=[]beq = []beq=[]. 如果 x(i)x(i)x(i) 没有下界, 设置 lb(i)=−Inflb(i) = -Inflb(i)=−Inf, 如果 x(i)x(i)x(i) 没有上界, 置 ub(i)=Infub(i) = Infub(i)=Inf.

如果问题的输入范围( lblblb 和 ububub )不一致(原文是inconsistent),则fminconfminconfmincon会抛出错误。 在这种情况下,输出 xxx 为 x0x0x0 ,fvalfvalfval 为 [][][]。
对于默认的“interior-point”算法,fminconfminconfmincon 将 xxx 中超出边界(lb≤x≤ublb ≤ x ≤ ublb≤x≤ub)的分量设置为边界值。 对于“trust-region-reflective”算法,fminconfminconfmincon 将 xxx 中超出边界的分量设置到边界内部。 对于其他算法,fminconfminconfmincon 将 xxx 中超出边界的分量设置为最小的边界值。 xxx 中满足边界调节的分量不会更改。 请参阅迭代可以违反约束。


x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 从 x0x0x0 开始, 寻找一个 xxx , 满足线性约束Aeq⋅x=beqAeq \cdot x = beqAeq⋅x=beq 、 A⋅x≤bA \cdot x ≤ bA⋅x≤b 、 lb≤x≤ublb ≤ x ≤ ublb≤x≤ub 以及非线性约束 c(x)≤0c(x) ≤ 0c(x)≤0 和 ceq(x)=0ceq(x) = 0ceq(x)=0 ,c(x)c(x)c(x) 和 ceq(x)ceq(x)ceq(x) 定义在 nonlconnonlconnonlcon(一个函数) 中. 如果不存在下界, 置 lb=[]lb = []lb=[] ;如果不存在下界,置 ub=[]ub = []ub=[].


x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)使用指定的选项 optionsoptionsoptions来优化问题. 使用 optimoptions来设置这些选项. 如果没有非线性约束,置 nonlcon=[]nonlcon = []nonlcon=[].


x=fmincon(problem)x = fmincon(problem)x=fmincon(problem) 寻找 problemproblemproblem 的最小值, problemproblemproblem 是一种Input Arguments中描述的结构(structure). 可以通过从Optimization app导出一个 problemproblemproblem , 参见Exporting Your Work.


[x,fval]=fmincon(___)[x,fval] = fmincon(\_\_\_)[x,fval]=fmincon(___) , 对于任何调用形式,返回解xxx和在解xxx处目标函数funfunfun的值。


[x,fval,exitflag,output]=fmincon(___)[x,fval,exitflag,output] = fmincon(\_\_\_)[x,fval,exitflag,output]=fmincon(___),exitflagexitflagexitflag表示 fminconfminconfmincon退出的条件(退出的原因);output是一个结构(structure),描述了一些优化过程的信息。


[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(___)[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(\_\_\_)[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(___) 额外返回:

lambdalambdalambda — Structure with fields containing the Lagrange multipliers at the solution x.

gradgradgrad — funfunfun 在解 xxx处的梯度.

hessian — funfunfun 在解 xxx 处的Hessian矩阵. 参见 fmincon Hessian.

Examples

Linear Inequality Constraint

求Rosenbrock函数:
f(x)=100(x22−x12)2+(1−x1)2(1)f(x) = 100(x_2^2 - x_1^2 )^2 + (1 - x_1)^2 \tag{1} f(x)=100(x22​−x12​)2+(1−x1​)2(1)
满足约束:
x1+2x2≤1(2)x_1+ 2x_2 \leq 1 \tag{2} x1​+2x2​≤1(2)
取得最小值时的xxx。Rosenbrock在无约束的情况下,最优解是x1=1,x2=1x_1=1, x_2=1x1​=1,x2​=1;但有约束2时,1+2∗1=3>11 + 2*1 = 3 > 11+2∗1=3>1,所以(1, 1)不是有约束2的情况下最优解。

求解步骤如下:

  • 目标函数
    编写一个目标函数 fun (就是f(x)f(x)f(x),可以像下面一样写成一个匿名函数,也可以单独新建一个函数文件fun.m,在fun.m里编写目标函数的代码,并返回一个值):

    fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
    
  • 约束
    约束2是一个线性不等式,需要表达成 A⋅x≤bA \cdot x \leq bA⋅x≤b 的形式。对于约束2,A=[1,2],b=1A=[1, 2], b=1A=[1,2],b=1。对于x0x_0x0​的初值,这里取x0=[−1,2]x_0 = [-1, 2]x0​=[−1,2];给x0x_0x0​取初值时,如果知道xxx的解所在范围,可以去一个附近的值,如果不知道,随机取非零值就行。

  • 完整代码(复制到Matlab中,即可运行)

        fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;x0 = [-1,2];A = [1,2];b = 1;x = fmincon(fun,x0,A,b)
    

    运行结果如下:

    Local minimum found that satisfies the constraints.Optimization completed because the objective function is non-decreasing in
    feasible directions, to within the default value of the optimality tolerance,
    and constraints are satisfied to within the default value of the constraint tolerance.<stopping criteria details>x =0.5022    0.2489
    

    两段英文是调用 fmincon 的结束原因(非常重要!一定要仔细看,有时候优化次数不够,就会在英文中体现出来)。x 之后的就是优化的结果,x1=0.5022,x2=0.2489x_1 = 0.5022, x_2 = 0.2489x1​=0.5022,x2​=0.2489。

Linear Inequality and Equality Constraint

求Rosenbrock函数:
f(x)=100(x22−x12)2+(1−x1)2(3)f(x) = 100(x_2^2 - x_1^2 )^2 + (1 - x_1)^2 \tag{3} f(x)=100(x22​−x12​)2+(1−x1​)2(3)
满足约束:
{x1+2x2≤12x1+x2=1(4)\left\{ \begin{array}{lr} x_1+ 2x_2 \leq 1 & \\ 2x_1 + x_2 = 1 \end{array} \right.\tag{4} {x1​+2x2​≤12x1​+x2​=1​(4)
取得最小值时的xxx。

  • 目标函数
    目标函数和上面的一致:

    fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
    
  • 约束

    • x1+2x2≤1x_1+ 2x_2 \leq 1x1​+2x2​≤1是线性不等式约束,需要改写成A⋅x≤bA \cdot x \leq bA⋅x≤b的形式,故A=[1,2],b=1A=[1, 2], b=1A=[1,2],b=1。
    • 2x1+x2=12x_1 + x_2 = 12x1​+x2​=1是线性等式约束,需要改写成Aeq⋅x=beqAeq \cdot x = beqAeq⋅x=beq的形式,故Aeq=[2,1],beq=1Aeq=[2, 1], beq=1Aeq=[2,1],beq=1。
    • 取x0=[0.5,0]x_0=[0.5, 0]x0​=[0.5,0]。
  • 完整代码

    fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
    x0 = [0.5,0];
    A = [1,2];
    b = 1;
    Aeq = [2,1];
    beq = 1;
    x = fmincon(fun,x0,A,b,Aeq,beq)
    

    运行结果:

    此处省略那两段英文x =0.4149    0.1701
    

Bound Constraints

求Rosenbrock函数:
f(x)=100(x22−x12)2+(1−x1)2(5)f(x) = 100(x_2^2 - x_1^2 )^2 + (1 - x_1)^2 \tag{5} f(x)=100(x22​−x12​)2+(1−x1​)2(5)
满足约束:
{0≤x1≤10≤x2≤2(6)\left\{ \begin{array}{lr} 0 \leq x_1 \leq 1 & \\ 0\leq x_2 \leq 2 \end{array} \right.\tag{6} {0≤x1​≤10≤x2​≤2​(6)
取得最小值时的xxx。

  • 约束
    约束只有对x1x_1x1​和x2x_2x2​的取值范围有约束,这叫边界约束。边界约束可以分别为每一个元素指定上界和下界。对于本例的边界约束,写成代码是:

    lb = [0,0]; % lb是下界
    ub = [1,2];    % ub是上界
    

    由于没有其他线性约束,故:

    A = [];
    b = [];
    Aeq = [];
    beq = [];
    
  • 完整代码
    取x0=[0.5,1]x_0=[0.5 ,1]x0​=[0.5,1]

    fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));lb = [0,0];
    ub = [1,2];A = [];
    b = [];
    Aeq = [];
    beq = [];x0 = [0.5,1];
    x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
    

    运行结果:

    x =1.0000    2.0000
    

    另外,当初值x0x_0x0​的取值不同时,得到的优化结果可能也不同。 参见: Obtain the Objective Function Value。

  • 补充:如果 xxx 中某个元素的上界或者下界是无穷大?
    假如边界约束如下:
    {1≤x1x2≤4(7)\left\{ \begin{array}{lr} 1 \leq x_1 & \\ x_2 \leq 4 \end{array} \right. \tag{7} {1≤x1​x2​≤4​(7)
    改写成有上下界的形式就是:
    {1≤x1≤+∞−∞≤x2≤4(8)\left\{ \begin{array}{lr} 1 \leq x_1 \leq +\infty & \\ -\infty \leq x_2 \leq 4 \end{array} \right. \tag{8} {1≤x1​≤+∞−∞≤x2​≤4​(8)
    那么有:

    lb = [1, -Inf];  % lb是下界
    ub = [Inf, 4];   % ub是上界
    

    如果没有上界,那么上界就是Inf;如果没有下界,下界就是-Inf。

Nonlinear Constraints

求Rosenbrock函数:
f(x)=100(x22−x12)2+(1−x1)2(9)f(x) = 100(x_2^2 - x_1^2 )^2 + (1 - x_1)^2 \tag{9} f(x)=100(x22​−x12​)2+(1−x1​)2(9)
满足约束:
{0≤x1≤0.50≤x2≤0.8(x1−13)2+(x2−13)2≤1.52(10)\left\{ \begin{array}{lr} 0 \leq x_1 \leq 0.5 & \\ 0\leq x_2 \leq 0.8 & \\ (x_1 - \frac{1}{3})^2 + (x_2 - \frac{1}{3})^2 \leq 1.5^2 \end{array} \right. \tag{10} ⎩⎨⎧​0≤x1​≤0.50≤x2​≤0.8(x1​−31​)2+(x2​−31​)2≤1.52​​(10)
取得最小值时的xxx。

  • 约束
    除了x1x_1x1​和x2x_2x2​的边界有约束之外,还多了第三个非线性约束;含义是x1x_1x1​和x2x_2x2​组成的点,在圆心为(13,13)(\frac{1}{3}, \frac{1}{3})(31​,31​) 半径为1.5的圆内。
    对于非线性约束,需要自己实现一个函数nonlcon,来计算 c(x)c(x)c(x) 和 ceq(x)ceq(x)ceq(x)。对于约束(x1−13)2+(x2−13)2≤1.52(x_1 - \frac{1}{3})^2 + (x_2 - \frac{1}{3})^2 \leq 1.5^2(x1​−31​)2+(x2​−31​)2≤1.52,需要转换为c(x)≤0c(x) \leq 0c(x)≤0的形式,所以需要把1.521.5^21.52移动到表达式的左边,即:(x1−13)2+(x2−13)2−1.52≤0(x_1 - \frac{1}{3})^2 + (x_2 - \frac{1}{3})^2 - 1.5^2 \leq 0(x1​−31​)2+(x2​−31​)2−1.52≤0,故 c(x)=(x1−13)2+(x2−13)2−1.52c(x) = (x_1 - \frac{1}{3})^2 + (x_2 - \frac{1}{3})^2 - 1.5^2c(x)=(x1​−31​)2+(x2​−31​)2−1.52。

    新建一个函数nonlcon.m,输入以下代码:

    % nonlcon.m
    function [c,ceq] = nonlcon(x)
    c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1.5)^2;
    ceq = [];
    

    c 就是 c(x)c(x)c(x)(非线性不等式约束)的值;ceq就是ceq(x)ceq(x)ceq(x)(非线性等式约束)的值,因为本例中没有非线性等式约束,所以置为[][][]

  • 完整代码

    % example4.m
    fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
    lb = [0,0.2];
    ub = [0.5,0.8];
    A = [];
    b = [];
    Aeq = [];
    beq = [];
    x0 = [1/4,1/4];
    x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)
    

    运行结果:

    x =0.0000    0.2000
    
  • 补充: 如果有多个非线性不等式约束或者多个非线性等式约束?
    假如函数的约束如下:
    {c1(x)≤0c2(x)≤0ceq1(x)=0ceq2(x)=0(11)\left \{ \begin{array}{lr} c_1(x) \leq 0 & \\ c_2(x) \leq 0 & \\ ceq_1(x) = 0 & \\ ceq_2(x) = 0 \end{array} \right. \tag{11} ⎩⎪⎪⎨⎪⎪⎧​c1​(x)≤0c2​(x)≤0ceq1​(x)=0ceq2​(x)=0​​(11)
    那么,nonlcon.m的代码应是:

    % nonlcon.m
    function [c,ceq] = nonlcon(x)
    c1 = ...
    c2 = ...
    ceq1 = ...
    ceq2 = ...
    c = [c1; c2];
    ceq = [ceq1; ceq2];
    

    其中:c1=c1(x),c2=c2(x),ceq1=ceq1(x),ceq2=ceq2(x)c1 = c_1(x), c2 = c_2(x), ceq1=ceq_1(x), ceq2=ceq_2(x)c1=c1​(x),c2=c2​(x),ceq1=ceq1​(x),ceq2=ceq2​(x)。就是说,有几个非线性不等式约束,ccc中就应该有几个元素,ceqceqceq同理。

Matlab fmincon相关推荐

  1. [转载]Matlab fmincon函数用法

    原文地址:Matlab fmincon函数用法作者:长笛人倚楼Gloria 这个函数在之前优化工具箱一文中已经介绍过,由于其应用广泛,所以这里通过实例单独整理一下其用法. 一.基本介绍 求解问题的标准 ...

  2. Matlab Fmincon 解决带积分的二元非线性规划问题

    最近写小论文做数值仿真时遇到了问题,模型的目标函数中包含上下限为决策变量的正态分布概率密度函数以及分布函数,使用yalmip调cplex求解发现结果有点问题,网上求助无果,最后求助于matlab自带的 ...

  3. matlab fmincon 怎样停止,请教:matlab 中关于 fmincon 函数问题

    准备用matlab做一个求最优解的问题:准备用fmincon 函数.在写function的时候遇到问题,请帮忙指点.源代码如下: A = [1,1,1;-1,-1,-1;1,0,0;0,1,0;0,0 ...

  4. matlab fmincon优化,Matlab关于fmincon优化问题

    碰到一些问题,希望帮忙看看! 最近写了一个用户自定义程序,这个程序调用格式是f=Opt_DriDispRelia(wt),即给出一个向量wt,就可以得到一个标量f. 当然,这个自定义函数为非线性函数, ...

  5. Matlab fmincon函数用法

    这个函数在之前优化工具箱一文中已经介绍过,由于其应用广泛,所以这里通过实例单独整理一下其用法. 一.基本介绍 求解问题的标准型为 min F(X) s.t AX <= b AeqX = beq ...

  6. Matlab fmincon函数

    文章目录 函数功能 函数表达及用法 ==**trust-region-reflective算法的说明 (梯度)**== **==Hessian矩阵应用说明==** 返回值 函数功能 获取约束的非线性多 ...

  7. MATLAB fmincon函数 进阶资料(磕盐记录)

    说明: 阅读本文前,请先阅读 参考网址1-基础使用 中的案例,本文适用于运行过 fmincon函数 案例的读者!!! 一.fmincon函数:算法介绍 fmincon函数中,可以调用五种算法(具体每种 ...

  8. matlab fmincon函数 用法,matlab中fmincon函数的用法?

    我建立一个myfunction.m文件function f=myfuncion(x) M=[2,-1;-1,2]; B=[3;-3]; f=1/2*x'*M*x+B'*x;然后在matlab窗口中输入 ...

  9. matlab fmincon函数格式,求matlab中fmincon函数格式的中文解释?谢谢!!

    fmincon是Matlab优化工具箱(OptimizationToolbox)中的一个命令,用来求有限制条件(约束)的非线性目标函数的极小化问题.x=fmincon(fun,x0,A,b),用于求解 ...

最新文章

  1. ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略
  2. Mac更新VSCode写权限被拒绝 Cannot update while running on a read-only volume
  3. 牛客练习赛36 F-Rabbit的蛋糕 (叉积求面积, 记录前缀)
  4. CodeForces1477D Nezzar and Hidden Permutations(构造+调整+菊花图)
  5. ASP.NET 页面之间传值的几种方式
  6. 自然语言生成(NLG)的好处是什么,它如何影响BI?
  7. mysql如何创建用户代码_MySQl创建用户和授权的方法介绍(代码示例)
  8. oracle sql 执行计划分析_ORACLE数据库查看执行计划
  9. Xcode添加include目录
  10. 目标检测、语义分割性能指标
  11. conda创建管理虚拟环境
  12. 不同测序数据应用与基因组组装|Canu
  13. python解压zip文件_python怎样压缩和解压缩ZIP文件(转)
  14. 微信开发者工具未绑定企业号开发者
  15. java 制表符 宽度不够_有没有办法强制使用制表符而不是Java中的空格?
  16. SUN 的JDO标准
  17. 家里摄像头密码忘记找回
  18. Oracle 创建PDB的几种常用方法
  19. 细胞分类 识别 系统
  20. Android 10.0 wifi的随机mac地址修改为固定不变

热门文章

  1. PAL制式和NTSC制式的定义及区别
  2. 设计模式读书笔记-----模板方法模式
  3. 百度网盘迁移至阿里云盘,附工具!
  4. python request库下载_python3.6 urllib.request库实现简单的网络爬虫、下载图片
  5. 【实战技能】关于开发者的沟通技能
  6. Hive中with/with as 的用法
  7. 十个程序员必备的网站
  8. Annotation PK Interface
  9. 【清集线器、交换机、路由器的区别,
  10. weblogic内存溢出解决办法