问题描述
努力为以下 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 (将#修改为@)