数理最適化セミナーのご案内

9.4 可変定数

 モデル中の定数Parameterは,モデルを展開する段階で固定され,展開後には変更不可能となります.しかし,パラメトリック最適化等の場合には変更可能な定数を含めてモデルを定義して,後で変更しながら解析を行う場合が生じます.そのためにC++SIMPLEはVariableParameterという名称で可変定数を提供しています.

 次は簡単な可変定数の使用例です.線形な目的関数の係数を変更しながら,円の内部が実行可能領域である二次計画問題を逐次的に解きます.この問題に対するモデル定義とシステム制御は次のようになります.

Variable x, y;
VariableParameter a; // 可変定数
Objective f(type = maximize);
f = -a * x + y;
pow(x - 1, 2) + pow(y + 0.5, 2) <= 0.25;
options.outputMode = "silent"; // 出力抑制
for(int i = -5; i < 5; i++){
        a = i;
        solve();
        simple_printf("a = %d, x = %f, y = %f, f = %f\n",
        a, x, y, f);
}

 上記のようにVariableParameterは通常のParameterと全く同様にモデル定義に使用することができます.

 最適値は定円の接線(傾きa)のy切片となりますので,目的関数として各aに対応するy切片の値が得られます.

 以下は,上記のモデルに対する出力結果です.

a = -5, x = 1.490290, y = -0.401942, f = 7.049510
a = -4, x = 1.485071, y = -0.378732, f = 5.561553
a = -3, x = 1.474342, y = -0.341886, f = 4.081139
a = -2, x = 1.447214, y = -0.276393, f = 2.618034
a = -1, x = 1.353553, y = -0.146447, f = 1.207107
a = 0, x = 1.000000, y = -0.000000, f = -0.000000
a = 1, x = 0.646447, y = -0.146447, f = -0.792893
a = 2, x = 0.552786, y = -0.276393, f = -1.381966
a = 3, x = 0.525658, y = -0.341886, f = -1.918861
a = 4, x = 0.514929, y = -0.378732, f = -2.438447

 VariableParameterには以下の注意点があります.

  • VariableParameterは通常のParameterと比べて,メモリを多く所要します.モデルを定義するときに,必要以上のParameterVariableParameterとすることは避けてください.
  • アルゴリズムの自動選択機能に影響を及ぼす可能性がありますので注意してください.
  • 制約充足問題ソルバWCSPではVariableParameterを用いることはできません.

 

 

上に戻る