SCIPで数独を解く。
chatgpt がサッと作ってくれる。
SCIPで数独を作る。
chatgpt がサッと作ってくれる。
が、別解チェックをやってない。
別解チェックをやらせようとすると
chatgpt が何やら作ってくれようとするが、怪しい。
1番目の解はなしね
他はあるかな?
とすればいいわけで。
LP問題文にこの行を追加する。
00に9
01に6
02に2
.......
80以下ならいい
c355: +1 x_0_0_9 +1 x_0_1_6 +1 x_0_2_2 +1 x_0_3_8 +1 x_0_4_1 +1 x_0_5_3 +1 x_0_6_7 +1 x_0_7_5 +1 x_0_8_4
+1 x_1_0_8 +1 x_1_1_5 +1 x_1_2_3 +1 x_1_3_4 +1 x_1_4_7 +1 x_1_5_6 +1 x_1_6_1 +1 x_1_7_9 +1 x_1_8_2 +1 x_2_0_4
+1 x_2_1_1 +1 x_2_2_7 +1 x_2_3_5 +1 x_2_4_2 +1 x_2_5_9 +1 x_2_6_8 +1 x_2_7_6 +1 x_2_8_3 +1 x_3_0_2 +1 x_3_1_4
+1 x_3_2_6 +1 x_3_3_1 +1 x_3_4_5 +1 x_3_5_8 +1 x_3_6_9 +1 x_3_7_3 +1 x_3_8_7 +1 x_4_0_7 +1 x_4_1_3 +1 x_4_2_8
+1 x_4_3_2 +1 x_4_4_9 +1 x_4_5_4 +1 x_4_6_5 +1 x_4_7_1 +1 x_4_8_6 +1 x_5_0_1 +1 x_5_1_9 +1 x_5_2_5 +1 x_5_3_6
+1 x_5_4_3 +1 x_5_5_7 +1 x_5_6_2 +1 x_5_7_4 +1 x_5_8_8 +1 x_6_0_3 +1 x_6_1_2 +1 x_6_2_9 +1 x_6_3_7 +1 x_6_4_6
+1 x_6_5_1 +1 x_6_6_4 +1 x_6_7_8 +1 x_6_8_5 +1 x_7_0_5 +1 x_7_1_8 +1 x_7_2_1 +1 x_7_3_3 +1 x_7_4_4 +1 x_7_5_2
+1 x_7_6_6 +1 x_7_7_7 +1 x_7_8_9 +1 x_8_0_6 +1 x_8_1_7 +1 x_8_2_4 +1 x_8_3_9 +1 x_8_4_8 +1 x_8_5_5 +1 x_8_6_3
+1 x_8_7_2 +1 x_8_8_1 <= +80
PySCIPOpt でいえば
# 前の解を入れる <= 81 - 1
if sol != None:
#print("封じ")
model.addCons(
sum(x[i, j, sol[i][j]] for i in range(9) for j in range(9)) <= 80
)
こうなる
そうやって解いていって別解がないときを見つければいい。