# Exercise 4.60: Log-optimal investment strategy

Jump to: Source code Text output Plots Library index

    % Boyd & Vandenberghe "Convex Optimization"
    % JoÃ«lle Skaf - 04/24/08
    % (a figure is generated)
    %
    % The investment strategy x that maximizes the long term growth rate
    %           R = sum_{j=1}^m pi_j*log(p_j^Tx)
    % is called the log-optimal investment strategy, and can be found by
    % solving the optimization problem
    %           maximize    sum_{j=1}^m pi_j log(p_j^Tx)
    %           subject to  x >= 0, sum(x) = 1,
    % where p_ij is the return of asset i over one period in scenario j and
    % pi_j is the probability of scenario j. There are n assets and m scenarios.
    % We consider the case of equiprobable scenarios.
    %
    % The log-optimal long term growth rate is found and compared to the one
    % obtained with a uniform allocation strategy, i.e., x_i=(1/n).
    % Sample trajectories ofthe accumulated wealth for the optimal strategy and
    % the uniform one are plotted.

    % Input data
    P = [3.5000    1.1100    1.1100    1.0400    1.0100;
         0.5000    0.9700    0.9800    1.0500    1.0100;
         0.5000    0.9900    0.9900    0.9900    1.0100;
         0.5000    1.0500    1.0600    0.9900    1.0100;
         0.5000    1.1600    0.9900    1.0700    1.0100;
         0.5000    0.9900    0.9900    1.0600    1.0100;
         0.5000    0.9200    1.0800    0.9900    1.0100;
         0.5000    1.1300    1.1000    0.9900    1.0100;
         0.5000    0.9300    0.9500    1.0400    1.0100;
         3.5000    0.9900    0.9700    0.9800    1.0100];

    [m,n] = size(P);
    Pi = ones(m,1)/m;
    x_unif = ones(n,1)/n; % uniform resource allocation

    % Find the log-optimal investment policy
    cvx_begin
        variable x_opt(n)
        maximize sum(Pi.*log(P*x_opt))
        sum(x_opt) == 1
        x_opt >= 0
    cvx_end

    % Long-term growth rates
    R_opt = sum(Pi.*log(P*x_opt));
    R_unif = sum(Pi.*log(P*x_unif));
    display('The long term growth rate of the log-optimal strategy is: ');
    disp(R_opt);
    display('The long term growth rate of the uniform strategy is: ');
    disp(R_unif);

    % Generate random event sequences
    rand('state',10);
    N = 10;  % number of random trajectories
    T = 200; % time horizon
    w_opt = []; w_unif = [];
    for i = 1:N
        events = ceil(rand(1,T)*m);
        P_event = P(events,:);
        w_opt = [w_opt [1; cumprod(P_event*x_opt)]];
        w_unif = [w_unif [1; cumprod(P_event*x_unif)]];
    end

    % Plot wealth versus time
    figure
    semilogy(w_opt,'g')
    hold on
    semilogy(w_unif,'r--')
    grid
    axis tight
    xlabel('time')
    ylabel('wealth')

    Successive approximation method to be employed.
       For improved efficiency, SDPT3 is solving the dual problem.
       SDPT3 will be called several times to refine the solution.
       Original size: 36 variables, 15 equality constraints
       10 exponentials add 80 variables, 50 equality constraints
    -----------------------------------------------------------------
     Cones  |             Errors              |
    Mov/Act | Centering  Exp cone   Poly cone | Status
    --------+---------------------------------+---------
     10/ 10 | 1.166e+00  9.529e-02  0.000e+00 | Solved
     10/ 10 | 1.083e-01  9.046e-04  0.000e+00 | Solved
     10/ 10 | 2.870e-03  6.340e-07  0.000e+00 | Solved
      0/  0 | 0.000e+00  0.000e+00  0.000e+00 | Solved
    -----------------------------------------------------------------
    Status: Solved
    Optimal value (cvx_optval): +0.0230783

    The long term growth rate of the log-optimal strategy is:
        0.0231

    The long term growth rate of the uniform strategy is:
        0.0114