PuLP:如何构建这个工厂覆盖问题

问题描述

努力为以下 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','Vienna'],'C': ['Amsterdam','D': ['London','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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)