2016-04-07 35 views
0

Şu anda portföy seçimi ve optimizasyonu yapmak zorunda olduğumuz bir grup projesinde yer alıyorum. başvuruluyor kağıt burada verilir: (özellikle sayfa 5 ve 6, denklemler 7-10)Güçlü portföy optimizasyonu için wrt 2 değişkenini en aza indirmeye çalışın. Bunu fmincon ile nasıl yapabilirim?

http://faculty.london.edu/avmiguel/DeMiguel-Nogales-OR.pdf

Biz

dk aşağıda verilen sorun M-portfolyoun kullanarak optimizasyon problemi yaratır (yaşıyorsanız wt w, m) (1/T) * sum_ (rho) * (w '* r_t - m) (Üzgünüz, çalışmayı biçimlendiremedim)

st w'e = 1 (sadece bir koşul tüm ağırlıklar 1 olarak eklemek söyleyerek)

Şimdiye kadar, bu Gerçekleştirmeye çalıştığımız da budur:

sorun teta için Tanımlarımıza başlar
function optPortfolio = portfoliofminconM(returns,theta) 

% Compute the inputs of the mean-variance model 
mu = mean(returns)'; 
sigma = cov(returns); 

% Inputs for the fmincon function 
T = 120; 
n = length(mu); 
w = theta(1:n); 
m = theta((n+1):(2*n)); 
c = 0.01*ones(1,n); 
Aeq = ones(1,(2*n)); 
beq = 1; 
lb = zeros(2,n); 
ub = ones(2,n); 
x0 = ones(n,2)/n; % Start with the equally-weighted portfolio 
options = optimset('Algorithm', 'interior-point', ... 
    'MaxIter', 1E10, 'MaxFunEvals', 1E10); 

% Nested function which is used as the objective function 
function objValue = objfunction(w,m) 
    cRp = (w'*(returns - (ones(T,1)*m'))'; 
    objValue = 0; 
    for i = 1:T 
     if abs(cRp(i)) <= c; 
      objValue = objValue + (((cRp(i))^2)/2); 
     else 
      objValue = objValue + (c*(abs(cRp(i))-(c/2))); 
     end 
    end 

bir olarak kullanılıyor w ve m vektörüdür. Fmincon'un objektif fonksiyonda 2 değişken ile nasıl kullanılacağını bilmiyoruz. Ayrıca, objektif fonksiyonun değeri başka bir değere (kâğıtta gösterildiği gibi) bağlıdır ve bu, toplam 264 aylık bir süre için 120 aylık bir haddeleme süresi penceresi üzerinden yapılmalıdır. if-else)

Daha fazla bilgi gerekirse, memnuniyetle temin ederim!

Benzer bir sorunla ilgilenen bir örnek de sağlayabilirseniz, lütfen bize bağlantı kurabilirsiniz.

Önceden teşekkür ederiz.

cevap

0

Fmincon ile iki skaler işlevini en aza indirgemenin yolu, hedef işlevinizi tek, iki boyutlu bir vektörün işlevi olarak yazmaktır. Örneğin, f(x,y) = x.^2 + 2*x*y + y.^2'u f(x) = x(1)^2 + 2*x(1)*x(2) + x(2)^2 olarak yazarsınız.

Daha genel olarak, iki vektörün bir fonksiyonunu tek, büyük bir vektörün fonksiyonu olarak yazarsınız. Durumunuzda, itirazınızı yeniden yazabilir veya aşağıdaki gibi hızlı bir hack yapabilirdiniz:

objfunction_for_fmincon = @(x) objfunction(x(1:n), x(n+1:2*n)); 
+0

Evet, bu bana yardımcı oldu! Ancak x (1) üzerinde bir kısıtlama var, ancak x (2) 'de değil, bu yüzden Aeq, beq kısıtlamalarını uygularken ağırlıklar toplamının bire eşit olduğunu, x (2)' de de uyguladıklarını görürüz. , olmamalıydı. Aeq ve beq kısıtlamalarının yalnızca x cinsinden ilk vektör sütununa uygulanabilmesi için nasıl kısıtlarım? Umarım bu mantıklıdır. Teşekkür ederim! – rahulk92