Workshop: Dynamic Optimization with Open-Source Tools
A three-part virtual workshop series on dynamic optimization using modern open-source tools. Participants formulate and solve finite- and infinite-horizon dynamic programming problems in Julia, with a running example drawn from natural resource and environmental economics.
This workshop is hosted by the AAEA Land, Water and Environmental Economics section.
- Format: Three online sessions, 1h30 each
- Dates: Sep. 26, Oct. 3, and Oct. 10, 2026
- Time: 2:00 PM to 3:30 PM Central Time (3–4:30 Eastern or 12 to 1:30 Pacific Time)
- Cost: Free, open to AAEA members only
- Registration: Register here by Sep. 23, 2026
Who should attend
The series is aimed at advanced PhD students and at early-career professionals working on dynamic economic problems. You will get the most out of it if you have:
- prior exposure to dynamic optimization theory (i.e., you are familiar with how dynamic problems are set up and solved, and you’ve seen Euler equations, Bellman equations), and
- working familiarity with at least one programming language (R, Python, or Matlab is enough).
Registration
Registration is free and open to AAEA members. You can find more information on becoming a member here: https://www.aaea.org/membership.
Sign up through this form by September 23, 2026. Registering earlier helps, since setup instructions go out about a week before the first session.
A note on what happens to your information: the form collects your name, email, and affiliation. I share the list of registrants with AAEA so that section membership can be verified. It is not used for anything else. The other questions about your current role and experience will help me adjust the sessions to support learning.
Tools
All examples are written in Julia, a high-performance, open-source programming language designed for scientific computing. No prior Julia experience is required; session 1 starts from the language basics.
We will use a few Julia packages offering reliable implementations of useful solution methods. Which package does the work depends on the problem at hand, and part of the goal of this series is learning to tell the difference.
- JuMP is an algebraic modeling language. We formally declare a constrained optimization program in syntax closer to how you typically write math expressions. Then, we hand the problem to a solver and get back a solution and its shadow prices. We use it in Sessions 1 and 3.
- Ipopt is the nonlinear solver behind those models.
- Optim handles the small unconstrained and univariate problems, where setting up a full model would be overhead.
- Much of Session 2, and the inner loop of Session 3, is plain Julia: arrays, loops, and a linear solve.
Program
We will pick an illustrative problem and build it towards more refined versions. For this series, our example will be related to groundwater management with externalities.
Session 1: Optimization in Julia
We introduce the basics of Julia, covering only what we need for the series: arrays, loops, functions, broadcasting, and basic plotting. Then, we formulate a simple static, one-period problem and solve it two ways: once by calling a univariate routine from Optim, and once as a small JuMP model.
Session 2: Dynamic programming on a discrete state
We expand the model to a dynamic, multi-period, deterministic version on a discrete state space and write its Bellman equation. We will cover two versions: a finite- and an infinite-horizon problem. We start with the finite-horizon problem, solving it by backward recursion from a terminal condition. Then, we solve the infinite-horizon problem with value function iteration to a fixed point and then by policy iteration.
Session 3: Continuous state and uncertainty
We modify the problem from session 2 allowing for continuous state and control variables, then add uncertainty. We start with the deterministic version and write the problem as a single optimization program over the full time path in JuMP. Then, we switch to the infinite-horizon version on a grid with interpolation. Finally, we add a random shock to how stock evolves over time (e.g., random rainfall affecting reservoir recharge) and solve the stochastic version of the model.
Software
Everything should run in a GitHub Codespace, a development environment that opens in your browser. Julia and every package used in the series are already installed and precompiled in the workshop image, so that everyone in the room can run the same thing.
You will need:
- A browser.
- A free GitHub account.
That is all. There is no local install, and individual GitHub accounts include a monthly allowance of Codespaces hours that is far more than three 90-minute sessions will use.
If you have a valid .edu email, I highly recommend you sign up for GitHub using your university email and request the GitHub Education benefits. It will give you a bunch of free add-ons, including more compute hours.
If you prefer to run the materials on your local computer instead of on the cloud, there will be instructions on how to install all the dependencies.
Before the first session
Registered participants will receive setup instructions about a week in advance. The whole of it is:
- Create a GitHub account, if you do not have one.
- Open a Codespace on the workshop repository from the link in the instructions.
- Run a quick test to confirm the environment works.
This takes a few minutes. Please do it before Session 1. If something goes wrong, come anyway; we hold time at the start of Session 1 for exactly this.
Materials
Exercises follow a fill-in-the-blank format: the setup and the reporting code are given, and you write the lines where the economics lives. Complete solutions are available from the start, so no one gets stuck behind a missing line. Each session ends with an optional “take it further” set of extensions that pick up where the session stopped.
Slides, code, and exercises will be posted here after each session.
Questions
Email me at dcardoso@illinois.edu. Please include “DynOpt workshop” in the subject line.
This workshop is supported by the AAEA Trust and addresses the following items of the AAEA Access Task Force: Year-Round Virtual Programs and Increasing Networking and Mentorship.
