2017-07-25 21 views
1

以下は実行しようとしている最適化コードの一部です。特定の範囲のPyomo制約

>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') 

私は私はバスの引き揚げ数R [K、I、T]私は以下のことを試してみました0 =、= 4 <バスの年齢のために、と言う制約を記述しようとしています。それは動作していないようです。

>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 

誰でも手伝ってもらえますか?おかげ

+0

私はプロモーションに取り組んでいる人を見てうれしいです。私は同様の利益を持ち、同様の問題に取り組んでいます。私にプライベートメッセージを送ってもらえますか?自分のプロフィールページで自分のメールアドレスを見つけることができます – Oz123

答えて

0

あなたはセットのすべての上に制約のインデックスを作成し、望ましくないインデックス

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) 

それとも、あなたが

を作成したサブセットの索引制約を可能性があるため、制約を追加スキップする Constraint.Skipを使用してこれを行うことができます
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)