国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

拓端tecdat|R語(yǔ)言投資組合優(yōu)化求解器:條件約束最優(yōu)化、非線性規(guī)劃求解

2021-08-01 21:34 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=22853

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

本文將介紹R中可用于投資組合優(yōu)化的不同求解器。

通用求解器

通用求解器可以處理任意的非線性優(yōu)化問(wèn)題,但代價(jià)可能是收斂速度慢。

默認(rèn)

包stats(默認(rèn)安裝的基本R包)提供了幾個(gè)通用的優(yōu)化程序。

  • optimize()。用于區(qū)間內(nèi)的一維無(wú)約束函數(shù)優(yōu)化(對(duì)于一維求根,使用uniroot())。

  1. f <- function(x) exp(-0.5*x) * sin(10*pi*x)

  2. f(0.5)

?



  1. result <- optimize(f, interval = c(0, 1), tol = 0.0001)

  2. result




  1. # 繪制

  2. curve(0, 1, n = 200)

  • optim()通用優(yōu)化,有六種不同的優(yōu)化方法。

    • Nelder-Mead:相對(duì)穩(wěn)健的方法(默認(rèn)),不需要導(dǎo)數(shù)。

    • CG:適用于高維無(wú)約束問(wèn)題的低內(nèi)存優(yōu)化

    • BFGS:簡(jiǎn)單的無(wú)約束的準(zhǔn)牛頓方法

    • L-BFGS-B:用于邊界約束問(wèn)題的優(yōu)化

    • SANN: 模擬退火法

    • Brent: 用于一維問(wèn)題(實(shí)際上是調(diào)用optimize())。

這個(gè)例子做了一個(gè)最小二乘法擬合:最小化

?

  1. # 要擬合的數(shù)據(jù)點(diǎn)

  2. # 線性擬合的l2-norm誤差平方 y ~ par[1] + par[2]*x

  3. # ?調(diào)用求解器(初始值為c(0, 1),默認(rèn)方法為 "Nelder-Mead")。

  4. optim(par = c(0, 1), f, data = dat)



  5. # 繪制線性回歸圖


  1. # 與R中內(nèi)置的線性回歸進(jìn)行比較

  2. lm(y ~ x, data = dat)

下一個(gè)例子說(shuō)明了梯度的使用,著名的Rosenbrock香蕉函數(shù):

,梯度

,無(wú)約束最小化問(wèn)題

  1. # ?Rosenbrock香蕉函數(shù)及其梯度

  2. banana <- function(x)

  3. c(-400 * x[1] * (x[2] - x[1] * x[1]) - 2 * (1 - x[1]),

  4. 200 * (x[2] - x[1] * x[1]))

  5. optim(c(-1.2, 1), f_banana)




optim(c(-1.2, 1), f, gr, method = "BFGS")

下面的例子使用了界約束。

最小化

