の続き。
SCIPは、整数の等式や不等式を入力すると解いてくれる。
まず、正五角形を詰める問題。
候補の正五角形に番号づけすると。
p000,p001,p002。。。。
それぞれが、あるかなしかを変数にする。
とりえる値は 0 or 1
b_000 b_001 b_002 。。。
式①
全部で36個詰めようとすると
b_000 + b_001 + b_002 + 。。。。 = 36
式②
候補の正五角形の中には重なっているものもあるわけで、
もしも p000 と p069が重なっていたとすると
b_000 + b_069 <=1 となる。
片方が採用されると、片方は採用できない。
両方採用されないこともある。なので、足して1以下。
それを、全部の重なっている正五角形のペアに対して書く
b_000 + b_069 <= 1
b_000 + b_077 <= 1
b_000 + b_101 <= 1
b_004 + b_036 <= 1
b_004 + b_048 <= 1
b_004 + b_050 <= 1
b_008 + b_089 <= 1
。。。。。。。。。。
約1000個
重なっているかどうかはSCIPに入力する前に別プログラムで調べておく。
正五角形を詰めていこうとする問題に関してはこの式①と式②
でおしまい。この解き方の流れはとても、スッキリしてる。
SCIPにかけると、答えを出してくれる。
図にすると
つづく