pulp http://pythonhosted.org/PuLP/main/basic_python_coding.html
供水問題
1問題
供水公司有三個水庫分別為A,B,C向四個小區甲乙丙丁供水,A和B向所有小區供水,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
