用Python和PuLP进行线性规划
url = http://benalexkeen.com/linear-programming-with-python-and-pulp-part-3/
最简单的线性规划实例:资源分配问题
我们现在是一家汽车厂商的顾问。
这家公司一个生产周期是一个月(30天),我们可以做一个周期的实验来体现我们顾问的价值。
这家公司有一个机器人,两个工程师和一名销售(作为汽车所需资源)。销售有假期(工程师没假期?),只有21天上班。
两种汽车对三种资源的需求如下:
需要机器人工作时间:汽车A- 3天;汽车B - 4天。
需要工程师工作时间:汽车- 5天;汽车B - 6天。
需要销售工作时间:汽车- 1.5天;汽车B - 3天。
汽车提供了€30000的利润,而汽车B提供€45000的利润。
他们目前每月两种汽车各生产4台,为€300000的利润。效益还行,不过我们应该可以做得更好。
我们可以做如下分析:
这里我们需要将利润最大化:
利润= 30000A + 45000B
受限于如下条件:
A≥0
B≥0
3 A+ 4 B≤30
5 A+ 6 B≤60
1.5 A+ 3 B≤21
In[1]:
Import pulp
In[2]:
#实例化我们的问题
model = pulp.LpProblem("Profit maximising problem", pulp.LpMaximize)
在这个问题中,我们的决策变量是不连续的整数(不能卖半辆车)。
In[3]:
A = pulp.LpVariable('A', lowBound=0, cat='Integer')
B = pulp.LpVariable('B', lowBound=0, cat='Integer')
In[4]:
#目标函数
model += 30000 * A + 45000 * B, “profit”
#约束
model += 3 * A + 4 * B <= 30
model += 5 * A + 6 * B <= 60
model += 1.5 * A + 3 * B <= 21
In[5]:
#解决我们的问题
model.solve()
pulp.LpStatus[model.status]
Out[5]:
'Optimal'
In[6]:
#打印我们的决策变量值
print("Production of Car A = {}".format(A.varValue))
print("Production of Car B = {}".format(B.varValue))
Production of Car A = 2.0
Production of Car B = 6.0
In[7]:
#打印我们的目标函数值
print(pulp.value(model.objective))
330000.0
这样就可以得到€330000的月利润,而原来的月利润只有€300000。
通过将产量定为2辆A车,4辆B车,我们为这个工厂每个月增加了30000€的效益。
原文中用的是Python2,这里用的是Python3,因为现在最新的IPython6.0都不支持python2了