Matlab非线性规划

非线性规划

在matlab非线性规划数学模型可以写成一下形式:
m i n f ( x ) s . t . { A x ≤ B A e q ⋅ x = B e q C ( x ) ≤ 0 C e q ( x ) = 0 minf(x)\\ s.t.\begin{cases} Ax \le B \\ Aeq·x = Beq\\ C(x) \le 0\\ Ceq(x) = 0 \end{cases} minf(x)s.t.AxBAeqx=BeqC(x)0Ceq(x)=0
f(x)为目标函数,A,B,Aeq,Beq为线性约束对应的矩阵和向量,C(x),Ceq(x)为非线性约束。

Matlab求解命令为:

X = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS)

  fun为目标函数,x0为初值,A,B,Aeq,Beq为线性约束对应的矩阵和向量,LB,UB分别为x的
下限和上限,NONLCON为非线性约束(需要写自定义函数),OPTIONS为优化参数。

【例】求下列非线性规划问题
m i n f ( x ) = x 1 2 + x 2 2 + 8 s . t . { x 1 2 − x 2 ≥ 0 − x 1 − x 2 2 + 2 = 0 x 1 , x 2 ≥ 0 minf(x) = x^2_1+x^2_2+8\\ s.t.\begin{cases} x_1^2-x_2 \ge 0\\ -x_1-x_2^2+2=0\\ x_1,x_2 \ge 0 \end{cases} minf(x)=x12+x22+8s.t.x12x20x1x22+2=0x1,x20
编写函数文件:fun1.m,fun2.m

function f = fun1(x)
f = x(1)^2 + x(2)^2 + 8;
end
function [g,h] = fun2(x)
g = -x(1)^2 + x(2); 
%g代表不等式约束,即代表约束条件-x(1)^2 + x(2) <= 0。matlab默认g<=0,所以题目中的条件被改成了相反数。
%如果有多个不等式约束,写成g(1) = 关于x的函数; g(2) = 关于x的函数;······
h = -x(1) - x(2)^2 + 2;
%h代表等式约束,即代表约束条件 -x(1) - x(2)^2 + 2 = 0。
%如果有多个等式约束,写成h(1) = 关于x的函数; h(2) = 关于x的函数;······
end

注:在写fun2时,可以把线性和非线性约束的等式和不等式约束都按照这种格式写到这个函数里面,这样的话fun2就包含了所有约束条件,在后面运行fmincon()时不需要再写A,B,Aeq,Beq,
直接用[]略过。

options = optimset;
[x, y] = fmincon('fun1', rand(2,1), [], [], [], [], zeros(2,1), [], 'fun2', options)
%‘fun1’代表目标函数,rand(2,1)随机给了x初值,zeros(2,1)代表下限为0,即x1,x2>=0, 'fun2'即刚才写的约束条件。

x为最优解,y为最优值。

转化为无约束极值问题

利用问题中的约束函数做出适当的罚函数,将非线性规划问题转化为无约束非线性规划问题。
m i n f ( x ) s . t . { g i ( x ) ≤ 0 i = 1 , 2 , . . . , r h i ( x ) ≥ 0 i = 1 , 2 , . . . , s k i ( x ) = 0 i = 1 , 2 , . . . , t minf(x)\\ s.t.\begin{cases} g_i(x) \le 0 & i=1,2,...,r\\ h_i(x) \ge 0 & i=1,2,...,s\\ k_i(x) = 0 & i=1,2,...,t \end{cases} minf(x)s.t.gi(x)0hi(x)0ki(x)=0i=1,2,...,ri=1,2,...,si=1,2,...,t
取一个充分大的M,构造函数
P ( x , M ) = f ( x ) + M ∑ i = 1 r m a x ( g i ( x ) , 0 ) − M ∑ i = 1 s m i n ( h i ( x ) , 0 ) + M ∑ i = 1 t ∣ k i ( x ) ∣ 其 中 g 代 表 ≤ 的 不 等 式 约 束 , h 代 表 ≥ 的 不 等 式 约 束 , k 代 表 等 式 约 束 。 则 非 线 性 规 划 问 题 转 化 为 无 约 束 最 小 化 P ( x , M ) 。 P(x,M)=f(x)+M\sum_{i=1}^{r}max(g_i(x),0)-M\sum_{i=1}^{s}min(h_i(x),0)+M\sum_{i=1}^{t}|k_i(x)|\\ 其中g代表\le 的不等式约束,h代表\ge 的不等式约束,k代表等式约束。\\ 则非线性规划问题转化为无约束最小化P(x,M)。 P(x,M)=f(x)+Mi=1rmax(gi(x),0)Mi=1smin(hi(x),0)+Mi=1tki(x)ghk线P(x,M)
【例】将上面的例题转化为无约束极值问题:
编写test.m

funtion g = test(x)
M = 50000;
f = x(1)^2 + x(2)^2 +8;
g = f - M*min(x(1),0) - M*min(x(2),0) - M*min(x(1)^2-x(2),0) + M*abs(-x(1)-x(2)^2+2);

命令窗口

[x,y] = fminunc('test', rand(2,1))

参考书籍:Matlab在数学建模中的应用(第二版)卓金武

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值