【发布时间】:2021-01-12 13:07:08
【问题描述】:
努力在 PuLP 中为以下 MIP 场景制定目标函数。
每个城市都有 N 人居住。
各厂址 可以方便一组城市。
尽量减少工厂数量 打开,这样促成的人数>= 4000
我的主要问题是不同的工厂可以为同一个城市提供服务。因此,将每个工厂的可服务人口总数相加并单独考虑是不公平的。
cities = ['London', 'Paris', 'Berlin', 'Amsterdam', 'Vienna', 'Prague']
factories = ['A', 'B', 'C', 'D']
city_populations = {'London': 898, 'Paris': 222, 'Berlin': 767, 'Amsterdam': 111, 'Vienna': 854, 'Prague': 908}
factories_service = {'A': ['London', 'Prague'], 'B': ['London', 'Paris', 'Vienna'], 'C': ['Amsterdam', 'Vienna', 'Prague'], 'D': ['London', 'Vienna', 'Prague']}
这是我目前所拥有的,但它不正确,因为它只选择最大的城市,而不考虑人口重叠。
prob = pl.LpProblem("Factory Coverage",pl.LpMinimize)
decision_vars = pl.LpVariable.dicts("Factories", factories, cat='Binary')
prob += pl.lpSum(decision_vars)
prob += pl.lpSum([sum([city_populations[x] for x in factories_service[i]])*decision_vars[i] for i in factories]) >= 4000
prob.solve()
输出:
工厂_A, 0.0
工厂_B, 1.0
工厂_C, 0.0
工厂_D,1.0
【问题讨论】:
标签: python python-3.x mathematical-optimization pulp mixed-integer-programming