約束:?

  1. p <- length(x); sum(c(1, rep(4, p-1)) * (x - c(1, x[-p])^2)^2) }

  2. # 25維度約束

  3. optim(rep(3, 25), f,lower = rep(2, 25), upper = rep(4

這個(gè)例子使用模擬退火法(用于全局優(yōu)化)。

  1. #全局最小值在-15左右

  2. res <- optim(50, f, method = "SANN")




  1. # 現(xiàn)在進(jìn)行局部改進(jìn)(通常只改進(jìn)了一小部分)

  2. optim(res$par, f , method = "BFGS")

?


  • constrOptim()。使用自適應(yīng)約束算法,在線性不等式約束下最小化一個(gè)函數(shù)(調(diào)用optim())。

  1. # ?不等式約束(ui %*% theta >= ci): x <= 0.9, ?y - x > 0.1

  2. constrOptim(c(.5, 0)

?

  • nlm(): 這個(gè)函數(shù)使用牛頓式算法進(jìn)行目標(biāo)函數(shù)的最小化。

  1. nlm(f, c(10,10))



  • nlminb(): 進(jìn)行無(wú)界約束優(yōu)化。.

  1. nlminb(c(-1.2, 1), f)


  1. nlminb(c(-1.2, 1), f, gr)


optim

基礎(chǔ)函數(shù)optim()作為許多其他求解器的包,可以方便地使用和比較。

  1. # opm() 可以同時(shí)使用幾個(gè)方法

  2. opm( ?f , method = c("Nelder-Mead", "BFGS"))

全局優(yōu)化

全局優(yōu)化與局部?jī)?yōu)化的理念完全不同(全局優(yōu)化求解器通常被稱為隨機(jī)求解器,試圖避免局部最優(yōu)點(diǎn))。

特定類別問(wèn)題的求解器

如果要解決的問(wèn)題屬于某一類問(wèn)題,如LS、LP、MILP、QP、SOCP或SDP,那么使用該類問(wèn)題的專用求解器會(huì)更好。
?

最小二乘法 (LS)

線性最小二乘法(LS)問(wèn)題是將

最小化,可能有界或線性約束。

線性規(guī)劃(LP)

函數(shù)solveLP(),可以方便地解決以下形式的LP:

最小化:

約束:

  1. #> 加載所需軟件包



  2. cvec <- c(1800, 600, 600) ?# 毛利率

  3. bvec <- c(40, 90, 2500) ?# 捐贈(zèng)量


  4. # 運(yùn)行求解器

  5. solveLP(maximum = TRUE)

?

混合整數(shù)線性規(guī)劃?(MILP)

lpSolve(比linprog快得多,因?yàn)樗怯肅語(yǔ)言編碼的)可以解決線性混合整數(shù)問(wèn)題(可能帶有一些整數(shù)約束的LP)。


  1. # 設(shè)置問(wèn)題:

  2. # ? maximize ? ? ?x1 + 9 x2 + x3

  3. # ? subject to ? ?x1 + 2 x2 + 3 x3 <= 9

  4. # ? ? ? ? ? ? ? 3 x1 + 2 x2 + 2 x3 <= 15


  5. # 運(yùn)行求解

  6. res <- lp("max", f, con)



?


  1. # 再次運(yùn)行,這次要求三個(gè)變量都是整數(shù)

  2. lp( ?int.vec = 1:3)

solution

二次規(guī)劃 (QP)

可以方便地解決以下形式的QP

  1. 最小化:

  2. 約束:


  1. # 設(shè)置問(wèn)題:

  2. # ? minimize ? ?-(0 5 0) %*% x + 1/2 x^T x

  3. # ? subject to ?A^T x >= b

  4. # ? with b = (-8,2,0)^T

  5. # ? ? ? (-4 2 ?0)

  6. # ? A = (-3 1 -2)

  7. # ? ? ? ( 0 0 ?1)


  8. #運(yùn)行求解

  9. solve(Dmat,...)

解決具有絕對(duì)值約束和目標(biāo)函數(shù)中的絕對(duì)值的二次規(guī)劃。

二階錐規(guī)劃 (SOCP)

有幾個(gè)包:

  • ECOSolveR提供了一個(gè)與嵌入式COnic Solver(ECOS)的接口,這是一個(gè)著名的、高效的、穩(wěn)健的C語(yǔ)言庫(kù),用于解決凸問(wèn)題。

  • CLSOCP提供了一個(gè)用于解決SOCP問(wèn)題的一步平滑牛頓方法的實(shí)現(xiàn)。

優(yōu)化基礎(chǔ)

我們已經(jīng)看到了兩個(gè)包,它們是許多其他求解器的包。

用于凸問(wèn)題、MIP和非凸問(wèn)題

ROI包為處理R中的優(yōu)化問(wèn)題提供了一個(gè)框架。它使用面向?qū)ο蟮姆椒▉?lái)定義和解決R中的各種優(yōu)化任務(wù),這些任務(wù)可以來(lái)自不同的問(wèn)題類別(例如,線性、二次、非線性規(guī)劃問(wèn)題)。

