0

次のコードを使用して、dymola のライブラリ最適化で ModelOptimization 関数を使用して、変数の「排出量」を最適化 (最小化) しようとしています。

model opt
parameter Real electricity=999;
Real x2(start=0);
Real x1(start=0);
Real usageEle;
Real usagePV;
Real emissions(start=0);
Modelica.Blocks.Sources.TimeTable solarThermal(table = [0,400;3599,400;3600,200;7199,200;7200,400;10799,400;10800,200]);
Modelica.Blocks.Sources.TimeTable heatDemand(table = [0,300;3600,300;7200,300;10800,300]);
equation 
x2*electricity+x1*solarThermal.y=heatDemand.y;
0=x2*electricity+x1*solarThermal.y - heatDemand.y;
total=x2*electricity+x1*solarThermal.y - heatDemand.y;
usageEle=x2*electricity;
usagePV=x1*solarThermal.y;
der(emissions)=0.13*x2*electricity;
end opt;

問題は、0 から 1 (1 から 100%) である必要がある変数 x1 と x2 に設定した境界を尊重しないことです。solarThermal が電気よりも使用されている場合、排出量は最小限に抑えられます。

これは設定の写真です: 基準 パラメーター 最適化 シミュレーション 結果 ご覧のように、x1 と x2 は、最大値が 0 から 1 になるはずなのに、おおよそ -0.1 から 1.1 になります。この理由は何ですか?

私はちょっと立ち往生していて、どうすればいいのかわからないので、どんな助けでも大歓迎です。ありがとうございました!

4

1 に答える 1

0

私はあなたが間違った軌道に乗っていると思います。最適化するパラメーターとして "x1" と "x2" を選択しましたが、"x1" と "x2" はモデル内のパラメーターとして定義されていません。パラメータは、シミュレーションの実行中に固定されます。

時間軌跡を変化させたい場合は、最適化タスク「軌跡の最適化」を使用する必要があります

于 2014-02-19T15:44:06.530 に答える