ツインスネークSCIPのその3。
式③ 蛇パーツa3が、マス目c11にがあれば、そこに向かうリンクがある。(左の図)
式でいえば、
a3_c11 - a2_c01_a3_c11 - a2_c21_a3_c11 - a2_c10_a3_c11 - a2_c12_a3_c11 = 0
変数⑤ここで、a2_c01_a3_c11は
「a2がc01にあってa3がc11にある」というバイナリ変数。
式の意味合いは、
a2_c11 が0 なら
a2_c01_a3_c11 も
a2_c21_a3_c11 も
a2_c10_a3_c11 も
a2_c12_a3_c11 も 0。
a2_c11 が1 なら
a2_c01_a3_c11 か
a2_c21_a3_c11 か
a2_c10_a3_c11 か
a2_c12_a3_c11 のどれかが 1。
これを全ての蛇パーツの全てのマス目において立式。
式④ 蛇パーツa3が、マス目c11にがあれば、そこから出ていくリンクがある。(右の図)
a3_c11 - a3_c11_a4_c01 - a3_c11_a4_c21 - a3_c11_a4_c10 - a3_c11_a4_c12 = 0
式の成り立ちは式③と同様。。。
これも、全ての蛇パーツの全てのマス目において立式。
蛇の頭に対する式③はなし、
蛇の尾に対する式④はなし、
マス目が端っこだと、必ずしもリンク候補が4つ全部ない。
ここでちょっとポイント
c01_c11 というような、「c01からc11に蛇が通っている」変数を導入する手もあった。が、その場合は、蛇のどのパーツがそこを通っているかを「なにか」でハンドリングしなければならなく、ちょい面倒くさいように思ったので、式③式④を採用。
つづく。