0
我想從Excel的「求解器」加載項中複製R中的結果。我不知道優化的內部工作原理(數學),因此我對大多數後期結果以及我收到的錯誤消息感到困惑。我試過使用optimx
軟件包,但顯然這並不能控制優化中的約束條件,所以現在我試用了nloptr
軟件包。優化使用包「nloptr」
基本上,我試圖做的是複製最佳投資組合計算(財務)。下面是我的代碼的示例:
ret.cov <- cov(as.matrix(ret.p[,1:30]))
wts <- rep(1/portfolioSize, times = portfolioSize)
sharpe <- function(wts) {
mean.p <- sum(colMeans(ret.p[,1:30])*wts)
var.p <- t(wts) %*% (ret.cov %*% (wts))
sd.p <- sqrt(var.p)
SR <- (mean.p - Rf)/sd.p
return(as.numeric(SR))
}
fun.eq <- function(wts) {
sum(wts) == 1
}
optim.p <- nloptr(x0 = wts, eval_f = sharpe, lb = 0, ub = 1, eval_g_eq = fun.eq)
sharpe(as.numeric(optim.p$solution))
- 計算的30股以及它們的返回協方差矩陣
- 初始化那些股票的權重,以優化(相等地加權來啓動)
- 設置了一個函數來計算投資組合的夏普比率
- 嘗試(???)指定
nloptr
的相等函數,該函數聲明wts
矢量的和必須等於1. - 嘗試最大化功能(儘管我認爲它是默認情況下最小化,而我不知道如何改變,以最大限度地改變)。
- 檢查所產生的,最大化夏普比率
夏普計算功能工作正常,當我嘗試它nloptr
功能之外。這些問題是各種各樣的,從需要指定正確的算法使用,到不接受我提供的相等函數的函數。
所以,我的問題是:
- 你如何改變
nloptr
最大化,而不是減少? - 如何寫一個相等函數來指定輸入向量的總和(權重)必須等於1?
- 什麼是在這裏指定使用
opts = list()
的正確算法? Excel使用稱爲「GRG非線性」的東西。
提前致謝!
感謝您的回覆!實際上,我已經轉向另一個相同類型的(可重現的)問題,如果您也可以看一下它,那麼我將不勝感激!在這裏找到:http://stackoverflow.com/questions/34796173/no-change-to-initial-values-using-nloptr-in-r –