我有兩個輸入矩陣,dt(10,3)& wt(3,3),我需要用它來找到最優決策矩陣(相同維數),Par(10,3),以便最大化目標功能。下面R代碼裏面將提供一些方向進入的問題(使用的示例這裏輸入) -如何在線性優化中使用二元約束?
#Input Matrices
dt <- matrix(runif(300),100,3)
wt <- matrix(c(1,0,0,0,2,0,0,0,1),3,3) #weights
#objective function
Obj <- function(Par) {
P = matrix(Par, nrow = 10, byrow=F) # Reshape
X = t((dt%*%wt)[,1])%*%P[,1]
Y = t((dt%*%wt)[,2])%*%P[,2]
Z = t((dt%*%wt)[,3])%*%P[,3]
as.numeric(X+Y+Z) #maximize
}
現在我很努力的按照以下基本條件的問題:
1) Matrix, Par can only have binary values (0 or 1)
2) rowSums(Par) = 1 (Basically a row can only have 1 in one of the three columns)
3) colSums(Par[,1]) <= 5, colSums(Par[,2]) <= 6, & colSums(Par[,3]) <= 4
4) X/(X+Y+Z) < 0.35, & Y/(X+Y+Z) < 0.4 (X,Y,Z are defined in the objective function)
我試圖編碼的約束constrOptim,但不知道如何輸入二進制&整數約束。我正在閱讀lpSolve,但無法弄清楚。任何幫助非常感謝。謝謝!
二元變量是唯一可能。這通常在凸優化設置(混合整數,混合QP,混合QCQP,混合SOCP;以及只有一些研究解決方案可以解決混合SDP)中完成。在非凸面設置中,Couenne&Knitro沒有太多的功能(問題非常嚴重)。 constrOptim/optim不能做到這一點! lpSolve只能對MIP執行此操作。因爲我不熟悉R,所以我不能推斷你的問題的凸性。但是,如果X,Y,Z是變量(不是常量),它看起來不好! – sascha
嗨Sascha, 感謝您的迴應。欣賞你的時間。我不太熟悉不同的優化設置。基於Erwin的迴應,我使用lpSolve進行編碼並能夠對模型進行框架化(在一個約束下掙扎)。雖然我現在擔心處理,因爲我必須在一百萬條記錄上運行這個操作。我可能不得不尋找可以處理這些數據的R以外的選項。對此有何想法?謝謝! – Rohit