Powell-WSC tutorial 2008

10
pages

Proceedings of the 2008 Winter Simulation ConferenceS. J. Mason, R. R. Hill, L. Moench, O. Rose, eds.APPROXIMATE DYNAMIC PROGRAMMING: LESSONS FROM THE FIELDWarren B. PowellDepartment of Operations Research and Financial EngineeringPrinceton UniversityPrinceton, NJ 08544, U.S.A.ABSTRACT dimensionality: the state variable, exogenous informationand the decision variable. A major algorithmic strategy forApproximatedynamicprogrammingisemergingasapower- theseproblemsinvolvesﬁttingthevaluefunctionaroundthefultoolforcertainclassesofmultistagestochastic, dynamic post decisionstatevariable, whichmeasuresthestateoftheproblems that arise in operations research. It has been ap system after a decision is made but before new informationpliedtoawiderangeofproblemsspanningcomplexﬁnancial arrives. Thismeansthatthevaluefunctionisadeterministicmanagement problems, dynamic routing and scheduling, function of the state and action, a feature that is verymachine scheduling, energy management, health resource important in the use of scalable optimization algorithms. Inmanagement, and very large scale ﬂeet management prob addition to this tutorial, my book on approximate dynamiclems. It offers a modeling framework that is extremely programming (Powell 2007) appeared in 2007, which isﬂexible, making it possible to combine the strengths of kind of ultimate tutorial, covering all these issues in farsimulation with the intelligence of optimization. Yet it re greater depth than is ...

Department of Operations Research and Financial Engineering Princeton University Princeton, NJ 08544, U.S.A.

Approximate dynamic programming is emerging as a power ful tool for certain classes of multistage stochastic, dynamic problems that arise in operations research. It has been ap plied to a wide range of problems spanning complex ﬁnancial management problems, dynamic routing and scheduling, machine scheduling, energy management, health resource management, and very largescale ﬂeet management prob lems. It offers a modeling framework that is extremely ﬂexible, making it possible to combine the strengths of simulation with the intelligence of optimization. Yet it re mains a sometimes frustrating algorithmic strategy which requires considerable intuition into the structure of a prob lem. There are a number of algorithmic choices that have to be made in the design of a complete ADP algorithm. This tutorial describes the author’s experiences with many of these choices in the course of solving a wide range of problems.

1

INTRODUCTION

This is my third in a series of tutorials on approximate dy namic programming that I have given at the Winter Simula tion Conference. In (Powell 2005), I described approximate dynamic programming as a method of making intelligent de cisions within a simulation. For simulation problems where there is a need to optimizeover time(that is, decisions now have to consider their impact on the future), ADP offers a powerful framework for calculating the impact of a decision on the future, and using this measurement to make better decisions. In this view, ADP is a form of “optimizing simu lator.” It is important not to confuse this view with the more familiar simulationoptimization community which uses a decision rule governed by one or more parameters which then need to be chosen optimally. In my second tutorial (Powell 2006), I focused on ADP as a method for solving highdimensional dynamic programming problems that suffer from the three curses of

dimensionality: the state variable, exogenous information and the decision variable. A major algorithmic strategy for these problems involves ﬁtting the value function around the postdecision state variable, which measures the state of the system after a decision is made but before new information arrives. This means that the value function is a deterministic function of the state and action, a feature that is very important in the use of scalable optimization algorithms. In addition to this tutorial, my book on approximate dynamic programming (Powell 2007) appeared in 2007, which is kind of ultimate tutorial, covering all these issues in far greater depth than is possible in a short tutorial article. In this tutorial, I am going to focus on the behind thescenes issues that are often not reported in the research literature. In some cases, I will reinforce ideas that have been presented in my book, but some of the topics are not even covered there (in part because of experiences that have occurred in the last year).

2

Three perspectives of ADP

As a result of its name, approximate dynamic programming is typically viewed as a method for solving complex dynamic programs. While this is true, it hides the breadth of its range of applications. We have found that ADP can be of use in three very distinct methodological communities:

a)

Largescale (deterministic) optimization. Our own work in ADP got its start solving very large opti mization problems arising in the context of freight transportation. We have found that commercial packages such as Cplex can handle very large static problems, but struggle when a time dimension is introduced. We have used ADP successfully to break problems arising in the largest freight trans portation companies into components that Cplex handles very easily. In this setting, ADP is simply a decomposition strategy that breaks problems with long horizons into a series of shorter problems. The

