python 之pulp 線性規划介紹及舉例


pulp http://pythonhosted.org/PuLP/main/basic_python_coding.html

供水問題

1問題

供水公司三個水庫分別為A,B,C向四個小區甲乙丙丁供水,AB向所有小區供水,C僅向甲乙丙供水,水庫最大供水量(千噸

 

水庫

A

B

C

最大供水量(千噸)

50

60

50

 

小區用水情況為

小區

基本用水量(千噸)

30

70

10

10

額外用水量(千噸)

50

70

20

40

 

水庫供水收入900/千噸支出費用為:其他費用450/千噸,引水管理費:

由水庫到小區引水費用:

元/千噸

A

160

130

220

170

B

140

130

190

150

C

190

200

230

 

 

如何分配水庫供水量,公司才能獲利最多。

2 解題思路

使引水管理費最小,則利潤最高

水庫i向小區j的供水量為,引水管理費為Z

目標函數為:z = 160.0*x11 + 130.0*x12 + 220.0*x13 + 170.0*x14 + 140.0*x21 + 130.0*x22 + 190.0*x23 + 150.0*x24 + 190.0*x31 + 200.0*x32 + 230.0*x33

求的值,使Z最小。

約束條件為:

 

 

 

 

 

 1 # coding=utf-8
 2 
 3 from pulp import *
 4 
 5 
 6 def get_re():
 7     pass
 8 
 9 
10 def getresult(c, con):
11 
12 # 設置對象
13     prob = LpProblem('myPro', LpMinimize)
14 # 設置三個變量,並設置變量最小取值
15 
16     x11 = LpVariable("x11", lowBound=0)
17     x12 = LpVariable("x12", lowBound=0)
18     x13 = LpVariable("x13", lowBound=0)
19     x14 = LpVariable("x14", lowBound=0)
20     x21 = LpVariable("x21", lowBound=0)
21     x22 = LpVariable("x22", lowBound=0)
22     x23 = LpVariable("x23", lowBound=0)
23     x24 = LpVariable("x24", lowBound=0)
24     x31 = LpVariable("x31", lowBound=0)
25     x32 = LpVariable("x32", lowBound=0)
26     x33 = LpVariable("x33", lowBound=0)
27 
28     X = [x11, x12, x13, x14, x21, x22, x23, x24, x31, x32, x33]
29 
30     #c = [160, 130, 220, 170, 140, 130, 190, 150, 190, 200, 230]
31 
32 
33 
34 
35 
36 
37 # 目標函數
38     z = 0
39     for i in range(len(X)):
40         z += X[i]*c[i]
41     #print(z)
42     prob += z
43 
44 # 載入約束變量
45     prob += x11+x12+x13+x14 == con[0]# 約束條件1
46     prob += x21+x22+x23+x24 == con[1]
47     prob += x31+x32+x33 == con[2]
48 
49     prob += x11+x21+x31 <= con[3]
50     prob += x11+x21+x31 >= con[4]
51 
52     prob += x12 + x22 + x32 <= con[5]
53     prob += x12 + x22 + x32 >= con[6]
54 
55     prob += x13 + x23 + x33 <= con[7]
56     prob += x13 + x23 + x33 >= con[8]
57     prob += x14 + x24 <= con[9]
58     prob += x14 + x24 >= con[10]
59 
60 # 求解
61 
62     status = prob.solve()
63 
64     print(status)
65     print(LpStatus[status])
66     print(value(prob.objective))  # 計算結果
67 
68 
69 # 顯示結果
70 #     for i in prob.variables():
71 #         print(i.name + "=" + str(i.varValue))
72     for i in prob.variables():
73         print(i.varValue)
74 
75 
76 if __name__ == '__main__':
77     c = [160, 130, 220, 170, 140, 130, 190, 150, 190, 200, 230]
78     con = [50, 60, 50, 80, 30, 140, 70, 30,10, 50, 10]
79     getresult(mubiao, yueshu)

 

 
         
 
         
 
        

輸出結果:

1
Optimal
24400.0
0.0
50.0
0.0
0.0
0.0
50.0
0.0
10.0
40.0
0.0
10.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM