MatlabLingo:数模10-非线性规划与01规划模型
Posted fxalll
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MatlabLingo:数模10-非线性规划与01规划模型相关的知识,希望对你有一定的参考价值。
非线形规划例题
非线形规划例题(lingo解法)
非线形规划例题(Matlab解法)
首先建立脚本:
function f = fun1(x)
f = -98*x(1) - 277*x(2) + x(1)^2 + 0.3*x(1)*x(2) + 2*x(2)^2;
end
注意由于题目是max,需要改成标准形式。所有的符号都要变号。(而“数模9”文章给的代码自动转换了,所以max可以直接输入,这个要自己创建函数文件,所以需要自己修改为标准型)
保存为fun1.m。
再建立脚本:
function [g,h] = fun2(x)
g(1) = x(1) + x(2) - 100;
g(2) = x(1) - 2*x(2);
h = 0;
end
其中g是不等式约束,h是等式约束。
保存为fun2.m。
最后建立一个脚本:
disp('max(0) or min(1)?');
Judge=input('Judge=');
options = optimset;
[x, y] = fmincon('fun1', rand(2,1), [], [], [], [], zeros(2,1), [], 'fun2', options);
if Judge==0
x
fval=-y
else
x
fval=y
end
在写fun2时,可以把线性和非线性约束的等式和不等式约束都按照这种格式写到这个函数里面,这样的话fun2就包含了所有约束条件,在后面运行fmincon()时不需要再写A,B,Aeq,Beq,直接用[]略过。
‘fun1’代表目标函数,rand(2,1)随机给了x初值,zeros(2,1)代表下限为0,即x1,x2>=0, 'fun2’即刚才写的约束条件。
运行后得到:
与lingo给的结果基本一致。
01规划模型定义及例题
01规划模型例题(lingo解法)
01规划模型例题(Matlab解法)
原本可用以解决的bintprog在2014年被废除了,面对这样大的数据我尝试了几个都报错,如果有人可以把这道题用Matlab解答请私信我。
(尝试1:)
disp('max(0) or min(1)?');
Judge=input('Judge=');
f=[8,13,18,23,10,14,16,27,2,10,21,26,14,22,26,28];
A=[];
b=[];
Aeq=[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1;
1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0;
0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0;
0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0;
0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1];
beq=[1,1,1,1,1,1,1,1];
lb=[0;0;0;0;0;0;0;0];
ub=[inf;inf;inf;inf;inf;inf;inf;inf];
if Judge==0
[x,fval]=linprog(-f,A,b,Aeq,beq,lb,ub);
x
fval=-fval
else
[x,fval]=linprog(f,A,b,Aeq,beq);
x
fval
end
(尝试2:)
function f = fun1(x)
f = 8*x(11)+13*x(12)+18*x(13)+23*x(14)+10*x(21)+14*x(22)+16*x(23)+27*x(24)+2*x(31)+10*x(32)+21*x(33)+26*x(34)+14*x(41)+22*x(42)+26*x(43)+28*x(44);
end
function [g,h] = fun2(x)
g = 0;
h(1) = x(11)+x(12)+x(13)+x(14)-1;
h(2) = x(21)+x(22)+x(23)+x(24)-1;
h(3) = x(31)+x(32)+x(33)+x(34)-1;
h(4) = x(41)+x(42)+x(43)+x(44)-1;
h(5) = x(11)+x(21)+x(31)+x(41)-1;
h(6) = x(11)+x(21)+x(31)+x(41)-1;
h(7) = x(13)+x(23)+x(33)+x(43)-1;
h(8) = x(14)+x(24)+x(34)+x(44)-1;
end
disp('max(0) or min(1)?');
Judge=input('Judge=');
options = optimset;
[x, y] = fmincon('fun1', rand(16,1), [], [], [], [], zeros(16,1), [], 'fun2', options);
if Judge==0
x
fval=-y
else
x
fval=y
end
以上是关于MatlabLingo:数模10-非线性规划与01规划模型的主要内容,如果未能解决你的问题,请参考以下文章