起因还要从我舍友说起。因为舍友在学数学建模理论课,他需要对一道非线性规划题目建立数学模型。然后我是学matlab编程课的嘛,自然想用matlab解决,于是便有了一下的一系列事情...
大家可以先看下这个例题:
这是我憨憨舍友建的模型
如果这么建模,相信大家会发现,0-1变量乘上一个非0-1变量,非~常~难~解
因此,我对模型进行了优化:
我和我憨憨舍友的模型有两个不一样的地方:1.他B地的销量那边应该是一定要满足,他看错了估计。2.就是0-1变量乘在了不同位置,导致解题难度的变化。我这边乘在了不等式右边,这样可以在编程运算的时候统一化到左边,这样便于构成系数矩阵A
接下来附上我编的代码(有点小得意)
f=[175 300 375 500 8 4 3 5 2 3 4 3 4 9 7 5 10 4 2];
intcon=1:19;
A=[zeros(1,4),1 1 1,zeros(1,3),zeros(1,3),zeros(1,3),zeros(1,3);
-10,zeros(1,3),zeros(1,3),1 1 1,zeros(1,3),zeros(1,3),zeros(1,3);
0,-20,zeros(1,2),zeros(1,3),zeros(1,3),1 1 1,zeros(1,3),zeros(1,3);
0,0,-30,0,zeros(1,3),zeros(1,3),zeros(1,3),1 1 1,zeros(1,3);
0,0,0,-40,zeros(1,3),zeros(1,3),zeros(1,3),zeros(1,3),1 1 1];
b=[30 0 0 0 0]';
Aeq=[zeros(1,4),1,zeros(1,2),1,zeros(1,2),1,zeros(1,2),1,zeros(1,2),1,zeros(1,2);
zeros(1,4),0,1,zeros(1,2),1,zeros(1,2),1,zeros(1,2),1,zeros(1,2),1,0;
zeros(1,4),zeros(1,2),1,zeros(1,2),1,zeros(1,2),1,zeros(1,2),1,zeros(1,2),1];
beq=[30 20 20]';
lb=[zeros(1,19)];
ub=[1 1 1 1 inf inf inf,inf inf inf,inf inf inf,inf inf inf ,inf inf inf];
[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
最终结果如图:
我当时还尝试用非线性规划的常用方法解,好像解出来结果有点问题,这里就不推荐大家使用啦。
第一次写文章,以后会继续更新我的matlab学习日常,希望能帮到努力学习的你们!