ここ最近、整数計画ソルバーであるSCIPを使っている。
「独学」でやっているので、まだ自分的に途上中。
SCIPの入力文であるところのCPLEXには条件式を表す書式があった。
情報はこちら
条件式には -> を使うとのこと
なので、以前の記事で書いた
での問題
「5枚あるカードのうちAが2枚か4枚だ」に関しては。
###########
1枚目のカードがAか否か a1 (0 か 1)
2枚目のカードがAか否か a2
3枚目のカードがAか否か a3
4枚目のカードがAか否か a4
5枚目のカードがAか否か a5
Aの総数はsumは
a1 + a2 + a3 + a4 + a5 = sum
flag=0 Aが2枚
flag=1 Aが4枚
以下、CPLEXの書式で以下のようにかけた。
###########
Minimize
value: dummy
Subject To
flag=0 -> sum=2
flag=1 -> sum=4
a1+a2+a3+a4+a5-sum=0
Bounds
dummy = 0
Binary
flag
a1
a2
a3
a4
a5
End
左側に書く変数は 0-1 変数でなくてはならず,-> の右側は線形制約式でなければならない,という制限がある。
いままで自分が作ったプログラムの中でこの「->」にかえた方がいいものがあるのかも。