2015-02-23 87 views
2

我有一個線性規劃問題。所有的變量都是二進制的,我想獲得所有可能的解決方案。我知道我可以設置參數num.bin.solns來提供多種解決方案。但是有沒有簡單的方法來尋求所有可能的解決方案?R lpsolve二進制查找所有可能的解決方案

例如在下面的情況下,我知道答案的最大數量是6.但如果我不知道最大可能的解決方案,那麼我怎樣才能設置num.bin.solns參數,使它將返回所有可能的解決方案?

library("lpSolve") 
A=matrix (c(1,1,1,1), nrow=1, byrow=TRUE) 
b=(2) 
signs='==' 
c_=rep(0,4) 
res = lpSolve::lp('max', c_, A, signs, b, all.bin = TRUE, num.bin.solns=6) 

回答

1

下面介紹一種方法。 lpSove實際上爲您提供了它找到的num.bin.solns,並且您可以使用$表示法訪問它。

您可以初步設置num.bin.solns爲一些大數字(比如1000)。然後訪問mylp $ num.bin.solns以獲取確切的值。

mylp <- lp('max', c_, A, signs, b, all.bin = TRUE, num.bin.solns=1000) 
numcols <- 4 
numsols <- mylp$num.bin.solns 

solutions <- matrix(head(mylp$solution, numcols*numsols), nrow=numsols, byrow=TRUE) 

> numsols 
[1] 6 

而且你可以打印出個性化解決方案:

> solutions 
    [,1] [,2] [,3] [,4] 
[1,] 0 0 1 1 
[2,] 0 1 0 1 
[3,] 1 0 0 1 
[4,] 1 0 1 0 
[5,] 1 1 0 0 
[6,] 0 1 1 0 
+0

感謝,讓我試試吧。 QQ:任何想法什麼mylp $解決方案有超過我們預期的1個元素?即如果我們把num.bin.solns = 1000,那麼解向量的長度是4001 ...它應該是4000 ...第4001個元素表示什麼? – user2543622 2015-02-25 01:00:55

+0

好問題。我試圖尋找它,但不知道-1從哪裏來。文檔沒有幫助我。因此,你看我做頭()來切斷它。 – 2015-02-25 01:06:27

+0

我試過你的答案,這很有道理。唯一的問題是,如果問題很嚴重,那麼它會減慢處理速度,有時會返回錯誤。而不是指定num.bin.solns = 1000,有沒有辦法說,返回所有可能的解決方案? – user2543622 2015-02-25 01:15:37

相關問題