作业帮 > 综合 > 作业

matlab 0 1整数规划编程

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 06:38:15
matlab 0 1整数规划编程
max F(A) = 5A1 + 9A2 + 11A3 + 22A4 + 17A5
+ 24A6 + 23A7 + 11A8 + 5A9 + 18A10
+ 14A11 + 7A12 + 8A13 + 20A14 + 12A15
+ 4A16 + 22A17 + 16A18 + 3A19 + 25A20
约束条件
A1 + A6 + A11 + A16 = 1
A2 + A7 + A12 + A17 = 1
A3 + A8 + A13 + A18 = 1
A4 + A9 + A14 + A19 = 1
A5 + A10 + A15 + A20 = 1
A1 + A2 + A3 + A4 + A5 >= 1
A6 + A7 + A8 + A9 + A10 >= 1
A11 + A12 + A13 + A14 + A15 >= 1
A16 + A17 + A18 + A19 + A20 >= 1
调用了bintprog计算最大值,得到的是
A = [0 0 0 1 0;
1 1 0 0 0;
0 0 0 0 1;
0 0 0 0 1]
没有满足A5 + A10 + A15 + A20 = 1这个条件,结果是A15和A20都为1,
可以肯定是你把某个地方搞错了.
问这种问题时,最好把你的代码贴出来,既能减少回答者重复录入的劳动,也能更快地找出问题出在哪里.
 
我写的代码如下:
f = [5 9 11 22 17 24 23 11 5 18 14 7 8 20 12 4 22 16 3 25];
Ae = repmat(eye(5),1,4);
be = ones(5,1);
A = zeros(4,20);
A(1,1:5) = -1;
A(2,6:10) = -1;
A(3,11:15) = -1;
A(4,16:20) = -1;
b = -ones(4,1);
x = bintprog(f,A,b,Ae,be);
reshape(x,[5 4])'
得到的结果:
Optimization terminated.
ans =
     1     0     0     0     0
     0     0     1     0     0
     0     1     0     0     1
     0     0     0     1     0
再问: 谢谢!发现是reshape出了问题,为什么是x,[5 4]' 不是x,4,5呢?
再答: 之所以按照 [5 4] reshape 然后再转置,是因为MATLAB数组遵循FORTRAN的习惯,即以列序为主序,也就是说,A(2)对应的是A(2,1),而不是A(1,2)。 另外,看结果的差别,似乎不仅仅是reshape的问题吧?