所以,这是我想要解决的问题的背景:
我想将成本单位划分为两个或更多公司。现在,我已经解决了两家具有以下目标功能的公司:
20*x1 + 30*x2 + 100*x3 + 20*x4 + 30*x5
变量为二进制类型。
假设我得到了优化的解决方案:
x1 = 1
x2 = 0
x3 = 0
x4 = 1
x5 = 0
这意味着A公司将负责单位成本x1和x4以及B公司的剩余成本。
这个工作正常,我已经正确编码了纸浆。我也可以使用约束来限制特定公司的最高成本,这是所有这一切的开始。系数的总和代表给定项目的总成本。因此,我使用该金额作为目标函数的约束来限制公司A的成本
现在,我想做的事情与3家或更多公司的做法相同。我不知道如何制定目标函数或函数,因为我认为它可能属于多目标函数问题,但我实际上并不确定。
我在线性规划方面不是很有经验,所以如果我错放了这个问题,我很抱歉。我还没有找到任何可以帮助我实现这一目标的东西。
我会把代码放进去,但是在创建函数之前我有更多的变量和一些基本的数据准备,所以我创建了一个假设的例子来让它更容易理解。
非常感谢您的帮助。
答案 0 :(得分:2)
您可以按如下方式定义二进制变量:
x_{i,j} = 1 if Company i is responsible for Unit Cost j
并为每个单位成本j添加一个约束,告知一个公司必须对该成本负责 请考虑以下示例。
# data
companies = ["company1", "company2", ...]
products = ["prod1", "prod2", ...]
cost = {"prod1": cost1, "prod2": cost2, ...}
x = pulp.LpVariable.dicts("responsability",[(company, product) for company in companies for product in products], cat=pulp.LpBinary)
prob = pulp.LpProblem("ilp", pulp.LpMinimize)
# objective function - assuming the cost is the same for all the companies
prob += pulp.LpSum(cost[product] * sum(x[(company, product)] for company in companies) for product in products)
# each product assigned to one company
for product in products:
prob+= pulp.LpSum(x[(company, product)] for company in companies) == 1
# additional constraints
...