2016-12-01 7 views
1

ありがとうございました!私はpyomoには新しく、今ではそれを使って具体的なモデルを解決しようとしています。ここPyomo "data = None"出力エラー

は、私のコードの一部である:

---(編集)

def objective_rule(model): 
     ans = sum(model.DAEB[t] * model.DAEP[t] for t in model.t) 
     ans -= sum(model.DARUP[t] * model.RU[t] + model.DARDP[t] * model.RD[t] for t in model.t) 
     ans += sum(0.5 * (sum(model.penalty[t, w]) + sum(-model.RTEP[t] * (model.DAEB[t] - ((model.RTRD[t, w] * model.RU[t]) + 
       sum(model.veh_pwer_dem[t, v, w] for v in model.v))))) for t in model.t for w in model.w) 
     ans += 0.95 * (model.epslon + 1/(0.5) * sum(0.01 * model.miu[w] for w in model.w)) 
     return ans 
  • トンは1日のセット[0:23]、時間の時間として定義されます。
  • wは[0,1]と定義されていますが、異なるシナリオです。
  • vは[0:29]、30種類のサンプルです。

目的関数を定義する前に、上記のモデル変数に関連する束縛を定義しました。

すべてが最後のステップまでを除いてスムーズに実行、pyomoが与える:

を---(編集済み)すべての

Traceback (most recent call last): 
    line 61, in <module> 
    myresult = result.solve(project, pricefile, reg_dispatch, SOC=0, SOC_margin=0.05) 

    line 56, in solve 
    opti_model, result = self.Fr_optimal_bidding_optimization(self.vehicles, pricefile, reg_dispatch, SOC) 

    line 347, in Fr_optimal_bidding_optimization 
    model.objective = Objective(rule=objective_rule, sense=minimize, doc='minimize the total cost') 

    line 483, in __setattr__ 
    self.add_component(name, val) 

    line 849, in add_component 
    val.construct(data) 

    line 307, in construct 
    tmp = _init_rule(_self_parent) 

    line 337, in objective_rule 
    sum(model.veh_pwer_dem[t, v, w] for v in model.v))))) for t in model.t for w in model.w) 

ERROR: Rule failed when generating expression for objective objective: 
    line 337, in <genexpr> 
    TypeError: '_GeneralVarData' object is not iterable 
    sum(model.veh_pwer_dem[t, v, w] for v in model.v))))) for t in model.t for w in model.w) 

ERROR: Constructing component 'objective' from data=None failed: 
TypeError: '_GeneralVarData' object is not iterable 
    TypeError: '_GeneralVarData' object is not iterable 

まず、私は_GeneralVarDataオブジェクトについては本当に混乱していますし、知りませんそれが何を指しているのか、そして二番目に、私の目的関数の問題は見えないので、どんな人でもアドバイスを提供できれば大いに感謝します!

(!私は「stackoverflowの、」私の質問が明記されていない場合は、フロントに謝罪にも新しいです)

テン

+0

まず、式のどの部分がこのエラーの原因になるかを特定できるようになるまで、式の一部をコメントアウトすることをお勧めします。このような大きな表現を見て、問題を選ぶのは難しいです。 –

+0

こんにちはガベッ!アドバイスをいただきありがとうございます。私は自分の投稿を再編集しました。 –

+0

編集した投稿でも、このエラーが表示される理由は不明です。私は、関連する変数の定義を見る必要があると思います。 –

答えて

2

例外は最後の行に2番目に次のコードによってトリガーされます。

sum(model.veh_pwer_dem[t, v, w]) 

これは、キー(インデックス)を超える反復可能と合計として(スカラー)model.veh_pwer_dem[t, v, w]を治療しようとします。式の論理構造には他にも問題があるようです。私は、表現を細かく分割して、物事を明確にするのに役立つようにすることを強くお勧めします。たとえば、

def objective_rule(model): 
    ans = sum(model.DAEB[t] * model.DAEP[t] for t in model.t) 
    ans -= sum(model.DARUP[t] * model.RU[t] + model.DARDP[t] * model.RD[t] for t in model.t) 
    ans += sum(0.5 * (sum(model.penalty[t, w] for t in model.t for w in model.w) + # ... 
    #... 
    return ans 

については、_GeneralVarDataオブジェクトについてです。 _GeneralVarDataオブジェクトは、インデックス付きのVarコンポーネントの一部である実際の最適化変数を表すために使用される内部Pyomo構造体です(インデックス化されていないVarコンポーネントで使用される内部実装である_SimpleVarを時折参照することがあります)。一般に、Pyomo(および一般的なPython)では、アンダースコア(_)で始まるメソッド、属性、およびクラスは、実装にとって「非公開」です。

+0

こんにちは!あなたのコメントをありがとうございました。私はあなたの方法に従って私の投稿を編集し、私はあなたが正しいと思います。それでも、 "model.veh_pwer_dem [t、v、w]"という問題があることが分かります。 –

+0

あなたの編集された目的のルールは、まだジェネレータを超えていない 'sum()'式に問題があります。例えば、あなたの最初の '+ ='、 'sum(model。ペナルティ[t、w]) 'は合法ではなく、' 'sum(-model.RTEP [t] *#...' 'は' 'for ... in ...' "を持ちません"適切なジェネレータ/リストは、Pythonが合計することができます) – jsiirola

関連する問題