目录
一、非线性引入
二、非线性规划模型
三、Matlab中的非线性规划函数
四、求解不等式和等式双变量约束
五、非线性约束求最小值
5.1 奇奇怪怪的三变量
5.2 可可爱爱的范围寻优
六、总结
一、非线性引入
前面两天跟着川川学习了线性规划和整数线性规划,今天来学习非线性,线性,指量与量之间按比例、成直线的关系,在空间和时间上代表规则和光滑的运动;而非线性则指不按比例、不成直线的关系,代表不规则的运动和突变。显然,实际生活中遇到的很多变化都是非线性的,比如股票的涨跌,因此我们还需探究非线性规划问题。
二、非线性规划模型
在此之前,我们接触过线性规划模型,大致如下
而非线性规划模型的基本数学模型是:
三、Matlab中的非线性规划函数
Matlab中有fmincon函数用于约束非线性的多个函数变量的min,具体调用格式如下:
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)
其中:
b 和 beq 是向量
A 和 Aeq 是矩阵
c(x) 和 ceq(x) 是返回向量的函数
f(x) 是返回标量的函数
f(x)、c(x) 和 ceq(x) 是非线性函数。
lb和ub可以是上下限亦或者是传递用的矩阵
四、求解不等式和等式双变量约束
题目如下:
、
咱先把目标函数搞出来:
fun=(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2
然后再把约束条件搞出来:
clc
clear all
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [0,0];%初始点咱改成0,0
A = [1,-2];
b = 1;
Aeq = [2,1];
beq = 1;
[x,y] = fmincon(fun,x0,A,b,Aeq,beq)
运行结果就是下面这样啦:
五、非线性约束求最小值
5.1 奇奇怪怪的三变量
先跟着川川把函数搞出来:
min1f (x)=x1^2 + x2^2 + x3^2 + 8
然后把非线性的等式与不等式约束加上去,代码如下:
clc
clear all
%% 主函数
options=optimset('largescale','off');
[x,y] = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)
%% 目标函数
function f=fun(x)
f=sum(x.^2)+8;
end
%% 非线性约束条件
function [c,ceq]=nonlcon(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]; %非线性等式约束化成一侧
end
(这里的nonlcon函数萌新真的不太懂噢,就只能照搬啦)而c和ceq均是数组,运行结果就是下面这样啦:
5.2 可可爱爱的范围寻优
目标函数是这样的:
fun2=(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2
别忘了圆的函数:
function [c,ceq] = circle(x)
c = (x(1)-2)^2 + (x(2)-2)^2 - 2^2;
ceq = [];
主代码:
clc
clear all
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
lb = [0,0.2];
ub = [0.5,0.8];%x1,x2的约束条件,转化为lb和ub上下限
A = [];
b = [];
Aeq = [];
beq = [];%没有线性约束所以上述四项全为0
x0 = [1,1];
nonlcon = @circle;
[x,y] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
运行结果
Local minimum found that satisfies the constraints.Optimization completed because the objective function is non-decreasing in
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.<stopping criteria details>x =0.5000 0.6771y =18.4935
六、总结
基本上能够理解川川写的,但是对于fmincon函数和nonlcon函数理解还不够,尤其后者,作为一个非科班的人来说,真的没听过,后面再继续努力,多多了解。