建模打卡第二天,整数规划问题
2021/11/8 23:43:41
本文主要是介绍建模打卡第二天,整数规划问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
先忽略最后x1,x2为整数的条件,求解x1,x2的值
clc; clear all; c=[40 90]; a=[9 7;7 20]; b=[56 70]; aeq=[]; beq=[]; lb=[0;0]; ub=[inf;inf]; [x,fval]=linprog(-c,a,b,aeq,beq,lb,ub); x best=c*x
求解答案为:
x1,x2=0时,Z=0;可以知道Z的范围是0<=Z<=356,再对x1和x2任意一个进行分支;
B1问题,先对x进行分支,把x1分为两个子集:x1<=[4.8092]=4,x1>[4.8092]+1=5;
川川给我们求了x1在0到4范围内的分支,现在我来求x>=5的分支;
代码如下:
clc; clear all; c=[40 90]; a=[9 7;7 20]; b=[56 70]; aeq=[]; beq=[]; lb=[5;0]; %x1的下限为5,上限为无穷 ub=[inf;inf]; [x,fval]=linprog(-c,a,b,aeq,beq,lb,ub); x best=c*x
运行的结果为:
接下来是对B1问题再进行分支,B1中只有x2是小数,对x2进行分支,x2的两个子集为:
0<=x2<=[2.1]=2;x2>=[2.1]+1=3;
同样的,川川写了0<=x2<=[2.1]的分支,我写x2>=[2.1]+1=3的分支,代码如下:
clc; clear all c=[40 90]; a=[9 7;7 20]; b=[56 70]; aeq=[]; beq=[]; lb=[0;3]; ub=[4;inf]; [x,fval]=linprog(-c,a,b,aeq,beq,lb,ub); x best=c*x
运行结果为:
接下来对B2问题进行分支,B2问题为:
对X2进行分支,0<=x2<=[1.5714]=1,x2>=[1.5714]+1=2;得到的问题B21为:
目标函数:Max z = 40*x1 + 90*x2
约束条件为:
9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5 1>x2>0
计算代码如下
clc; clear all c=[40 90]; a=[9 7;7 20]; b=[56 70]; aeq=[]; beq=[]; lb=[5;0]; ub=[inf;1]; [x,fval]=linprog(-c,a,b,aeq,beq,lb,ub); x best=c*x
运行结果为:
再取x2>=2取分支,代码为:
clc; clear all c=[40 90]; a=[9 7;7 20]; b=[56 70]; aeq=[]; beq=[]; lb=[5;2]; ub=[inf;inf]; [x,fval]=linprog(-c,a,b,aeq,beq,lb,ub); x best=c*x
运行结果为:
运行为无解;
通过分支,所有问题的解分别为:
B1:
B2:
B11:
B12:
B21
B22:
从所有的解里我们可以看到,只有B11符合我们的要求,有小数的,无解的 ,都不可取,这个叫做剪枝,通过这一系列分支剪支,求出最优解,最后总结:
将要求的整数规划问题设为A,相应的线性规划问题为B,其中:
1、若 B没有可行解,A也没有可行解,则停止,即该整数规划无解。
2、若B有最优解,且符合A的整数条件,则B的最优解即为A的最优解。
3、若B有最优解,但不符合A的整数条件,通过分枝,剪支,求出最优解。
最后,还是感谢川川带大家学习,在这段时间就坚持下去好好学,以上也是我自己的理解,有很多不足的地方还需改进。
这篇关于建模打卡第二天,整数规划问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南