SimOptDecisions

A Julia framework for simulation-based decision analysis under uncertainty

Author

Doss-Gollin Lab @ Rice CEVE

WarningWork in Progress

This package is under active development and the API may change.

What is SimOptDecisions?

SimOptDecisions helps you find good decision strategies when the future is uncertain.

You provide a simulation model and a parameterized policy. The framework runs your model across many possible futures, aggregates the results, and searches for policy parameters that perform well.

It’s useful when you can simulate outcomes but can’t solve for optimal decisions analytically.

Key Vocabulary

Term What it means
Config Fixed parameters that don’t change across scenarios
SOW “State of the World” — one possible future (your uncertain parameters)
Policy A decision rule with tunable parameters
Action What the policy decides at each timestep
State Your model’s internal state that evolves over time
Outcome Result of one simulation
Metric Summary statistic across many simulations

How It Works

┌──────────────────────────────────────────────────────────────┐
│                        You define                            │
├──────────────────────────────────────────────────────────────┤
│  Types: Config, SOW, State, Action, Policy                   │
│  Callbacks: initialize, get_action, run_timestep,            │
│             time_axis, finalize                              │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────┐
│                   Framework handles                          │
├──────────────────────────────────────────────────────────────┤
│  simulate(config, sow, policy)     → run one scenario        │
│  evaluate_policy(prob, policy)     → run across many SOWs    │
│  optimize(prob, backend)           → search for best params  │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
                     ┌────────────────┐
                     │  Pareto Front  │
                     └────────────────┘

Installation

Requires Julia 1.10 or later.

using Pkg
Pkg.add(url="https://github.com/dossgollin-lab/SimOptDecisions.jl")

Next Steps

Tutorial — Learn SimOptDecisions through a complete worked example (house elevation under flood risk)

Quick Reference — Checklist of types and callbacks to implement