pymprog庫應用(五)運輸問題

2021-09-01 23:23:44 字數 2093 閱讀 4685

需要虛擬乙個銷地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...