Здесь у нас есть базовая таблица, где A — столбец «Предложение», B — линия спроса, а матрица содержит тарифы на транспортировку. .
< th>A(Sp)\B(Dm)
6
15
7
8
8
17
10
8
5< /td>
9
16
8
4
3
4
11
12
10
5< /td>
10
29
7
6
9
9
2
4
1
3
Я нашел решение и код работает правильно, потому что я решал задачу разными способами и ответы всегда были одинаковыми . В скобках указан объем для перевозки. Например, в элементе (1, 2) нам нужно перевезти 10 тонн по цене 8 долларов США за тонну = всего 80 долларов США. Самая низкая общая стоимость перевозки составляет 210 и не может быть ниже.
A \ B
6
15
7
8
8
17
10
(10)\ 8
(7)\5
9
16
8
(3)\4
( 5)\3
4
11
12
10
(3)\5
1029
7
(7)\6
9
9
2
4
(8)\1
(1)\3
Однако в моей задаче есть ограничение. Для перевозки мне нужен 6-тонный грузовик. Например, в найденном решении в элементе (1, 2) мне нужно доставить 10 тонн по цене 8 долларов за тонну. В общей сложности это означает 80 долларов США, но с учетом моих ограничений это означает, что мне нужно забронировать 2 грузовика и заплатить 120 долларов США.
Благодаря помощи сообщества я получил решение, и оно работает правильно.
Благодаря помощи сообщества я получил решение, и оно работает правильно.
Благодаря помощи сообщества я получил решение, и оно работает правильно.
Благодаря помощи сообщества я получил решение.
p>
Код: Выделить всё
import pandas as pd
import pulp
truck_capacity = 6
suppliers = pd.RangeIndex(name='supplier', stop=4)
consumers = pd.RangeIndex(name='consumer', stop=5)
supply = pd.Series(
name='supply',
index=suppliers,
data=(17, 8, 10, 9),
)
demand = pd.Series(
name='demand',
index=consumers,
data=(6, 15, 7, 8, 8),
)
price_per_tonne = pd.DataFrame(
index=suppliers, columns=consumers,
data=(
(10, 8, 5, 9, 16),
( 4, 3, 4, 11, 12),
( 5, 10, 29, 7, 6),
( 9, 2, 4, 1, 3),
),
).stack()
price_per_tonne.name = 'price'
flow = pd.DataFrame(
index=suppliers, columns=consumers,
data=pulp.LpVariable.matrix(
name='flow_s%d_c%d', cat=pulp.LpContinuous, lowBound=0,
indices=(suppliers, consumers),
),
).stack()
flow.name = 'flow'
trucks = pd.DataFrame(
index=suppliers, columns=consumers,
data=pulp.LpVariable.matrix(
name='trucks_s%d_c%d', cat=pulp.LpInteger, lowBound=0,
indices=(suppliers, consumers),
)
).stack()
trucks.name = 'trucks'
price = truck_capacity * pulp.lpDot(price_per_tonne, trucks)
prob = pulp.LpProblem(name='transportation', sense=pulp.LpMinimize)
prob.setObjective(price)
# The flow must not exceed the supply
for supplier, group in flow.groupby('supplier'):
prob.addConstraint(
name=f'flow_supply_s{supplier}',
constraint=pulp.lpSum(group)
Подробнее здесь: [url]https://stackoverflow.com/questions/78300511/transportation-problem-mathematical-optimization[/url]