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) 应忽略。您可以使用以下方法提取您的解决方案:

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 回答