2014-10-13 2 views
0

Я использую lp_solve ... Я хочу, чтобы решить этот MILP с различными ограничениямирешить MILP с 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 & м, это LP может быть решен каждый раз, когда с этим фиксированных ограничениями

+0

Являются ли «разные значения» для 'w_i' /' h_i'/'m' всего несколькими наборами констант? Или эти переменные сами по себе? В первом случае это всего лишь несколько проблем вместо одного; в последнем, это не LP. –

+0

sorry.yes для разных значений w_i/h_i/m –

+0

Uhm, LPsolve имеет около [15 API] (http://lpsolve.sourceforge.net/5.5/). откуда вы звоните lpsolve? Из IDE? AFAIK вы не можете сделать это из среды IDE. Вы можете написать сценарий для загрузки 'w_i/h_i/m' и выполнить LPsolve в цикле. – Ioannis

ответ

0

lpsolve (и любой общее назначение решатель, по этому вопросу) ожидают, что проблема в каноническом формы, т. е. как набор коэффициентов. Не важно, какую дополнительную логику вы можете иметь.

Итак, вычислите конкретные коэффициенты, которые вы будете иметь в каждом случае отдельно, и укажите их как отдельные задачи. Вы можете, например, заполнить lprec с данными, общими для всех случаев (Y, последними ограничениями), затем клонировать его для каждого случая с помощью lp_copy и добавлять данные, зависящие от конкретного случая.

 Смежные вопросы

  • Нет связанных вопросов^_^