b)

c)

Figure 1: Illustration of timespace network

fact that ADP can also handle uncertainty in this context is a nice byproduct that we often exploit. Making simulations intelligent. There are many stochastic, dynamic problems that are solved us ing myopic policies where decisions at timetig nore their impact on the future. ADP provides a method for capturing the impact of these deci sions on the future, and then communicating this impact backward so that decisions can be made more intelligently. The result is not just higher quality decisions, but also more realistic decisions, since humans are actually quite good at anticipating downstream impacts. Solving complex dynamic programs. It is some times natural to formulate a problem as a dynamic program, only to ﬁnd that the resulting problem is computationally impossible. ADP offers a rich set of algorithmic strategies for providing good solu tions to otherwise intractable stochastic, dynamic programs.

Figure 1 is an illustration of a typical timespace net work that is often used in dynamic resource allocation problems. In largescale applications such as those that arise in freight transportation, these graphs become excep tionally large (millions of “space” nodes, billions of links). Instead of solving the entire problem, ADP solves sequences of smaller subproblems such as that shown in ﬁgure 2. We have found that over short time horizons, Cplex can handle what would normally be described as very difﬁcult integer programs, even for very largescale problems. But we have to estimate some sort of approximation to capture the impact of decisions now on the future. This is where approximate dynamic programming comes in. There are many dynamic applications where standard practice is to simulate a myopic policy. In dynamic pro gramming, a policy is any rule for making decisions. A myopic policy is a rule that ignores the impact of a decision now on the future. Letxtbe a decision (how much to order,

Powell

Figure 2: Illustration of a single subproblem

what machine to assign a job to) or vector of decisions (which drivers should handle which loads, what types of π energy resources should we use) at timet. Now letX(St) be a function that determines a decision given the informa π tion in the state variableSt.X(St)is sometimes called a decision function, a decision rule or simply a policy. We assume there may be a family of policies, so we letπ∈Π index a set of policies from the setΠ. π Xmight be the optimization problem in ﬁgure 2 without the nonlinear functional approximations. We might write this policy as

π X(St) =arg maxctxt x∈X t

whereXtAfter we makeis a feasible region. sion (either by solving a math programming, or method), we update our system state variableSt

M St+1=S(St,xt,Wt+1(ω))

our deci any other using

(1)

M whereS(∙)is the transition function (also known as the system model), andWt+1(ω)is the information that becomes available betweentandt+1 when we are following sample pathω. Approximate dynamic programming would try to im prove this myopic policy by replacing it with

π ¯ X(St) =arg maxctxt+Vt(x) x∈Xt

¯ whereVt(x)is some sort of approximation that captures the impact of decisions now,xt, on the future.

Finally, if we are trying to solve a dynamic program, we have probably written out Bellman’s equation as   Vt(St) =maxC(St,xt) +γE{Vt+1(St+1)|St}.(2) x∈Xt

Often, the ﬁrst problem people encounter in realistic prob lems is that we cannot computeVt(St). Standard textbooks in Markov decision processes ((Puterman 1994) is a good reference) assume that the state variable is discrete with statess= (1,2, . . . ,|S|)problem is that. The Stmight be a vector, and it might be continuous. Even if it is discrete, if Stis a vector the number of possible states grows extremely quickly. Problems with as few as four or ﬁve dimensions can be computationally intractable (this is the famous “curse of dimensionality”). Approximate dynamic programming proceeds by replacingVt+1(St+1)with an approximation ¯ Vt+1(St+1), which might be discrete or continuous (even if StThe body of literature for approximatingis discrete). the value function effectively draws on the entire ﬁeld of statistics and machine learning (see chapters 6, 7 and 11 of (Powell 2007) for an introduction).

3

A basic ADP algorithm

There are many variations of approximate dynamic pro gramming algorithms. Figure 3 describes a basic ADP procedure which illustrates several key elements of most ADP procedures. First, the algorithm steps forward in time, simulating a sample path. In classical dynamic program ming, we proceed by stepping backward in time, where we have to solve equation (2) for each stateSt. Most ADP algorithms proceed by stepping forward in time, following n a particular sample path which we index byω, wheren n indexes our iteration counter. We letWt(ω)be the infor mation that arrives between the decision made at timet−1 n and the decision made at timet. If we make decisionx t at timetduring iterationn, then our next state is given by equation (1). The second element of ADP is how we make decisions. Most ADP algorithms solve an equation of the form   n n n−1n ¯ x=arg maxC(S,xt) +γE{V(St(3) t t t+1+1)|St} x∈X t t

