R Ipsolve如何查看所有解决方案

时间:2014-04-10 16:46:35

标签: r mathematical-optimization lpsolve

我在看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

更新:我的主要问题得到了解答。但仍然想知道是否有任何有效的方法来获得所有可能的解决方案。

1 个答案:

答案 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]]访问各个解决方案。