Python Pulp: создать ограничение для группы переменныхPython

Программы на Python
Anonymous
Python Pulp: создать ограничение для группы переменных

Сообщение Anonymous »

У меня есть такая таблица (называемая base):



Маршрут
Этап1
Этап2
Автобус
Спрос
Цена

< /thead>


A-B
A-B
-< /td>
Шина1
10
20


A-B
A-B
-
Шина2
10
30


A-B-C< /td>
A-B
BC
Шина1
20
60


A-B-C
A-B
BC
Шина2
30
100


A-B-D
A-B
B-D
Автобус1
20
50

< tr>
A-B-D
A-B
B-D
Шина2
30
40



Мне нужно запустить оптимизацию, в которой я должен максимизировать доход (пассажир * цена) с двумя ограничениями. Во-первых, количество пассажиров в каждом «Маршруте» должно быть меньше, чем «Спрос» — я знаю, как это реализовать. Второй: количество пассажиров на каждой ноге должно быть меньше вместимости ног. Вместимость ног представлена ​​во вспомогательной таблице следующим образом:



Нога
Емкость ноги


< tbody>

A-B
40


BC
50


BD60



Итак, мой ожидаемый результат будет:



Маршрут
Этап 1
Этап 2
Автобус
< th>Спрос
Цена
Пассажиры




A-B
A-B
-
Автобус1
10
20



A-B
A-B
-
< td>Шина2
10
30



A-B-C
A-B
BC
Автобус1
20
60
10

A-B-C
A-B
B-C
Шина2
30
100
30


A-B-D
A-B
B-D
Шина1< /td>
20
50



A-B-D
A-B
B-D
Шина2
30
40




Количество пассажиров меньше требуемого и находится в пределах пропускной способности (в этом конкретном примере все маршруты включают этап A-B, что неверно в моих реальных данных - иметь сотни комбинаций ног).
Как я могу это реализовать?
Мой код на данный момент (только с ограничением спроса) ):
prob = lp.LpProblem("testproblem", lp.LpMaximize)

xs = [lp.LpVariable('{}'.format(i+1), lowBound = 0, upBound = base.loc[i,'Capacity']) for i in range(len(base))]

prob += lp.lpSum(x * bv for x,bv in zip(xs, base["Price"]))

prob.solve()


Подробнее здесь: https://stackoverflow.com/questions/787 ... -variables

Вернуться в «Python»