【问题标题】:Finding the optimal binary matrix via integer programming in MATLAB在 MATLAB 中通过整数规划找到最佳二进制矩阵
【发布时间】:2017-10-11 19:58:30
【问题描述】:

我尝试在 optimal binary matrix 中使用 Matlab 函数 intlinprog 对测试输入实施解决方案,如下代码所示

a=[450;400;250;200]; % test input
b=[750;500]; % test input
n = 4; % length of a
m = 2; % length of b
oness=ones(m,1);
f = (kron(a,oness))'; % objective function
cont1=kron(eye(n),oness'); 
cont2=-cont1;
cont3=-kron(a',eye(m));
A=[cont1;cont2;cont3];
bb=[ones(n,1);-zeros(n,1);-b];
lb = zeros(m*n,1);
ub = [ones(m*n,1)]; % enforces binary
intcon= [1,2,3,4,5,6,7,8]; % all variable should be integers  
 Aeq = [];
 beq = [];
x = intlinprog(f,intcon,A,bb,Aeq,beq,lb,ub)

但是,我收到了消息

Intlinprog 停止,因为没有整数点满足约束。

此测试输入的明显最佳解决方案是x = [0;1;1;0;1;0;0;0]

但是,如果我通过intcon=[] 删除完整性约束,我会得到一个最佳解决方案。为什么函数找不到积分约束的最小解?

【问题讨论】:

  • 尝试随机生成测试输入。您可能选择了对应的多面体不包含任何整数点的测试输入。
  • 我现在修复的问题定义中有一个错误。代码现在可以正确输出。我发布新代码作为答案。非常感谢@RodrigodeAzevedo 的真诚支持。

标签: matlab mathematical-optimization linear-programming integer-programming


【解决方案1】:

我现在修复的问题定义中有一个错误。代码现在可以正确输出。下面是正确的代码:

a=[450;400;250;200]; % test input
b=[750;500]; % test input
n = 4;
m = 2;
oness=ones(m,1);
f = -(kron(a,oness))';
cont1=kron(eye(n),oness');
cont2=-cont1;
cont3=kron(a',eye(m));
A=[cont1;cont2;cont3];
bb=[ones(n,1);-zeros(n,1);b];
lb = zeros(m*n,1);
ub = [ones(m*n,1)]; % enforces binary
intcon= 1:8;
 Aeq = [];
 beq = [];
x = intlinprog(f,intcon,A,bb,Aeq,beq,lb,ub)

答案:

x = [1;0;0;1;1;0;0;0] 给出与

相同的最优结果

x = [0;1;1;0;1;0;0;0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多