【问题标题】:Pyomo constraints for specific range特定范围的 Pyomo 约束
【发布时间】:2017-12-31 22:03:31
【问题描述】:

以下是我尝试运行的优化代码的一部分。

from pyomo.environ import *
model = ConcreteModel()

## Define sets 
model.k = Set(initialize=['Diesel','Diesel_hybrid', 'Battery_electric'], doc='Vehicle Type')
model.i = Set(initialize=[0,1,2,3,4,5], doc='Age')
model.t = Set(initialize=[2018,2019,2020,2021,2022,2023], doc='Years')

## Define variables 
model.P = Var(model.k, model.t, bounds=(0,None), doc='number of k type vehicle purchased in year t')
model.A = Var(model.k, model.i, model.t, bounds=(0,None), doc='number of k type i year old bus in use at the end of year t')
model.R = Var(model.k, model.i, model.t, bounds=(0,20), doc='number of k type i year old bus salvaged at year t')

我正在尝试编写一个约束条件,即对于巴士 i

def constraint_5(model,k,t):
    if (i<=4):
        return model.R[k,i,t] == 0

我也尝试过定义一个子集。这也行不通。

model.sal = Set(initialize=[0,1,2,3,4], doc='Minimum age in usage')
def constraint_5(model,k,t):
    for i in model.w:
        return model.R[k,i,t] == 0

谁能帮帮我?谢谢

【问题讨论】:

  • 我很高兴看到人们使用促销。我有类似的兴趣,我也致力于解决类似的问题。你介意给我发私信吗?您可以在我的个人资料页面中找到我的电子邮件

标签: python optimization constraints pyomo


【解决方案1】:

您可以通过为所有集合索引您的约束并使用Constraint.Skip 跳过为不需要的索引添加约束来做到这一点

def constraint_5(model,k,i,t):
    if i<=4:
        return model.R[k,i,t] == 0
    return Constraint.Skip
model.con5 = Constraint(model.k,model.i,model.t,rule=constraint_5)

或者你可以索引你创建的子集的约束

def constraint_5(model,k,i,t):
    return model.R[k,i,t] == 0
model.con5 = Constraint(model.k,model.sal,model.t,rule=constraint_5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2018-05-29
    • 2021-09-12
    • 2018-07-22
    • 2017-08-24
    相关资源
    最近更新 更多