python 之pulp 线性规划介绍及举例

mac2022-06-30  118

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)

 

输出结果:

1Optimal24400.00.050.00.00.00.050.00.010.040.00.010.0

转载于:https://www.cnblogs.com/shizhenqiang/p/8274806.html

相关资源:Python PuLP 求解“鸡兔同笼”问题
最新回复(0)