PuLP 整數規劃例子

2021-09-21 17:55:21 字數 2175 閱讀 2185

乙個簡單的整數規劃問題:

m ax

x+y+

2zs.

t.x+

2y+3

z≤4x

+y≥1

x,y,

zbin

ar

y\begin & max & \quad x+y+2z \\ & \\ & s.t. \quad & x+2y+3z \le 4 \\ & \quad & x+y \ge 1 \\ & \quad & x,y,z \quad binary \end

​maxs.

t.​x

+y+2

zx+2

y+3z

≤4x+

y≥1x

,y,z

bina

ry​python**:

# coding=utf-8

from pulp import lpproblem, lpvariable, lpconstraint, lpconstraintle, lpconstraintge, lpmaximize, lpbinary, lpstatus

# create a new model

m = lpproblem(name=

"mip model"

, sense=lpmaximize)

# create variables

x = lpvariable(cat=lpbinary, name=

"x")

y = lpvariable(cat=lpbinary, name=

"y")

z = lpvariable(cat=lpbinary, name=

"z")

# add constraint: x + 2 y + 3 z <= 4

m += lpconstraint(e=

(x +

2* y +

3* z)

, sense=lpconstraintle, rhs=

4, name=

'c0'

)# add constraint: x + y >= 1

m += lpconstraint(e=

(x + y)

, sense=lpconstraintge, rhs=

1, name=

'c1'

)# set objective

m.setobjective(x + y +

2* z)

# calculate with the default cbc optimizer

status = m.solve(

)if lpstatus[status]

=='optimal'

:for v in m.variables():

print

('%s %g'

%(v.name, v.varvalue)

)print

('obj: %g'

% m.objective.value(

))

輸出:

x 1

y 0z 1

obj: 3

其中約束條件和目標函式的寫法可簡寫為:

# add constraint: x + 2 y + 3 z <= 4

m += x +

2* y +

3* z <=4,

'c0'

# add constraint: x + y >= 1

m += x + y >=1,

'c1'

# set objective

m += x + y +

2* z,

'obj'

pulp預設使用cbc優化器,如果想用其它的優化器:

from pulp.solvers import cplex, gurobi

# calculate with cplex or gurobi

m.solve(solver=cplex(

))

如果優化器未安裝,則會報pulp.solvers.pulpsolvererror: pulp: cannot execute cplex.exe錯誤。如何查詢本地已安裝的優化器,請看這篇文章。

動態規劃例子

對於由從1到n 1 n 39 這n個連續的整數組成的集合來說,我們有時可以將集合分成兩個部分和相同的子集合。例如,n 3時,可以將集合 分為和。此時稱有一種方式 即與順序無關 n 7時,共有四種方式可以將集合 分為兩個部分和相同的子集合 和 和 和 和 輸入 程式從標準輸入讀入資料,只有一組測試用例...

動態規劃例子

演算法描述 已知多段圖的鄰接表,利用從後往前遞推的方法,先從最後一層往前保留當前的最短路徑長度,由子結構的最優解得到原問題的最優解。遞推公式是 cost i,j min 這裡為了節約空間,用一維陣列cost來儲存節點j到t的最短路徑長度。將所有節點按0 n 1進行編號,源點s為0,匯點t為n 1 向...

動態規劃經典例子

金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要度,分為5...