3

私は8 クイーンズ パズルを見ています。以下の R コードを使用しました。これは、R lpsolve のドキュメントから直接入手したものです。パラメーター num.bin.solution は 3 に設定されています。R のドキュメントでは、num.bin.solns は返されたソリューションの数の数値インジケーターを表すと書かれています。その場合、どうすれば3つの可能な解決策を見ることができますか? コマンド chessing$solution を使用しましたが、出力がわかりにくいです。また、すべての可能なソリューションを返す方法はありますか?

chess.obj <- rep (1, 64)
q8 <- make.q8 ()
chess.dir <- rep (c("=", "<"), c(16, 26))#first 16 cosntraints are for row and columns, remaining constraints are for diagonals
chess.rhs <- rep (1, 42)
chessing=lp ('max', chess.obj, , chess.dir, chess.rhs, dense.const = q8,
    all.bin=TRUE, num.bin.solns=3)
chessing$solution

更新:主な質問に答えてもらいました。しかし、可能なすべてのソリューションを取得する効率的な方法があるかどうかはまだ疑問です。

4

1 に答える 1

3

ソリューションは にエンコードされていchessing$solutionます。64 個の整数値の各ブロックは 1 つの最適解であり、最後の値 (-1) は無視する必要があります。次の方法でソリューションを抽出できます。

res <- split(chessing$solution[1:(3*64)], rep(1:3, each=64))
res
# $`1`
#  [1] 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
# [52] 0 0 0 0 0 0 0 0 0 0 1 0 0
# 
# $`2`
#  [1] 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
# [52] 0 0 0 1 0 0 0 0 0 1 0 0 0
# 
# $`3`
#  [1] 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0
# [52] 0 0 0 0 0 0 0 0 0 1 0 0 0

res[[1]]res[[2]]、およびを使用して、個々のソリューションにアクセスできるようになりres[[3]]ました。

于 2014-04-10T18:13:46.900 に答える