x1,x2...x8怎样都是整数?想尝试用round限制一下,不过不对,求大神。程序如下
syms x
x=round(x(1:8));
A=[12 0 10 0 0 0 0 0
-12 0 10 0 0 0 0 0
18 0 10 8 0 0 0 0
-18 0 -10 -8 0 0 0 0
0 12 0 0 10 0 0 0
0 -12 0 0 -10 0 0 0
0 18 0 0 10 8 0 0
0 -18 0 0 -10 -8 0 0
0 6 0 0 10 8 8 0
0 -6 0 0 -10 -8 -8 0
18 18 10 8 -10 8 8 8
-18 -18 -10 -8 10 -8 -8 -8
1 1 -0.2 -0.2 -0.2 -0.2 -0.2 -0.2];
B=[47;-37;88;-80;31;-21;81;73;131;-123;252;-244;0];
c=ones(1,8);
[x,y]=linprog(c,A,B,[],[],zeros(8,1))
你用round肯定不可能限制这些变量为整数的。
对于混合整数线性规划问题(MILP),2014a引入了一个函数intlinprog可用于求解。
另外,可以用遗传算法求解混合整数非线性规划问题(当然,用于线性规划也可以)
ga(@(x)c*x(:),8,A,B,[],[],zeros(1,8),[],[],1:8)但是,用两种方法得到的结果都是无法找到可行解(也就是,无法满足所有的约束条件,与目标函数无关),请题主还是检查一下问题自身是否有误。
为验证上述结果的正确性,我把模型转为Lingo格式,用Lingo求解:
max=x1;其中目标函数是随便写的,因为现在主要是要验证约束条件存在冲突,导致找不到可行解,与目标函数无关。验证的结果同样是找不到可行解(81. NO FEASIBLE SOLUTION FOUND)。
对于这种情况,Lingo提供了Debug功能,可以帮助用户找出导致不可行的最小约束集合,得到的结果如下:
Constraints and bounds that cause an infeasibility:也就是说,去掉第一个或第二个约束都可以解决可行解的问题,或者去掉x3>=0的变量限制也可以(我试了一下,好像这个不起作用?)。总之还是请题主好好check一下题目的条件。