LP?– 考慮 LP:

最大化:

約束:

?

  1. #> ROI: R 優(yōu)化基礎(chǔ)設(shè)施

  2. #> 求解器插件: nlminb, ecos, lpsolve, scs.

  3. #> 默認(rèn)求解器: auto.


  4. OP(objective = L_objective(c(3, 7, -12)),...,

  5. maximum = TRUE)


  6. #> 投資回報(bào)率優(yōu)化問(wèn)題:

  1. # 讓我們來(lái)看看可用的求解器

  2. # solve it

  3. res <- ROI_solve(prob)

  4. res

?

MILP?– 考慮先前的LP,并通過(guò)添加約束條件x2,x3∈Z使其成為一個(gè)MILP.

  1. # 只需修改之前的問(wèn)題

  2. types(prob) <- c("C", "I", "I")

  3. prob

?

BLP?– 考慮二元線性規(guī)劃?(BLP):

最小化:

約束:

?

  1. OP(objective = L_objective,..., ,

  2. types = rep("B", 5))

  3. ROI_solve(prob)


  4. #> Optimal solution found.

  5. #> The objective value is: -1.01e+02

SOCP?– 考慮SOCP:

最大化:

約束:

并注意到SOC約束?

?可以寫(xiě)成

或?

,在代碼中實(shí)現(xiàn)為:

。

  1. OP(objective = L_objective,...,

  2. maximum = TRUE)

?

SDP--考慮SDP:

最小化:

約束:

并注意SDP約束

可以寫(xiě)成

(大小為3是因?yàn)樵谖覀兊膯?wèn)題中,矩陣為2×2,但vech()提取了3個(gè)獨(dú)立變量,因?yàn)榫仃囀菍?duì)稱的)。

  1. OP(objective = L_objective,...,

  2. rhs ))


NLP?– 考慮非線性規(guī)劃(NLP)

最大化

約束

  1. OP(objective = F_objective,..., bounds ,

  2. maximum = TRUE)

?

凸優(yōu)化

R為凸優(yōu)化提供了一種面向?qū)ο蟮慕UZ(yǔ)言。它允許用戶用自然的數(shù)學(xué)語(yǔ)法來(lái)制定凸優(yōu)化問(wèn)題,而不是大多數(shù)求解器所要求的限制性標(biāo)準(zhǔn)形式。通過(guò)使用具有已知數(shù)學(xué)特性的函數(shù)庫(kù),結(jié)合常數(shù)、變量和參數(shù)來(lái)指定目標(biāo)和約束條件集?,F(xiàn)在讓我們看看幾個(gè)例子。

最小二乘法?– 讓我們從一個(gè)簡(jiǎn)單的LS例子開(kāi)始:最小化

當(dāng)然,我們可以使用R的基礎(chǔ)線性模型擬合函數(shù)lm()。

  1. # 生成數(shù)據(jù)

  2. m <- 100

  3. n <- 10

  4. beta_true <- c(-4:5)



  5. # 生成數(shù)據(jù)

  6. res <- lm(y ~ 0 + X) ? # 0表示我們的模型中沒(méi)有截距。


?

用CVXR來(lái)做


  1. result <- solve(prob)

  2. str(result)

?

??

我們現(xiàn)在可以很容易地添加一個(gè)限制條件來(lái)解決非負(fù)的LS。

  1. Problem(Minimize(obj), constraints = list(beta >= 0))

  2. solve(prob)

穩(wěn)健的Huber回歸?- 讓我們考慮穩(wěn)健回歸的簡(jiǎn)單例子:

最小化

