求解具有非凸矩陣乘法的兩個方程組以進行 MV 優化
**場景:**我正在嘗試對投資組合進行 MV 優化的變體。在這種情況下,我已經有一個平均回報向量( $ \mu $ ),一個向量,一個共變異數矩陣 ( $ \Sigma $ ), 和 $ \phi^{-1} $ 這是標準正態累積分佈函式(機率 alpha 的函式)的倒數。
**問題:**根據以下兩個方程,我將輸入: $ \mu $ , $ \Sigma $ , 1 (1的向量), $ H $ , 和 $ \alpha $ , 並嘗試為 $ \gamma $ (另外,’ 表示向量的轉置)。
方程式:
$$ H = w(\gamma)’\mu + \Phi^{−1}(α)[w(\gamma)’ \Sigma w(γ)]^{1/2} $$ $$ w(\gamma) = \frac{1}{\gamma}\Sigma^{-1}\Big[\mu − \Big(\frac{\mathbf{1}’ \Sigma^{-1} \mu-\gamma}{\mathbf{1}’ \Sigma^{-1} \mathbf{1}}\Big) \mathbf{1}\Big] $$ **我已經嘗試過的:**我正在嘗試使用 python 求解器來解決這個系統。但我無法做到這一點,因為矩陣乘法顯然變得非凸的。
**問題:**如何解決這個問題?
**Obs:**這個問題來自 Sanjiv Das、Harry Markowitz、Jonathan Scheid 和 Meir Statman 的文章 Portfolio Optimization 和心理賬戶,方程 (7) 和 (8)。該文章位於:http ://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.410.8747&rep=rep1&type=pdf
我將使用我隨機生成兩者的情況 $ \Sigma $ 和 $ \mu $ 4維隨機
import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm from scipy.optimize import bisect n = 4 np.random.seed(0) S = np.random.uniform(0, 1, [n, n]) S = 0.5 * (S + S.transpose()) mu = np.random.uniform(-1, 1, n)
轉置的技巧只是為了確保它
S
是對稱的。我會選 $ \alpha = 0.90 $ , 並定義函式 $ H $ 作為Sinv = np.linalg.inv(S) ones = np.ones_like(mu) def H(gamma): # w w = (ones.dot(Sinv).dot(mu) - gamma) / (ones.dot(Sinv).dot(ones)) w = Sinv.dot(mu - w) / gamma # H H = w.dot(mu) + norm.ppf(alpha) * np.sqrt(w.dot(S).dot(w)) return H
這是一個情節 $ H = H(\gamma) $ .
g = np.linspace(4, 50, num = 500) h = np.array(map(H, g)) i = h > 0 plt.plot(g[i], h[i]) plt.show()
對於較大的值,該函式確實有點問題 $ \gamma $ 從某種意義上說,任何使用導數的優化算法(幾乎全部)都會失敗。但是你仍然可以使用二分法來找到根
作為一個例子,我將使用 $ H = 1.04 $ (在平坦地區)
f = lambda x: H(np.exp(x)) - 1.04 r = bisect(f, 1.5, 6, xtol = 1e-12) g0 = np.exp(r) print g0, H(g0)
生成輸出
231.206991393 1.04
所以根是 $ \gamma = 231.20699 $