需要虛擬乙個銷地b4,可以理解為庫存。
from pymprog import
*# 資料
a =(
'a1'
,'a2'
,'a3'
)# 產地
b =(
'b1'
,'b2'
,'b3'
,'b4'
)# 銷地
# (產地,銷地):運價
c =[[6
,2,6
,0],
[4,9
,5,0
],[5
,2,1
,0],
]price =
dict()
for i in a:
for j in b:
price[i, j]
= c[a.index(i)
][b.index(j)
]# 產地:產量
d =[60,
55,51]
produce =
dict()
for i in a:
produce[i]
= d[a.index(i)
]# 銷地:銷量
e =[35,
37,72,
22]sale =
dict()
for i in b:
sale[i]
= e[b.index(i)
]print
("(產地,銷地):運價\n"
, price)
print
("\n產地:產量\n"
, produce)
print
("\n銷地:銷量\n"
, sale)
# 模型及求解
begin(
'transport'
)x = var(
'x', price.keys())
# 調運方案
minimize(
sum(price[i, j]
*x[i, j]
for(i, j)
in price.keys())
,'cost'
)# 總運費最少
for i in produce.keys():
# 產地產量約束
sum(x[i, j]
for j in sale.keys())
== produce[i]
for j in sale.keys():
# 銷地銷量約束
sum(x[i ,j]
for i in produce.keys())
== sale[j]
defreport()
:print
("\n調運方案(最優之一)"
)for
(i, j)
in price.keys():
if x[i, j]
.primal >
0and price[i, j]!=0
:print
("產地:%s -> 銷地:%s 運輸量:%-2d 運價:%2d"
%(i, j,
int(x[i, j]
.primal)
,int
(price[i, j]))
)print
("總費用:%d"
%int
(vobj())
)solve(
)report(
)end(
)
(產地,銷地):運價
產地:產量
銷地:銷量
調運方案(最優之一)
產地:a1 -> 銷地:b2 運輸量:37 運價: 2
產地:a1 -> 銷地:b3 運輸量:1 運價: 6
產地:a2 -> 銷地:b1 運輸量:35 運價: 4
產地:a2 -> 銷地:b3 運輸量:20 運價: 5
產地:a3 -> 銷地:b3 運輸量:51 運價: 1
總費用:371
pymprog庫應用(四)值班問題
from pymprog import 資料 星期 輪班 a 1,0,0,1,1,1,1 1,1,0,0,1,1,1 1,1,1,0,0,1,1 1,1,1,1,0,0,1 1,1,1,1,1,0,0 0,1,1,1,1,1,0 0,0,1,1,1,1,1 需求人數 b 20,16,13,16,19...
DP經典應用(五)硬幣問題
問題描述 題目 有n種硬幣,面值分別為v1,v2,vn,每種都有無限多。給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值和最大值 分析 按照解決動態規劃的前3個步驟我們進行分析 include include include using namespace std co...
ILOG的乙個基本應用 解決運輸問題 轉運問題
一 ilog軟體 二 運輸問題 數學模型 ilog opl程式 citiesa citiesb float capacity float supply citiesa float demand citiesb assert sum o in citiesa supply o sum d in cit...