0-1型整数规划matlab怎么写

1.如何用matlab求解0例 求解下列0-1整数线性规划
目标函数
max f=-3x1+2x2-5x3
约束条件
x1+2x2-x3≤2,
x1+4x2+x3≤4,
x1+x2≤3,
4x1+x3≤6,
x1,x2,x3为0或1.
在Matlab命令窗口中输入如下命令:
f=[-3,2,-5];
a=[1,2,-1,;1,4,1;1,1,0;0,4,1];b=[2;4;3;6];
[x,fval]=bintprog(-f,a,b)
%因为bintprog求解的为目标函数的最小值,所以要在f前面加个负号 。
运行结果为:
Optimization terminated.
x = 0
1
0
fval = -2
表示x1=0,x2=1,x3=0时,f取最大值2 。
当然,我们还可以在Matlab命令窗口中输入如下命令查询0-1整数规划命令的用法 。
help bintprog
2.请高手们帮忙如何编写MATLAB编写程序来求整数规划的题目1、求解整数规划问题并不是MATLAB的强项,如果不是有要求必需要用MATLAB,可以考虑使用Lingo求解,求解速度快,程序也很简单:
max=120*x1+560*x2;
0.6*x1+(1+0.5*x2)*x2=300;
x1>=0;
x2>=0;
@GIN(x1);@GIN(x2);
end得到的结果是x1=500,x2=0 。
2、用MATLAB求解整数规划,官方好像并没有提供有效的手段(仅有一个用于求解0-1规划问题的bintprog函数) 。我知道的有两个第三方函数:
一个是bnb20,是十几年前编写的,现在用的话需要做一些改动 。而且对非线性约束的处理似乎有问题,我使用它求解并未得到正确答案 。
另一个是lpsolve,其实是用C语言编的,提供了MATLAB的调用接口而已 。由于调用动态链接库涉及到32位/64位的问题,配置起来比较麻烦,似乎没必要用它而不是Lingo 。
3、就本题而言,由于变量少,问题规模不大,可以采用穷举法 。听起来穷举法似乎是一种比较笨的方法,但其实对于一些简单问题来说却最为直接有效 。
由于x1, x2>=0,又存在一个等式约束,不难得到,满足约束的x2最大值为23.5153,考虑到整数约束,x2的取值其实只有一共24种可能(0-23);再考虑到等式约束,计算出的x2满足整数要求的仅有8个数而已 。在8个数里面选一个最大的,应该不是难事吧?
参考代码:
ezplot('0.6*x1+(1+0.5*x2)*x2-300',[0 500 0 24])
hold on
x2 = 0:23;
x1 = ( 300 - (1+0.5*x2).*x2) / 0.6;
valid = abs(x1-fix(x1)) <= eps;
x1 = x1(valid);
x2 = x2(valid);
z = 120*x1+560*x2;
[inx,inx] = max(z);
[x1(inx) x2(inx)]
scatter(x1,x2,40,z,'filled')
colorbar得到结果与用Lingo求解一致 。
3.matlab程序怎么实现0,1两个数填五个空%by dynamic
%see also
%contact me [email protected]
%2009.2.
%
clc
【0-1型整数规划matlab怎么写】clear
B=[];
for ii=1:5
select=nchoosek(1:5,ii);
[m,n]=size(select);
r_num=repmat([1:m]',n,1);
c_num=select(:);
index=sub2ind([m 5],r_num(:),c_num);
A=ones(m,5);
A(index)=0;
B=[B;A];
end
%注意上面有一种全部为1的面没有包括,如果包括这一种正好32种
%还有该程序不适合很大数据的排列
%但是对于几十个没有什么问题
B =
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 1 1
1 0 1 0 1
1 0 1 1 0
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0
0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
0 0 0 0 0

0-1型整数规划matlab怎么写

文章插图