optimal allocation of two assets by minimizing shortfall probability using fmincon

조회 수: 2 (최근 30일)
susman
susman 2020년 7월 30일
댓글: susman 2020년 8월 5일
I want to determine the optimal allocation of two assets (here "x") such that shortfall probability is minimized.
Shofrtfall probability is derived by applying condition that (if B<b) then sum all incidences and divide by total trials for each "t" and then finally sum the probability of all "t". The value of shortfall probability is 50.55.
When I run fmincon, I get fval=50.55 and the same initial guess of the two weights of two assets.
Following is my code.
%Defined constants inlcude m_e,v_e, m_b,v_b,rho, L,trials,b
x1 = 0.5; %weights of assets
x2 =0.5;
t =1:35; % columns
T = 35; % Total time
x = [eq_share, bd_share]; % total
%simulations
RNx1=normrnd(); % n x m normalized random numbers for first asset
RNx2=normrnd(); % n x m normalized random numbers for second asset
Returnx1= exp(m_e + v_e*(RNx1)); % return on first asset
Returnx2 = exp(m_b+(rho*v_b*RNx1+((1-rho^2)^0.5)*v_b*RNx2)); % return on second asset
Returnportfolio = x1*Returnx1+(x2)*Returnx2; % portfolio returns
W = max(L*Returnportfolio,0); % Matrix of wealth
B = min(b,L*Returnportfolio); % Realized Benefit
p= B<b
S=(cumsum(B<b, 2) == 1) .* (B<b)
shortfallprobability =sum(S)./trials
%% Optimal allocation
options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
opts.Algorithm = 'sqp';
f = @(x) shortfallprobability
[n,fval] = fmincon(f,[0.5 0.5],[],[],[],[],[],[],[],options)
When I run the program, I get
function_handle with value:
@(x) sum((sum((cumsum(B<b,2)==1).*(B<b))./sim))
Iter Func-count Fval Feasibility Step Length Norm of First-order
step optimality
0 3 5.055392e-01 0.000e+00 1.000e+00 0.000e+00 0.000e+00
Initial point is a local minimum that satisfies the constraints.
Optimization completed because at the initial point, the objective function is non-decreasing
in feasible directions to within the value of the optimality tolerance, and
constraints are satisfied to within the value of the constraint tolerance.
<stopping criteria details>
n =
0.5 0.5
fval =
0.505539191954337
Can you please check the code and my mistake. I am sorry to bother as I have already spent much time on it but could not figure out.
Is my fmincon setup ok?
can I use fmincon for this problem?
Am I definining objective function wrongly?

답변 (1개)

Alan Weiss
Alan Weiss 2020년 7월 31일
편집: Alan Weiss 2020년 7월 31일
The problem is the you have not defined your objective function as a separate file that the optimization calls. You need to write a file something like this:
function f = shortfallprobability(x,RNx1,RNx2,m_e,m_b)
Returnx1= exp(m_e + v_e*(RNx1)); % return on first asset
Returnx2 = exp(m_b+(rho*v_b*RNx1+((1-rho^2)^0.5)*v_b*RNx2)); % return on second asset
Returnportfolio = x1*Returnx1+(x2)*Returnx2; % portfolio returns
W = max(L*Returnportfolio,0); % Matrix of wealth
B = min(b,L*Returnportfolio); % Realized Benefit
p = B<b
S = (cumsum(B<b, 2) == 1) .* (B<b)
f = sum(S)./trials
end
Take the corresponding lines out of your code. Then call the solver like this:
f = @(x)shortfallprobability(x,RNx1,RNx2,m_e,m_b);
[n,fval] = fmincon(f,[0.5 0.5],[],[],[],[],[],[],[],options)
Alan Weiss
MATLAB mathematical toolbox documentation
  댓글 수: 1
susman
susman 2020년 8월 5일
Thank you for the suggestion. I am trying to do that but still getting the error that my initial function or varaible is unkown. I try to firgure it out and will tell you when the code will work.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by