制約式種の変更 ============== 今回はソフト制約関数などの `weightedconstraint` のテクニックを紹介します. ソフト制約を含む最適化問題を多段階求解したいとします. 一度目の求解でソフト制約 cons を満たせるようであれば,cons をハード制約として二回目の求解をします. このような場合,どのように記述するのがよいでしょうか. 単純に考えられるのが,一度目の求解後にソフト制約 cons を問題から削除し, 再度ハード制約として追加し直す方法です. なお,制約式 cons の制約式種は weight 属性で確認することができます.:: >>> x = Variable(name='x') >>> p = Problem() >>> cons = x >= 1 >>> p += cons, SoftConstraint(1), 'cons' >>> p['cons'].weight SoftConstraint(1, 0.0, 1.0) >>> del p['cons'] >>> p += cons, HardConstraint(), 'cons' >>> p['cons'].weight HardConstraint() 実は,この weight 属性は読み取りだけでなく,変更も可能です. weight 属性を直接変更する場合,次のように記述します. >>> x = Variable(name='x') >>> p = Problem() >>> p += x >= 1, SoftConstraint(1), 'cons' >>> p['cons'].weight SoftConstraint(1, 0.0, 1.0) >>> p['cons'].weight = HardConstraint() >>> p['cons'].weight HardConstraint() 前述のように問題から制約式を削除することなく,同等の操作ができています. やっていることは同じですが,PySIMPLE では,より便利かつ直観的な記述ができるよう, 痒い所に手が届く設計となっております.