1

私の問題を調べてくれてありがとう!私はpyomoが初めてで、具体的なモデルを解決するために使用しようとしています。

ここに私のコードの一部があります:

——— (編集)

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
  • t はセット [0:23]、1 日の時間として定義されます。
  • w は [0,1] として定義されています。これはさまざまなシナリオです。
  • v は [0:29]、30 の異なるサンプルです。

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

最後のステップまでを除いて、すべてがスムーズに実行されます。

——— (編集)

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」も初めてです。質問が明確に述べられていない場合は、前もって謝罪してください!)

テン

4

1 に答える 1

2

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

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

これは、(スカラー)model.veh_pwer_dem[t, v, w]を iterable として扱い、そのキー (インデックス) を合計しようとします。あなたの式の論理構造には他にも問題があるようです。物事を明確にするのに役立つ小さなチャンクに表現を分割することを強くお勧めします. 例えば:

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オブジェクトは、インデックス付きコンポーネントの一部である実際の最適化変数を表すために使用される内部 Pyomo 構造体です (インデックス付きでないコンポーネントに使用される内部実装であるVarも時折見られる場合があります)。Pyomo (および一般的な Python) では、原則として、アンダースコア ( ) で始まるメソッド、属性、およびクラスは実装に対して「プライベート」です。_SimpleVarVar_

于 2016-12-02T00:20:30.883 に答える