请高手们帮忙如何编写MATLAB编写程序来求整数规划的题目

题目如图,请注意一定要编写【整数规划】的MATLAB程序,不用给我答案我可以自己放进MATLAB算,只求各位高手能把程序帮我编出来,请一定要完整的给出所有编写的东西QVQ!!!!(查了各种教材似乎都是很难很麻烦的样子看不懂啊QAQ希望可以简单的说明一下,还有整数规划真的要列一长串的东西吗。。。)

只要能帮我编出来你要多少悬赏我都给QAQ顺便挺急的,在线等!

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求解一致。

温馨提示:答案为网友推荐,仅供参考
相似回答