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

posted @ 2018-01-12 11:17  shizhenqiang  阅读(12114)  评论(1编辑  收藏  举报