整数計画ソルバーで碁石拾い整数計画ソルバーで碁石拾い その2
説明にするにあたり、盤面が
だった場合のLPファイルを掲載する。
動作を確認しているもの。
中身の条件を見ていく。
①入ってくるリンクが1個
ひとつの石に着目するとそこにいたるリンクはひとつなわけ。
l_xssss_x0101 + l_x0102_x0101 + l_x0103_x0101 + l_x0104_x0101 + l_x0201_x0101 = 1
それぞれの変数は0か1で和が1ということはその中の一つだけが1ということ。
②出ていくリンクが1個
同じく、ひとつの石から出ていくリンクも1個
l_x0101_x0102 + l_x0101_x0103 + l_x0101_x0104 + l_x0101_x0201 + l_x0101_xeeee = 1
③碁石ひろいのルールで「来た方向へはもどれない」というのがある。「東から入ってきたら、西へは出て行かない」わけで、それはいいかえると、「東からはいってきたものと、西へ出ていくものを数えあげると0か1だ」となる。
これを東西のほかに、南北と西東と北南の4方向について記述する。
l_x0102_x0101 + l_x0103_x0101 + l_x0104_x0101 + l_x0101_x0102 + l_x0101_x0103 + l_x0101_x0104 <= 1
あと残っているルールは、拾う順番に関してのもの。
ADというリンクを採用する場合は、それ以前にBとCはすでに盤面から取り去られていなければならないということ。
つづく