上章回顾:
https://blog.youkuaiyun.com/qq_51564046/article/details/118568020?spm=1001.2014.3001.5501
在上一篇文章中,我们学习到了线性规划。
接下来,我们来看另一种规划问题,整数规划。在数学规划中的变量限制为整数时,我们称之为整数规划。若线性规划中的模型,变量限制为整数,我们则称之为整数线性规划。
整数规划可以分为两类:
(1)纯(完全)整数规划:变量全限制为整数时
(2)混合整数规划:变量部分限制为整数
(3)0-1型整数规划:变量x仅取值0或1;我们称这样的变量叫01变量,也可称为二进制变量或者01变量。
0-1思维:针对于一个问题是或者否,表示两种状态。在图论中较为常用,两个部分是否有连通。连通为1不通为0。
用0-1思维解决相互排除的约束条件。
2个互相排斥的约束条件。例子:x1=0 或 500<=x1<=800
可以改写为:
m个互相排斥的约束条件:
加入一个变量y保证只有一个约束条件起作用,同时引入一个变量M保证效果
整数线性规划的求解:目前没有方法能有效的求解一切整数规划问题。(tips:不能想做把得到的带有分数小数的解经过舍入得到整数解。可能会导致整数解不是最优解,或者整数解不在可行域)
这里我们可采用matlab中的intlinprog函数求解。
eg:
clear all;
%{
某厂拟用集装箱托运甲乙两种货物,
每箱的体积、重量、可获利润以及托运所受限制见下表。
问每集装箱中两种货物各装多少箱,可使所获利润最大。
货物 体积 重量 利润
甲 5 2 20
乙 4 5 10
托运限制 24 13
/集装箱
%}
f=[-20;-10];
intcon = [1,2];
A=[5,4;2,5];b=[24;13];
lb=zeros(2,1);ub=[inf,inf];
x=intlinprog(f,intcon,A,b,[],[],lb,ub)
intlinprog函数详解:
f:目标函数的系数矩阵。(这里是求最小值。如要求最大值,所有系数*-1即可)
intcon:整数所在位置。(注意这个是m,从1开始)如:[1,2]
A:不等式约束条件的系数矩阵
b:不等式约束条件值
Aeq:等式约束条件的系数矩阵
Beq:等式约束条件值
lb:变量约束的下界
ub:变量约束的上限
intlinprog(f,intcon,A,b,Aeq,Beq,lb,ub)(其中如果没有就用空矩阵表示)
如果是01型的整数规划问题,上限变为1即可。