非线性规划
标准型:
(A是线性不等式的系数矩阵,c(x)非线性不等式约束)
[x,fval]=fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon,option)
注释:
x的返回值是决策向量x的取值,fval的返回值是目标函数f(x)的取值
fun是用M文件定义的函数f(x),代表了(非)线性目标函数
x0是x的初始值
A,b,Aeq,beq定义了线性约束 ,如果没有线性约束,则A=[],b=[],Aeq=[],beq=[]
lb和ub是变量x的下界和上界,如果下界和上界没有约束,则lb=[],ub=[],也可以写成lb的各分量都为 -inf,ub的各分量都为inf
nonlcon是用M文件定义的非线性向量函数约束
options定义了优化参数,不填写表示使用Matlab默认的参数设置
练习:
第二个代码:
(1).编写M函数fun1.m 定义目标函数:
function f=fun1(x);
f=x(1).^2+x(2).^2+x(3).^2+8;
(2).编写M函数fun2.m定义非线性约束条件:
function [c,ceq]=fun2(x);
c=[-x(1).^2+x(2)-x(3).^2
x(1)+x(2).^2+x(3).^3-20];
ceq=[-x(1)-x(2).^2+2
x(2)+2*x(3).^2-3];
(3).主程序:
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')
司守奎非线性规划例题:
注:
使用optimproblem求解优化问题,目标函数不能直接使用符号决策向量的绝对值(abs不允许使用)
解:
先定义匿名函数使用abs,通过fcn2optimexpr转换才能使用绝对值
clc;
clear;
d0 = load('data10_3.txt') ;
prob = optimproblem;
x = optimvar('x', 2,'LowerBound', 0) ;
y = optimvar('y', 2, 'LowerBound', 0) ;
z = optimvar('z',6,2,'LowerBound', 0) ;
a = d0(1,:);
b = d0(2,:);
c = d0(3,:);
prob. 0bjective = fcn2optimexpr (@fun10_3,x,y,z,a,b) ;
prob.Constraints.con1 = sum(z,2)==c’;
prob.Constraints.con2 = sum(z)<=20 ;
x0.x =10*rand(2,1);
x0.y =10*rand (2,1);
x0.z =10*rand (6,2) ;
opt=optimoptions (' fmincon’, 'Algorithm’, 'sap') ;
[sol,fval,flag,output] = solve(prob, x0,'Options' , opt)
xx=sol.x,yy=sol.y,zz=sol.z %显示决策向量的值
function obj = fun10_3(x,y,z,a, b) ;
obj = 0;
for i= 1:6
for j =1:2
obj = obj + z(i,j)*sqrt((x (j)-a(j))^2+(y(j)-b(i) )^2);
end
end
end
进阶 无约束问题的最优性条件
在了解的非线性规划的基本形式之后,我们下一个需要进行探索的问题就是如何保证我们的非线性规划问题是具有最优解的?如何保证我们获得解释最优的?,针对这两个问题,我们给出一些相关的最优性条件。
1 梯度角度
在非线性规划问题,最为常见的求解思想和最优解的证明就是从梯度的角度来看待整个问题。对于一个常见的多元函f(x)而言,存在以下一个基本关系:
4. 梯度方向描述的是函数沿着点x最快的上升方向,则负梯度方向描述的是最快的下降方向。
1.2 、多元函数的泰勒展开和结果逼近
对于一个常见的函数f(x),我们可以给出其二次的泰勒展开式:
根据泰勒展开式,我们可以进行函数的在点的结果逼近,其逼近方式如下公式所示:
这两个逼近公式的作用在哪里?这里我们稍微的理解一下这两个公式,举一个实际的例子,如果你对机器学习尤其是深度学习有一定的了解,你一定可以知道,我们在对于深度学习获取最优的参数过程中,往往不是一次就可以直接获取到结果,我们需要经过不断的进行迭代,这个迭代的过程就是不断的更新参数w,我们通过最小化误差函数还调节参数w,这个调节的过程就是从当前的w点转移到能够使损失函数进一步减少的点w’。一般来讲,我们在利用梯度求解的过程中,这个转移的过程就是利用上面的逼近公式来实现的。由于很多问题可能不存在二阶导数,所以更多的我们使用的是一阶的逼近。
1.3 一阶和二阶条件,定理
在回顾了梯度的基本形式和作用,以及能够理解一阶和二阶逼近之后,我们下面要给出一阶导数和二阶导数最优性的两个必要条件:
1.4 非线性规划的最优性条件
在对上面的描述有了一些了解之后,下面我们来看在非线性规划中的最优性条件。首先,非线性规划问题也需要满足上面的一般性的条件,同时,在非线性规划中还有一个常见的结论:
3. 凸约束问题的最优性条件
在上面的两个大的部分中,我们主要介绍的是一般情况下的非线性规划问题和其最优性条件,在上面描述的最优性条件中,我们给出的要么是充分条件,要么是必要条件,也就是说,对于一般的非线性规划问题,其最优性的充要条件是很难找找到的,但是有一类的非线性规划问题的最优性的充要条件是比较好确定的。那就是——凸函数的最优性条件。
3.1 凸函数的最优性充要条件
这里我们给出了关于凸函数的判别和最优点结果的充要条件,以及相关点在凸函数中的全局最优性的判别。根据这些条件和结论可知,定义在凸集上的凸函数的极值点对于我们求解最小化的问题有着很好的帮助,其根本原因在于一个目标函数和约束都是凸函数,这种可行域是凸集的规划问题,我们称之为凸规划问题。那么下一步不难想象,我们需要做的就是去判定一个非线性规划问题的可行域是否是凸集。
对于这个问题,我们需要回顾一下凸集的基本形式:
凸集的交集仍然是一个凸集。所以如果所有约束函数的的可行域都是凸集,那么目标函数的可行域也是凸集,那么整问题就变成了凸规划的问题。
对于(3. 凸约束问题的最优性条件)的解释:
matlab大多数非线性规划函数只能求局部最优解,只有凸规划才能求最优解。
凸规划:
是凸函数,为凸函数, 为线性函数——凸规划,理论上可以求全局最优解。
凸函数: