2014-04-10 5 views
3

나는 8 queens puzzle을보고있다. 나는 아래의 R 코드를 사용했다. R 코드는 R lpsolve 문서에서 직접 구할 수있다. num.bin.solution 매개 변수는 3으로 설정됩니다. R 문서에서 num.bin.solns는 반환되는 솔루션 수의 숫자 표시기를 의미합니다. 이 경우 어떻게 3 가지 가능한 솔루션을 볼 수 있습니까? 나는 chessing $ solution 명령을 사용했으나 결과물을 이해하기 쉽지 않습니다. 또한 모든 가능한 해결책을 찾을 수있는 방법이 있습니까?R Ipsolve 모든 솔루션을 보는 방법

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 

업데이트 : 내 주요 질문 답변을 얻었다. 그러나 모든 가능한 솔루션을 얻을 수있는 효율적인 방법이 있는지 궁금해하고 있습니다.

답변

3

솔루션은 chessing$solution으로 인코딩됩니다. 64 정수 값의 각 블록은 하나의 최적 해이며 마지막 값 (-1)은 무시해야합니다. 이제 res[[1]], res[[2]]res[[3]]와 함께 개별 솔루션에 액세스 할 수 있습니다

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 

: 당신은 당신의 솔루션을 추출 할 수 있습니다.

+0

가능한 모든 해결책을 얻을 수 있습니다. 64 평방 블록 체스 보드의 경우, 가능한 해결책은 92 가지가 있습니다. 얼마나 많은 솔루션을 사용할 수 있는지 알지 못한다면 가능한 모든 솔루션을 제공하기 위해 어떻게 lpsolve에게 말할 수 있습니까? – user2543622

+0

@ user2543622 나는'num.bin.solns = 1000'을 넘겼고 92 개의 해결책을 찾았다 고 말하면서 돌아왔다. 그래서'num.bin.solns'를 큰 값으로 설정하면됩니다. – josliber

+0

num.bin.solns = 1000으로 실행했지만 메시지를 얻지 못했습니다. ("92 솔루션을 찾았습니다"라는 메시지가 어디서 나왔습니까?) – user2543622