M whereSt+1=S(St,xt,Wt+1)whereWt+1is a random vari n−1 ¯ able at timet. Here,V(St+1)is some sort of approxi t+1 mation of the value of being in stateSt+1(more on this in section 4). Even if we have some sort of approximation for the value function, equation (3) may still be very hard to solve. First, we assume we can compute the expectation. If the random variable is simple (for example, a binomial random variable indicating the arrival of a customer, or the random change of a scalar stock price), then this may be easy.

But this problem may have a complex vector of random variables, making the expectation intractable. We can overcome this problem using the concept of a x postdecision state, denotedSpostdecision state is. The t the state immediately after we make a decision, but before any new information has arrived. We assume we have a x M,x nSgives us the postdecision functiot=S(St,xt)that state as a function ofStandxt. Now assume that we have x ¯ estimatedVt(S)In this case,around the postdecision state. t equation (3) becomes   n n n−1 ¯ x) + x=arg maxC(St,tγV(St+1).(4) t t+1 xt∈Xt

Now, the decision problem no longer has to deal with an expectation. We note, however, that the structure of a postdecision state is highly problemdependent. There are problems where the postdecision state is much simpler than the predecision state, and others where it does not offer any advantage (but it never makes the problem more complicated). The next challenge is making a decision. There are communities which assume that there is a ﬁnite (and small) set of actions which can be easily enumerated and evaluated. In operations research, there are many problems wherext is a vector, of possibly very highdimensionality. For these problems, we need to draw from a vast array of optimiza tion algorithms, ranging from linear, nonlinear and integer programming through the entire family of metaheuristics. After we make a decision, we often update the value function approximation using information derived from the

optimization problem where we made a decision (in other variations of ADP, the value functions are only updated n after completing a forward trajectory). Ifvˆ is the value of t n being in stateS, we can update the value of being in this t state using

n n n−1n n ¯ ¯ V(S) Vt t) = (1−αn−1)v. (St t+αn−1ˆ t

(6)

Equation (6) is updating the value function approximation n around the predecision stateS. This updating scheme is t using a standard lookuptable representation, where we have a value of being in each discrete states. Alternatively, we can update the value around the postdecision state using

n x,n n−1x,n n ¯ ¯ V(S) = (1−αn−1)V(S) +αn−1vˆ. t−1t−1t−1t−1t

(7)

n Note that we are usingvupdate the value functionˆ to t x,n around the previous postdecision stateS. t−1 The ﬁnal element of an ADP algorithm is the simulation n n fromSto the next stateSusing the transition function. t t+1

4

Designing value function approximations

Typically the ﬁrst introduction to approximate dynamic programming uses simple lookuptable representations for value functions. To use a lookuptable representation, we assume that the state spaceShas been discretized into a series of elements which we number(1,2, . . . ,|S|). We ¯ then assume we have an estimateV(s)for each states∈S. We estimate the value of being in each state using (6). This strategy appears to avoid the need to loop over all the states (as is required when we solve Bellman’s equation backward in time as in equation (2)). However, it replaces the need to enumerate the states with the need to estimate the value of being in any state thatmightbe visited. The central challenge with any ADP algorithm is ﬁnding a value function approximation which can be represented using the fewest possible number of parameters. With a lookuptable representation, there is one parameter for each state (that is, we have to estimate the value of each state). A common way of reducing the number of parameters is to aggregate the state space. This is particularly useful for problems with a small number of continuous dimen sions. For example, (Nascimento and Powell 2008) describe an application for managing the cash balance for mutual funds. The state variable has three continuous dimensions: the amount of cash on hand, the return on investments and interest rates. Using a ﬁne discretization, an exact solution of Bellman’s equation takes about three days. Coarser dis cretization quickly reduce this, but introduce discretization errors. From the origins of dynamic programming, it has been recognized that the most promising way to overcome the challenge of approximating value functions is through the

Powell

use of functional approximations (Bellman and Dreyfus 1959). Perhaps the modern era for studying value function approximations can be traced to (Schweitzer and Seidmann 1985), but major references include (Tsitsiklis and Van Roy 1996) and (Bertsekas and Tsitsiklis 1996). This line of research has used the vocabulary of approximation theory which assumes that we are given a family ofbasis functions (φf(S))f∈F. A basis function is also referred to asfeature. The functionφf(S)is assumed to extract information from the state variableSthat helps explain the behavior of the value function. The simplest class of function approximations are linear in the basis functions, which is to say that

¯ V(S)≈V(S) =θfφf(S). ∑ f∈F

(8)

If there existsθsuch thatV(S) =∑f∈Fθfφf(S), then we say that the functionsφf(S)In practice, this isform a basis. generally not the case (or is unveriﬁable). In the language of statistical regression, we would refer to the functions φf(S)as explanatory variables which are often represented asXf=φf(S). We would write a linear regression model as

∑ Y=θfXf+ε f∈F

whereYwould be our observation of the value of being in a state, andεexplains any discrepancy between the observed values and the regression estimate. Functions with the form given in equation (8) are re ferred to as linear approximations because they are linear in the parameters. However, it is also important to under stand the structure of the basis functions themselves. For example, consider a resource allocation problem whereRt i is the number of resources of typeiat timet. We could construct a value function approximation that is linear in the resource variable, giving us

¯ V(R) =θiRt i. ∑ i

Such an approximation assumes that the value of resources of typeiis a constant given byθi. For many resource allocation problems, using an approximation that is linear in the number of resources offers particularly nice structure, often allowing problems to be decomposed for the purpose of parallel or distributed computation. However, many problems exhibit nonlinear behavior, and a common strategy is to use a quadratic polynomial such as   2 ¯ R ∑ V(R) =θ1iRt i+θ2ii t . i

Some researchers assume almost automatically that nonlin ear functions are always better than linear ones. The reality is that it depends on what you want to achieve with a value function approximation. It is very important to understand what you want a value function to do for you. Start by asking  what would go ¯ wrong if you useVt(St) =0? In our work, we have worked with two classes of resource allocation problems that arise in transportation. One class involves the management of freight cars where it is important to determinehow many freight cars to move to a location (see (Powell and Topaloglu 2005) for an illustration). For such a setting, a value function that is linear in the resource state would not be able to help with the decision of how many to move. By contrast, (Simao, Day, George, Gifford, Nienow, and Powell 2008) describes a ﬂeet management problem arising in truckload trucking, where the challenge is to determinewhat typeof driver to assign to a load. For this setting, a value function that is linear in the resource state worked perfectly well. Another common tendency in the literature is the as sumption that if you need a nonlinear function, then the function should be some sort of loworder polynomial. If an application involves managing small numbers of discrete resources (locomotives, aircraft, small numbers of expen sive equipment), then a polynomial is unlikely to work well. Such problems are better suited to piecewise lin ear functional approximations ((Godfrey and Powell 2001), (Topaloglu and Powell 2006)). There are many resource allocation problems which require a nonlinear, nonseparable function to capture the interaction between different resources. The most popular technique emerged from within the stochastic programming community as Benders decomposition. This technique ap proximates the value of the future using a series of cuts. The optimization problem is typically written   maxctxt+z(9) xt∈Xt

subject to

T z≤αt+1(vˆt+1) + (βt+1(vˆt+1))xt

∀vˆt+1∈Vt+1.(10)

Here, the setVt+1is a set of vertices that have been generated as the algorithm progresses by using information from the dual of the optimization problem at timet+1. For detailed descriptions of this technique, see (Higle and Sen 1991) and (Sen and Higle 1999). There are many applications where the state variable is a mixture of different measurements. For example, an appli cation involving the testing of cardiovascular patients might involve biometric measures such as weight, blood pres sure and cholesterol, behavioral indicators such as smoking and exercise, and family history. The question is, are all

Powell

these variables important? (Fan and Li 2006) describe the challenges of feature selection for highdimensional appli cations, and (Tsitsiklis and Van Roy 1996) describe the use of featurebased methods in approximation dynamic pro gramming (without addressing the problem of choosing the features). The special challenge of approximate dynamic programming is the challenge of choosing features as the algorithm progresses. The key insight here is very simple. Before designing a value function approximation, it is extremely important that you understand the properties of your problem, and the behavior you would like to achieve with your approximation. You then need to design a value function which reasonably captures the shape of the true value function, and which will give you the behavior that you are looking for.

5

Fitting a value function approximation

One method, albeit a clumsy one, for ﬁtting a value function approximation is to take observations of a series of states m n (S)and the observed value of being in these states m=1 m n (vˆ), and use this data to ﬁt the parameters of a regression m=1 model. This is typically referred to as batch regression, and becomes very clumsy as the number of iterations grow. Most applications of ADP use some form of recursive estimation. The simplest arises with lookuptable represen tations which use the updating formula given in equation (3). Here, the only decision is the choice of stepsize, which we address in greater depth in section 7. When we use ba sis functions, a popular method for updating the parameter vectorθis the stochastic gradient equation given by

There are many different methods for choosing the stepsize for the lookup table in equation (3), but they all share the property that 0<αn≤1. In equation (11), we introduce a scaling problem, since the units ofθand the units of n−1n ¯ the error(V(θ)−vˆ), as well as the basis functions themselves, are different. As a result, we have to decide how to scale the stepsize. This issue is fairly signiﬁcant. Depending on the units of the error and the basis functions, −3 you might need to limit the stepsize to a number under 10 3 or 10 . If you scale the stepsize improperly, convergence will either be impractically slow, or completely unstable. One way to overcome the scaling problem is to make multiple observations of the value of being in a state and then use standard batch estimation techniques (see (Bertazzi, Bertsekas, and Speranza 2000) for an illustration). But a

more elegant strategy is to use recursive least squares. This is accomplished by updating the parameter vectorθusing

n−1 Bis anF+1 byF+1 matrix (whereFis the number of features) which is updated recursively using

1 n n−1n−1T nn n −1 B=B−(Bφ(φ)B). n γ

n γis a scalar computed using

n γ

=

n T n−1n 1+ (x)B x.

One problem with recursive least squares is that it has the effect of equally weighting all prior observations. In approximate dynamic programming, we have to deal with the fact that the observations of the value of being in a particular state evolve higher (or possibly lower) as the value of being in a state reﬂects the future trajectory. We handle this issue by modifying the RLS equations slightly using (see (Powell 2007), section 7.3.3)

These equations are the same as the original recursive least squares if we setλ=1.λplays the role of a discount factor which determines how much weight we want to put on past data. One way to determine the best value ofλis to simply try different values starting at 1 and then decreasing. Another way is to use the extensive literature on this topic for setting step sizes. If you have a stepsize formula that you are comfortable with, a rough relationship between stepsize

Powell

andλis given by   1−αn λn=αn−1. αn

It is important to note that the ADP algorithm presented V in ﬁgure 3, where the functionU(∙)refers to the updating of a set of basis functions, has not been shown to converge. In fact, (Bertsekas 1995) provides counterexamples where the algorithm actually diverges. The problem is that recursive least squares is designed to deal with stationary forms of noise, but if we change the value function and allow this to change the policy, then it is like ﬁtting a function to a moving target. (Tsitsiklis and Van Roy 1997) proves convergence if we hold the policy constant. This means locking in the value function approximation, which eliminates the problem of ﬁtting to a moving target.

6

Values vs. slopes

The standard way of describing an ADP algorithm involves n computing a valuevis an estimate of the value ofˆ which t n being in stateS. This is the style used in the algorithm in t ﬁgure 3. There are many problems, however, where it is more natural to use the derivative of the value function rather than the value function itself. This is particularly true of problems that involve managing resources, such as those that arise in inventory planning, supply chain management, demand management and the management of natural resources. For these problems, it is natural to letRt abe the amount of resources with attributea∈A(amay be a vector) at timet, and letRt= (Rt a)a∈Abe the resource state vector. Now let xt adbe a decision to act on resources with attributeawith a decision of typed∈D(dmay represent buying, selling, moving from one location to another, repairing, modifying). We would then solve the optimization problem   n n n−1x ¯ x=arg maxC(R,xt) +γV(R) t t t t n x∈X t t

n where the constraint setXwould include the constraint t

n xt ad=R. ∑t a d∈D

(13)

Of course, there may be other constraints. Many resource allocation problems are naturally solved as mathematical programs, where it is important to capture the slope of the value function (adding a constant does not change the optimal solution). If the optimization problem is a linear or n nonlinear program, we obtain a dual variableveachˆ for t a constraint (13). In some cases, we might even estimate n vˆ using numerical derivatives. In this case, instead of t a n obtaining a single scalar valuevthe value of beingˆ giving t n n in stateS, we obtain a vector(vˆ)ch can be used t t a a∈Awhi