我在看8 queens puzzle。我使用了下面的R代码,它直接来自R lpsolve文档。参数num.bin.solution设置为3.在R文档中,它表示num.bin.solns代表返回的解决方案数量的数字指示符。在那种情况下,我如何看到3种可能的解决方案?我用命令chessing $解决方案,但输出不容易理解。还有办法返回所有可能的解决方案吗?
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
更新:我的主要问题得到了解答。但仍然想知道是否有任何有效的方法来获得所有可能的解决方案。
答案 0 :(得分: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]]
访问各个解决方案。