Code covered by the BSD License  

Highlights from
Markov Decision Processes (MDP) Toolbox

image thumbnail
from Markov Decision Processes (MDP) Toolbox by Marie-Josee Cros
Functions related to the resolution of discrete-time Markov Decision Processes.

mdp_eval_policy_iterative(P, R, discount, policy, V0, epsilon, max_iter)
function Vpolicy = mdp_eval_policy_iterative(P, R, discount, policy, V0, epsilon, max_iter)


% mdp_eval_policy_iterative   Policy evaluation using iteration. 
% Arguments -------------------------------------------------------------
% Let S = number of states, A = number of actions
%   P(SxSxA)  = transition matrix 
%               P could be an array with 3 dimensions or 
%               a cell array (1xS), each cell containing a matrix possibly sparse
%   R(SxSxA) or (SxA) = reward matrix
%              R could be an array with 3 dimensions (SxSxA) or 
%              a cell array (1xA), each cell containing a sparse matrix (SxS) or
%              a 2D array(SxA) possibly sparse  
%   discount  = discount rate in ]0; 1[
%   policy(S) = a policy
%   V0(S)     = starting value function, optional (default : zeros(S,1))
%   epsilon   = epsilon-optimal policy search, upper than 0,
%               optional (default : 0.0001)
%   max_iter  = maximum number of iteration to be done, upper than 0, 
%               optional (default : 10000)
% Evaluation -------------------------------------------------------------
%   Vpolicy(S) = value function, associated to a specific policy
%--------------------------------------------------------------------------
% In verbose mode, at each iteration, displays the condition which stopped iterations:
% epsilon-optimum value function found or maximum number of iterations reached.

% MDPtoolbox: Markov Decision Processes Toolbox
% Copyright (C) 2009  INRA
% Redistribution and use in source and binary forms, with or without modification, 
% are permitted provided that the following conditions are met:
%    * Redistributions of source code must retain the above copyright notice, 
%      this list of conditions and the following disclaimer.
%    * Redistributions in binary form must reproduce the above copyright notice, 
%      this list of conditions and the following disclaimer in the documentation 
%      and/or other materials provided with the distribution.
%    * Neither the name of the <ORGANIZATION> nor the names of its contributors 
%      may be used to endorse or promote products derived from this software 
%      without specific prior written permission.
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
% IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
% INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
% DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
% LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
% OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
% OF THE POSSIBILITY OF SUCH DAMAGE.


global mdp_VERBOSE;
if ~exist('mdp_VERBOSE'); mdp_VERBOSE=0; end;
 
% check of arguments
if discount <= 0 | discount >= 1
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: Discount rate must be in ]0,1[')
    disp('--------------------------------------------------------')
elseif (iscell(P)) & (size(policy) ~= size(P{1},1))
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: policy must have the same dimension as P')
    disp('--------------------------------------------------------')
elseif (~iscell(P)) & (size(policy) ~= size(P,1))
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: policy must have the same dimension as P')
    disp('--------------------------------------------------------') 
elseif (iscell(P)) & (nargin > 4 ) & (size(V0) ~= size(P{1},1))
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: V0 must have the same dimension as P')
    disp('--------------------------------------------------------')
elseif (~iscell(P)) & (nargin > 4) & (size(V0) ~= size(P,1))
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: V0 must have the same dimension as P')
    disp('--------------------------------------------------------')    
elseif (nargin > 5) & (epsilon <= 0)
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: epsilon must be upper than 0')
    disp('--------------------------------------------------------')
elseif (nargin > 6) & (max_iter <= 0)
    disp('--------------------------------------------------------')
    disp('MDP Toolbox ERROR: max_iter must be upper than 0')
    disp('--------------------------------------------------------')
else

    % initialization of optional arguments 
    if iscell(P); S = size(P{1},1); else; S = size(P,1); end;
    if nargin < 5; V0 = zeros(S,1); end;
    if nargin < 6; epsilon = 0.0001; end;
    if nargin < 7; max_iter = 10000; end; 


    [Ppolicy, PRpolicy] = mdp_computePpolicyPRpolicy(P, R, policy);
    if mdp_VERBOSE; disp('  Iteration    V_variation'); end;
    iter = 0;
    Vpolicy = V0;
    is_done = false; 
    while ~is_done
        iter = iter + 1;
        Vprev = Vpolicy;     
        Vpolicy = PRpolicy + discount * Ppolicy * Vprev;
        variation = max(abs(Vpolicy - Vprev));
        if mdp_VERBOSE;disp(['      ' num2str(iter,'%5i') '         ' num2str(variation)]); end;
        if variation < epsilon 
            is_done = true; 
            if mdp_VERBOSE; disp('MDP Toolbox: iterations stopped, epsilon-optimal value function'); end;
        elseif iter == max_iter
            is_done = true; 
            if mdp_VERBOSE; disp('MDP Toolbox: iterations stopped by maximum number of iteration condition'); end;
        end;
    end;
    
end;


Contact us at files@mathworks.com