首先推荐一篇不错的博客点击打开链接
有关线性规划和非线性规划的实数解解法在前一篇文章有过详细的介绍点击打开链接
而现在引入的是整数规划问题,这里整数指的就是解向量有一个或多个要为整数,实际问题中无法切割的物品,比如人,电脑,手机,都是属于这类范畴~~
这里提供一个比较新的、专用于求解整数规划和0-1整数规划的函数——intlinprog
[x,fval,exitflag]= intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
这里intcon是哪些解要求为整数解
A,b就还是AX<b的向量
Aeq和beq是Aeq*x=beq的向量
lb是下限
bu是上限
比如
>> f=[-1,-1];
>> a=[1,2];
>> b=[-4 2;4 2;0 -2];
>> c=[-1;11;-1];
>> [x,fval]=intlinprog(f,a,b,c,[],[],zeros(2,1),[])
结果
x =
2
1
fval =
-3
如果是0 -1规划呢,也就是说解只能取0和1,那么我们上下限分别为0和1的向量即可.
>> f=[7,5,9,6,3];
>> a=[56 20 54 42 15;1 4 1 0 0;-1 -2 0 -1 -2];
>> b=[100;4;-2];
>> c=[1,2,3,4,5];%表示1,2,3,4,5都是整数解
>> [x,fval]=intlinprog(f,c,a,b,[],[],zeros(5,1),ones(5,1))%zeros就是代表5个数下界为0,ones表示5个数上界为1
结果:
x =
0
0
0
0
1
fval =
3
比如《matlab在数学建模中的应用》这本书中例2-11是用的暴力穷举,我们用intlinprog试一下
题目:
maxz=3x1-2x2+5x3
x1+2x2-x3<=2
x1+4x2+x3<=4
x1+x2<=3
4x2+x3<=