Menu:

OPTIONS: Download this file, Download all Python files, Go back

# Filename: kurtzbellman.py
# Author: John Stachurski
# Date: December 2008
# Corresponds to: Listing 5.1

beta, rho, B, M = 0.5, 0.9, 10, 5
S = range(B + M + 1)  # State space = 0,...,B + M
Z = range(B + 1)      # Shock space = 0,...,B 

def U(c):      
    "Utility function."
    return c**beta

def phi(z):    
    "Probability mass function, uniform distribution."
    return 1.0 / len(Z) if 0 <= z <= B else 0

def Gamma(x):  
    "The correspondence of feasible actions."
    return range(min(x, M) + 1)

def T(v):      
    """An implementation of the Bellman operator.
    Parameters: v is a sequence representing a function on S.
    Returns: Tv, a list."""
    Tv = []        
    for x in S:
        # Compute the value of the objective function for each 
        # a in Gamma(x), and store the result in vals
        vals = []   
        for a in Gamma(x):
            y = U(x - a) + rho * sum(v[a + z]*phi(z) for z in Z)
            vals.append(y)
        # Store the maximum reward for this x in the list Tv
        Tv.append(max(vals))
    return Tv