其中

  1. sum(huber(y - X %*% beta, M)

  2. Problem(Minimize(obj))

  3. solve(prob)


彈性網(wǎng)正則化?- 我們現(xiàn)在要解決的問(wèn)題是:最小化

  1. # 定義正則化項(xiàng)

  2. elastic<- function(beta) {

  3. ridge <- (1 - alpha) * sum(beta^2)

  4. lasso <- alpha * p_norm(beta, 1)



  5. # 定義問(wèn)題并解決它


  6. sum((y - X %*% beta)^2) + elastic(beta, lambda, alpha)

  7. Problem(Minimize(obj))

  8. solve(prob)

稀疏逆協(xié)方差矩陣--考慮矩陣值的凸問(wèn)題:最大化

,條件是

  1. log_det(X) - matrix_trace(X %*% S)

  2. list(sum(abs(X)) <= alpha)

協(xié)方差--考慮矩陣值的凸問(wèn)題:在

的條件下,最大化

。


  1. constr <- list(Sigma[1,1] == 0.2, Sigma[1,2] >= 0, Sigma[1,3] >= 0,

  2. Sigma[2,2] == 0.1, Sigma[2,3] <= 0, Sigma[2,4] <= 0,

  3. Sigma[3,3] == 0.3, Sigma[3,4] >= 0, Sigma[4,4] == 0.1)

投資組合優(yōu)化--考慮馬科維茨投資組合設(shè)計(jì):最大化

  1. Problem(Maximize(obj), constr)

  2. solve(prob)

結(jié)論

R語(yǔ)言中可用的求解器的數(shù)量很多。建議采取以下步驟。

  • 如果是凸優(yōu)化問(wèn)題,那么開(kāi)始進(jìn)行初步測(cè)試。

  • 如果速度不夠快,使用ROI。

  • 如果仍然需要更快的速度,那么如果問(wèn)題屬于定義好的類別之一,則使用該類別專用的求解器(例如,對(duì)于LP,推薦使用lpSolve,對(duì)于QP則使用quadprog)。

  • 然而,如果問(wèn)題不屬于任何類別,那么就必須使用非線性優(yōu)化的一般求解器。在這個(gè)意義上,如果一個(gè)局部的解決方案就夠了,那么可以用許多求解器的包。如果需要全局求解器,那么軟件包gloptim是一個(gè)不錯(cuò)的選擇,它是許多全局求解器的包。

最受歡迎的見(jiàn)解

1.用R語(yǔ)言模擬混合制排隊(duì)隨機(jī)服務(wù)排隊(duì)系統(tǒng)

2.R語(yǔ)言中使用排隊(duì)論預(yù)測(cè)等待時(shí)間

3.R語(yǔ)言中實(shí)現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型

4.R語(yǔ)言中的馬爾科夫機(jī)制轉(zhuǎn)換(Markov regime switching)模型

5.matlab貝葉斯隱馬爾可夫hmm模型

6.用R語(yǔ)言模擬混合制排隊(duì)隨機(jī)服務(wù)排隊(duì)系統(tǒng)

7.Python基于粒子群優(yōu)化的投資組合優(yōu)化

8.R語(yǔ)言馬爾可夫轉(zhuǎn)換模型研究交通傷亡人數(shù)事故預(yù)測(cè)

9.用機(jī)器學(xué)習(xí)識(shí)別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用


拓端tecdat|R語(yǔ)言投資組合優(yōu)化求解器:條件約束最優(yōu)化、非線性規(guī)劃求解的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
闵行区| 大宁县| 湄潭县| 塔河县| 花莲市| 城固县| 错那县| 栾川县| 湘潭县| 北安市| 柞水县| 四会市| 杭州市| 灵山县| 克东县| 仲巴县| 胶州市| 高尔夫| 安岳县| 肇东市| 扶风县| 泗水县| 阜康市| 涡阳县| 旬邑县| 七台河市| 南靖县| 黑山县| 道孚县| 阿拉善盟| 平乐县| 湾仔区| 桦南县| 米易县| 澜沧| 浦东新区| 滨海县| 五原县| 横峰县| 桑植县| 宁明县|