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