[英]Optimization in R
我有以下優化問題:
關於y
我們正在最小化。 A是已知矩陣, b
是已知向量, c
是已知常數。
這里有兩個重要的事情:當我們試圖最小化函數時, 它不能小於0 。 同樣,使用不需要初始值的R方法將是理想的,因為將y
的可行起始值視為目標非常復雜。
R中是否有任何軟件包/功能可以讓我實現此問題? 任何幫助將不勝感激! 謝謝。
我贊同@Stu的“優化”建議。 這是在您的情況下使用它的快速示例:
set.seed(1001)
c = 1
m = 10
b = runif(m)
loss_fun = function(y_i){
if (all(y_i>=0)){ # <- Here is where we enforce all y's >=0
return(c - sum(b*log(y_i)))
}else{
return(9e9) # If any y's are negative, return a very large number
}
}
y_initial = runif(m)
print(optim(y_initial, loss_fun))
希望能有所幫助。
更新 :對不起,您的“ Ay”與“ For All y”混淆了。 嘗試這樣的事情:
set.seed(1001)
c = 1
m = 10
b = runif(m)
A = matrix(runif(m*m), nrow=m)
loss_fun = function(y_i){
if (all(A%*%y_i>0)){
return_val = (c - sum(b*log(y_i)))
}else{
return_val = 9e9
}
if ((c - sum(b*log(y_i)))<0.000001){
return_val = 9e9
}
else{
return_val = (c - sum(b*log(y_i)))
}
return(return_val)
}
y_initial = runif(m)
print(optim(y_initial, loss_fun, method = "L-BFGS-B", lower = 0))
您可能需要嘗試不同的方法和y的界限,才能使其正常運行。
這里的總體思想是通過返回較大的值(如果損壞了)來強制執行約束(損失函數中的“ if”條件)。
更新2 :如果函數返回錯誤值“ 9e9”,則將其收斂,因為它滿足損失函數。 例如,每隔一個可行的解決方案給出的值都大於9e9。 這意味着您沒有方法/約束的解決方案。
使用optim
: http : //stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html
此功能允許您使用幾種不同的方法來優化具有約束的功能。
查看示例,以更好地了解您的問題如何適應optim
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.