使用MILP求解器为多个变量值解决MILP问题

时间:2014-10-13 08:41:20

标签: linear-programming lpsolve

我正在使用lp_solve ...我想用各种约束来解决这个MILP

min: Y;

// subject to, constraints are

x1 + z1h1 + (1 - z1)w1 <= x2 + m(x12 + y12);
x1 - z2h2 - (1 - z2)w2 >=x2 - m(1 - x12 + y12);
y1 + z1w1 + (1 - z1)h1 <= y2 + m(1 + x12 - y12);
y1 - z2w2 - (1 - z2)h2 >= y2 - m(2 - x12 - y12);
x1 + z1h1 + (1 - z1)w1 <= x3 + m(x13 + y13);
x1 - z3h3 - (1 - z3)w3 >= x3 - m(1 - x13 + y13);
y1 + z1w1 + (1 - z1)h1 <= y3 + m(1 + x13 - y13);
y1 - z3w3 - (1 - z3)h3 >= y3 - m(2 - x13 - y13);
x1 + z1h1 + (1 - z1)w1 <= x4 + m(x14 + y14);
x1 - z4h4 - (1 - z4)w4 >= x4 - m(1 - x14 + y14);
y1 + z1w1 + (1 - z1)h1 <= y4 + m(1 + x14 - y14);
y1 - z4w4 - (1 - z4)h4 >= y4 - m(2 - x14 - y14);
x2 + z2h2 + (1 - z2)w2 <= x3 + m(x23 + y23);
x2 - z3h3 - (1 - z3)w3 >= x3 - m(1 - x23 + y23);
y2 + z2w2 + (1 - z2)h2 <= y3 + m(1 + x23 - y23);
y2 - z3w3 - (1 - z3)h3 >= y3 - m(2 - x23 - y23);
x2 + z2h2 + (1 - z2)w2 <= x4 + m(x24 + y24);
x2 - z4h4 - (1 - z4)w4 >= x4 - m(1 - x24 + y24);
y2 + z2w2 + (1 - z2)h2 <= y4 + m(1 + x24 - y24);
y2 - z4w4 - (1 - z4)h4 >= y4 - m(2 - x24 - y24);
x3 + z3h3 + (1 - z3)w3 <= x4 + m(x34 + y34);
x3 - z4h4 - (1 - z4)w4 >= x4 - m(1 - x34 + y34);
y3 + z3w3 + (1 - z3)h3 <= y4 + m(1 + x34 - y34);
y3 - z4w4 - (1 - z4)h4 >= y4 - m(2 - x34 - y34);

/* variable type constraints */
x1 >= 0;
x2 >= 0;
x3 >= 0;
x4 >= 0;
y1 >= 0;
y2 >= 0;
y3 >= 0;
y4 >= 0;




x1 + (1-z1)w1 + h1 z1 <= Y;
x2 + (1-z2)w2 + h2 z2 <= Y;
x3 + (1-z3)w3 + h3 z3 <= Y;
x4 + (1-z4)h4 + h4 z4 <= Y;



y1 + (1-z1)h1 + w1z1 <= Y;
y2 + (1-z2)h2 + w2 z2 <= Y;
y3 + (1-z3)h3 + w3 z3 <= Y;
y4 + (1-z4)h4+ w4z4 <= Y;

bin x12, x13, x14, x23, x24, x34;
bin y12, y13, y14, y23, y24, y34;
bin z1, z2, z3, z4;

但是我需要为w1,h1,w2,h2,w3,h3,w4和h4,m的不同值解决这个问题。

是否可以通过lp_solve解决?或通过任何其他lpsolver

我将在解决之前每次手动输入这些值

说我可以得到w1 = 3,w2 = 4,w3 = 5,w4 = 8,h1 = 8,h2 = 8,h3 = 6,h4 = 7,m = 23

的解决方案

在后面的例子中,我只需要更改值。我不想每次为每个值更改约束的值。我需要该程序将采用w_i和h_i&amp; m的这些值,这个lp每次都可以用这个固定的约束来解决

1 个答案:

答案 0 :(得分:0)

lpsolve (以及任何通用求解器)就预期规范形式存在问题,即作为一组系数。它并不关心你可能有什么额外的逻辑。

因此,分别计算每种情况下的具体系数,并将它们作为单独的任务提供。你可以,例如使用所有案例(lprec,最后一个约束)的公共数据填充Y,然后使用lp_copy为每个案例克隆它,并添加案例特定数据。