我是Pyomo的新手,而Python是新手。我正在尝试编写一个模型,该模型包括带有嵌套和的目标函数。这是一个玩具示例,希望该问题也与其他人相关:
我有一组客户C和一组服务器S。我按分钟租用服务器,并且我有一套Pyomo成本,代表每分钟租用每台服务器的成本(有些比其他服务器贵一些)。此Set的长度等于服务器的数量。我还有一套二维Pyomo服务时间,代表服务每个客户所需的时间。这取决于服务器和客户,因此两者均对其进行索引。
总成本是服务器成本的总和,由服务器索引,乘以服务时间总和,由服务器和客户均索引。
我不知道如何在Pyomo中表示这一点,因为我要建立索引的集合是不同的。此链接:Pyomo sum inside sum with various index似乎是一个类似的问题,但没有帮助。请记住,所有这些都必须存在于Pyomo Objective
函数中。
[我尝试使用Pyomo的sum_product
函数并对两个(index = model.customers * model.servers
)的笛卡尔乘积建立索引,但这不起作用,因为服务器无法对客户进行索引。
[我也尝试过嵌套和(sum_product(server costs, sum_product(service times, index = model.customers * model.servers), index = servers)
),但这不起作用,因为内部的sum_product
变成了服务器无法下标的LinearExpression对象。
如何正确表达这笔款项?非常感谢。
我很确定您的目标函数看起来像这样(假设您的模型中有一个二进制变量x
,指示是否将Server分配给了客户c):
def cost_(model):
return sum(model.Scostperminute[s]*model.servicetime[s,c]*model.x[s,c] for s in model.S for c in model.C)
model.cost = Objective(rule=cost_)