gpt4 book ai didi

python - Pyomo 特定范围的约束

转载 作者:行者123 更新时间:2023-12-01 16:16:52 28 4
gpt4 key购买 nike

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

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<=4 的车龄,回收的公交车数量 R[k,i,t] = 0我尝试了以下方法。这似乎不起作用。

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

有人可以帮助我吗?谢谢

最佳答案

您可以通过在所有集合上索引约束并使用 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)

关于python - Pyomo 特定范围的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45312432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com