У меня есть такая таблица (называемая 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