rotate for the best view
Sakana AI
CEDAR
Complex-systems Exploration and Design via Agent-Orchestrated Refinement
Agent-Orchestrated Tree Search for Goal-Directed Optimization of Complex Systems
Yingtao Tian  /  Sakana AI  /  [email protected]  /  @alanyttian
Accepted at ALIFE 2026 (The 2026 Conference on Artificial Life)
goal = "grow population stably"
The pitch

What if we could ask for a better world, in plain language?

World Dynamics (Forrester, 1971): a classic hand-designed model of population, resources, and pollution. Now just ask:

Balance population, resources, and environment by optimizing to (1) maximize population growth, (2) minimize the resource depletion rate, and (3) minimize the pollution accumulation rate. Seek the best trade-off where the population grows sustainably...
  • No equations to derive. No DYNAMO or STELLA to learn. No manual trial-and-error.
  • CEDAR takes this sentence and autonomously evolves the system: ~30 minutes, $10 to $50 per run.
This talk: how LLM agents + tree search make that work, and what it offers artificial life.
        *       WORLD DYNAMICS W5

1       L       P.K = P.J + (DT)*(BR.JK - DR.JK)
1.1     N       P = PI
1.2     C       PI = 1.65E9

2       R       BR.KL = P.K * CLIP(BRN, BRN1, SWT1, TIME.K) * BRFM.K * BRMM.K * BRCM.K * BRPM.K
2.2     C       BRN = 0.04
2.3     C       BRN1 = 0.04
2.4     C       SWT1 = 1970

3       A       BRMM.K = TABHL(BRMMT, MSL.K, 0, 5, 1)
3.1     T       BRMMT = 1.2 / 1 / 0.85 / 0.75 / 0.7 / 0.7

4       A       MSL.K = ECIR.K / ECIRN
4.1     C       ECIRN = 1

5       A       ECIR.K = CIR.K * (1 - CIAF.K) * NREM.K / (1 - CIAFN)

6       A       NREM.K = TABLE(NREMT, NRFR.K, 0, 1, 0.25)
6.1     T       NREMT = 0 / 0.15 / 0.5 / 0.85 / 1

7       A       NRFR.K = NR.K / NRI

8       L       NR.K = NR.J + (DT)*(-NRUR.JK)
8.1     N       NR = NRI
8.2     C       NRI = 900E9

9       R       NRUR.KL = P.K * CLIP(NRUN, NRUN1, SWT2, TIME.K) * NRMM.K
9.1     C       NRUN = 1
9.2     C       NRUN1 = 1
9.3     C       SWT2 = 1970

        NOTE    EQUATION 42 CONNECTS HERE FROM EQ. 4 TO EQ. 9

10      R       DR.KL = P.K * CLIP(DRN, DRN1, SWT3, TIME.K) * DRMM.K * DRPM.K * DRFM.K * DRCM.K
10.2    C       DRN = 0.028
10.3    C       DRN1 = 0.028
10.4    C       SWT3 = 1970

11      A       DRMM.K = TABHL(DRMMT, MSL.K, 0, 5, 0.5)
11.1    T       DRMMT = 3 / 1.8 / 1 / 0.8 / 0.7 / 0.6 / 0.53 / 0.5 / 0.5 / 0.5 / 0.5

12      A       DRPM.K = TABLE(DRPMT, POLR.K, 0, 60, 10)
12.1    T       DRPMT = 0.92 / 1.3 / 2 / 3.2 / 4.8 / 6.8 / 9.2

13      A       DRFM.K = TABHL(DRFMT, FR.K, 0, 2, 0.25)
13.1    T       DRFMT = 30 / 3 / 2 / 1.4 / 1 / 0.7 / 0.6 / 0.5 / 0.5

14      A       DRCM.K = TABLE(DRCMT, CR.K, 0, 5, 1)
14.1    T       DRCMT = 0.9 / 1 / 1.2 / 1.5 / 1.9 / 3

15      A       CR.K = P.K / (LA * PDN)
15.1    C       LA = 135E6
15.2    C       PDN = 26.5

16      A       BRCM.K = TABLE(BRCMT, CR.K, 0, 5, 1)
16.1    T       BRCMT = 1.05 / 1 / 0.9 / 0.7 / 0.6 / 0.55

17      A       BRFM.K = TABHL(BRFMT, FR.K, 0, 4, 1)
17.1    T       BRFMT = 0 / 1 / 1.6 / 1.9 / 2

18      A       BRPM.K = TABLE(BRPMT, POLR.K, 0, 60, 10)
18.1    T       BRPMT = 1.02 / 0.9 / 0.7 / 0.4 / 0.25 / 0.15 / 0.1

19      A       FR.K = FPCI.K * FCM.K * FPM.K * CLIP(FC, FC1, SWT7, TIME.K) / FN
19.1    C       FC = 1
19.2    C       FC1 = 1
19.3    C       FN = 1
19.4    C       SWT7 = 1970

20      A       FCM.K = TABLE(FCMT, CR.K, 0, 5, 1)
20.1    T       FCMT = 2.4 / 1 / 0.6 / 0.4 / 0.3 / 0.2

21      A       FPCI.K = TABHL(FPCIT, CIRA.K, 0, 6, 1)
21.1    T       FPCIT = 0.5 / 1 / 1.4 / 1.7 / 1.9 / 2.05 / 2.2

22      A       CIRA.K = CIR.K * CIAF.K / CIAFN
22.1    C       CIAFN = 0.3

23      A       CIR.K = CI.K / P.K

24      L       CI.K = CI.J + (DT)*(CIG.JK - CID.JK)
24.1    N       CI = CII
24.2    C       CII = 0.4E9

25      R       CIG.KL = P.K * CIM.K * CLIP(CIGN, CIGN1, SWT4, TIME.K)
25.1    C       CIGN = 0.05
25.2    C       CIGN1 = 0.05
25.3    C       SWT4 = 1970

26      A       CIM.K = TABHL(CIMT, MSL.K, 0, 5, 1)
26.1    T       CIMT = 0.1 / 1.0 / 1.8 / 2.4 / 2.8 / 3

27      R       CID.KL = CI.K * CLIP(CIDN, CIDN1, SWT5, TIME.K)
27.1    C       CIDN = 0.025
27.2    C       CIDN1 = 0.025
27.3    C       SWT5 = 1970

28      A       FPM.K = TABLE(FPMT, POLR.K, 0, 60, 10)
28.1    T       FPMT = 1.02 / 0.9 / 0.65 / 0.35 / 0.2 / 0.1 / 0.05

29      A       POLR.K = POL.K / POLS
29.1    C       POLS = 3.6E9

30      L       POL.K = POL.J + (DT)*(POLG.JK - POLA.JK)
30.1    N       POL = POLI
30.2    C       POLI = 0.2E9

31      R       POLG.KL = P.K * CLIP(POLN, POLN1, SWT6, TIME.K) * POLCM.K
31.1    C       POLN = 1
31.2    C       POLN1 = 1
31.3    C       SWT6 = 1970

32      A       POLCM.K = TABHL(POLCMT, CIR.K, 0, 5, 1)
32.1    T       POLCMT = 0.05 / 1 / 3 / 5.4 / 7.4 / 8

33      R       POLA.KL = POL.K / POLAT.K

34      A       POLAT.K = TABLE(POLATT, POLR.K, 0, 60, 10)
34.1    T       POLATT = 0.6 / 2.5 / 5 / 8 / 11.5 / 15.5 / 20

35      L       CIAF.K = CIAF.J + (DT/CIAFT)*(CFIFR.J * CIQR.J - CIAF.J)
35.1    N       CIAF = CIAFI
35.2    C       CIAFI = 0.2
35.3    C       CIAFT = 15

36      A       CFIFR.K = TABHL(CFIFRT, FR.K, 0, 2, 0.5)
36.1    T       CFIFRT = 1 / 0.6 / 0.3 / 0.15 / 0.1

37      A       QL.K = QLS * QLM.K * QLC.K * QLF.K * QLP.K
37.1    C       QLS = 1

38      A       QLM.K = TABHL(QLMT, MSL.K, 0, 5, 1)
38.1    T       QLMT = 0.2 / 1 / 1.7 / 2.3 / 2.7 / 2.9

39      A       QLC.K = TABLE(QLCT, CR.K, 0, 5, 0.5)
39.1    T       QLCT = 2 / 1.3 / 1 / 0.75 / 0.55 / 0.45 / 0.38 / 0.3 / 0.25 / 0.22 / 0.2

40      A       QLF.K = TABHL(QLFT, FR.K, 0, 4, 1)
40.1    T       QLFT = 0 / 1 / 1.8 / 2.4 / 2.7

41      A       QLP.K = TABLE(QLPT, POLR.K, 0, 60, 10)
41.1    T       QLPT = 1.04 / 0.85 / 0.6 / 0.3 / 0.15 / 0.05 / 0.02


        NOTE    EQUATION 42 LOCATED BETWEEN EQ. 4 AND 9.

42      A       NRMM.K = TABHL(NRMMT, MSL.K, 0, 10, 1)
42.1    T       NRMMT = 0 / 1 / 1.8 / 2.4 / 2.9 / 3.3 / 3.6 / 3.8 / 3.9 / 3.95 / 4

        NOTE    INPUT FROM EQN. 38 AND 40 TO EQN. 35

43      A       CIQR.K = TABHL(CIQRT, QLM.K / QLF.K, 0, 2, 0.5)
43.1    T       CIQRT = 0.7 / 0.8 / 1 / 1.5 / 2

43.5    C       DT = 0.2
43.6    C       LENGTH = 2100
43.7    N       TIME = 1900

        NOTE
        NOTE    CONTROL CARDS
        NOTE

44      A       PRTPER.K = CLIP(PRTP1, PRTP2, PRSWT, TIME.K)
44.1    C       PRTP1 = 0
44.2    C       PRTP2 = 0
44.3    C       PRSWT = 0

45      A       PLTPER.K = CLIP(PLTP1, PLTP2, PLSWT, TIME.K)
45.1    C       PLTP1 = 4
45.2    C       PLTP2 = 4
45.3    C       PLSWT = 0

        PLOT    P=P(0,8E9)/POLR=2(0,40)/CI=C(0,20E9)/QL=Q(0,2)/NR=N(0,1000E9)
        PLOT    FR=F,MSL=M,QLC=4,QLP=5(0,2)/C1AF=A(.2,.6)
        RUN     ORIG

The established alternative: the same model as 178 lines of DYNAMO (Forrester, 1971).

Background

Complex systems: where feedback creates emergence

  • Nonlinear, feedback-driven models: global behavior emerges from component interactions
  • Core objects of study in artificial life; used across biology, epidemics, economics, policy
  • States are meaningful stocks: populations, resources, pollution; not hidden units

The catch. Predicting how feedback structure produces emergent behavior is a central open problem in ALife.

So designing a system to exhibit a target emergent behavior is exceptionally hard.

Formalisms include agent-based models, cellular automata, discrete-time dynamic graphs; this work uses ODEs.

Background

How the field builds them: ODEs, Euler, and two old languages

The object
dx/dt = f(x, t), x(t0) = x0, x in R^n

State vector x of meaningful stocks (populations, resources), vector field f, initial values x0 at t0. When f follows a known, simple form, analytical techniques such as the Laplace transform apply.

In practice
dx/dt = f(x, t); Euler discretization: x(t+dt) = x(t) + dt * f(x(t), t)

With nonlinear feedback the field integrates with the first-order Euler method, requiring only that f be computable. Many complex systems admit no analytical solution.

Where the field uses them

global dynamicspandemic diffusionsocial simulationsbiological systemswar gameseconomicsthermodynamics

Systems thinking that supports policy design and strategic decision-making.

Where f has lived: two old languages

DYNAMO 1960s syntax; a level equation with time subscripts
L P.K = P.J + (DT)*(BR.JK - DR.JK)
STELLA a proprietary visual interface: models drawn, not written

Outdated syntax or proprietary visual interfaces: both limit their usability with LLMs.

The problem

Three barriers: expert-defined structure, opaque emergence, laborious tools

01

Expert-defined structure

Modeling still requires expert-defined variables and relationships: someone must already know which stocks matter and how they connect.

Ford 1998 / Berard 2010 / Zagonel 2002

02

Opaque emergence

The relationship between structure and emergent behavior is often unclear. Goal-directed design = inverting an opaque map.

Schoenberg 2019 / Guneralp 2004 / Barlas 1996

03

Laborious tools

Established languages require labor-intensive workflows; feedback relationships navigated by hand. This limits adoption exactly where insight is needed most.

MIT roadmaps 1998 / Hines 1996 / Sterman 2000

Opportunity: LLM agents are strong at code, planning, and reasoning; MCTS gives their search structure.
Related work

Two lineages meet: MCTS with strong models, and LLMs as evolutionary operators

Tree search with a strong model

  • Games: AlphaGo (2016), AlphaGo Zero (2017), AlphaZero (2017), MuZero (2020)
  • Algorithm discovery: AlphaTensor (2022), AlphaDev (2023)
  • Architecture search: LLMatic (2024)
  • With LLMs: LATS, LLM-powered value functions and self-reflection (Zhou 2024)
  • AB-MCTS, "Wider or Deeper?": LLM-powered node selection and expansion (Inoue 2025)
  • Planning and reasoning: LLMs as common-sense policy priors; guided traversals of knowledge graphs

LLMs as evolutionary operators in ALife

  • Evolution through Large Models (Lehman et al. 2023): language-guided program edits replace random mutation
  • From Text to Life (Nisioti et al. 2024): LLMs and ALife as a reciprocal pair
  • Giving Simulated Cells a Voice, ZapGPT (Le et al. 2025): evolved prompts steer simulated cellular systems
  • ASAL (Kumar et al. 2025): foundation models search for artificial life
  • AI Scientist-v2 (Yamada et al. 2025): automated scientific discovery
  • Evolving agents to falsify hypotheses of biological self-assembly (Srinivasan et al. 2025)
CEDAR sits at the join: Editor as variation operator, Judge as fitness function, the tree as the population.
Method

CEDAR in one picture

CEDAR architecture: goal and system feed an MCTS loop with LLM Editor and Judge
A goal + an initial system in restricted Python. The MCTS tree grows step by step. Each step: select a node & strategy, expand with the LLM Editor, run, judge. Each node keeps its system, record, score, and written analysis.
Method: algorithm

The loop in eight lines: select, expand, run, judge

  1. 1(A0, S0) <- LlmJudge(P0, Run(P0), G), P* <- P0, S* <- S0root 0
for i = 1 to N:
  1. 2v <- argmax over V_exp of Score(v)select node to expand
  2. 3s ~ Uniform(S)sample expansion strategy
  3. 4P_u <- LlmEditor(P_v, A_v, s, G)expand
  4. 5R_u <- Run(P_u)execute
  5. 6(A_u, S_u) <- LlmJudge(P_u, R_u, G)evaluate
  6. 7c_v <- c_v + 1; if c_v >= tau: V_exp <- V_exp minus {v}add node u; count; drop
  7. 8if S_u > S*: P* <- P_u, S* <- S_utrack the best; return P*

Symbols, reused from here on

  • P the system, a restricted-Python program; G the goal in natural language
  • R execution record: values of all variables at each timestamp
  • A textual analysis: qualitative feedback and potential improvements
  • S bounded numerical score: how well P satisfies G
  • cv expansion count of node v; tau its threshold
  • Vexp expandable set: internal nodes stay in it until cv reaches tau
  • Each node keeps (P_u, R_u, A_u, S_u)

Everything interesting hides in Score, LlmEditor, LlmJudge: the next three moves.

Method: move 1

Represent systems as runnable Python, not a DSL

Graph, Python code, and computation table of a population model
Feedback structure as a graph... ...is the same object as plain Python with domain primitives... ...whose run traces every variable at every step.
  • One representation unifies DYNAMO and STELLA models
  • Restricted subset + domain primitives + inline docs
  • LLMs already speak Python fluently
  • Editing code = editing dynamics: variables, feedback links, equations

Holds all 20 classical systems we study: World Dynamics + 19 from Modeling Dynamic Biological Systems (20 to 69 integrated variables each).

Method: move 1

Four components, from 21 lines to World Dynamics

code-core-mdbs_2_2.py (complete, 21 lines)
1# (1) initialization 
2dt = 0.01
3t0 = 0.0
4tf = 120.0
5K = 100.0
6R = 0.1
7N = 10.08
9t = t0
10while t <= tf + 1e-12:
1112    # (2) intermediate computations
13    carrying_capacity_factor = 1.0 - N / K
14    growth_rate = R * N * carrying_capacity_factor1516    # (3) derivative evaluations
17    dN = growth_rate  # dN = R * N * (1 - N/K)1819    # (4) Euler integration
20    N = N + dt * dN
21    t += dt
code-core-world-dynamics.py (excerpt)
1 init# ====================== BEGIN STATE =========================
# STATE VARIABLES - integrated over time (must define derivatives below)
P = 1.65e9  # population (people) # NECESSARY
NR = 900e9  # natural resources (natural resource units) # NECESSARY
CI = 0.4e9  # capital investment (capital units) # NECESSARY
POL = 0.2e9  # pollution (pollution units) # NECESSARY
CIAF = 0.2  # capital-investment-in-agriculture fraction # NECESSARY
# ======================= END STATE ==========================2 intermediate    # ... about 40 helper lines elided (multipliers, rates, flows) ...3 derivatives    # State derivatives
    dP = BR - DR
    dNR = -NRUR
    dCI = CIG - CID
    dPOL = POLG - POLA
    dCIAF = (1 / 15) * (CFIFR * CIQR - CIAF)4 Euler    # --------------- Euler integration (engine; do not edit) ---------------
    P = P + dt * dP
    NR = NR + dt * dNR
    CI = CI + dt * dCI
    POL = POL + dt * dPOL
    CIAF = CIAF + dt * dCIAF

Extensive comments help humans and LLMs alike; the same four-part shape holds for all 20 systems.

Method: move 1

A small vocabulary and a strict edit contract

Variable types, as declared in the program header
STATE
integrated over time; must have derivatives
INPUTS_T
pure functions of time; cannot depend on STATE
INPUTS_RND
fresh random values each step; cannot depend on STATE
HELPERS
all computed variables, algebraic and intermediate, in dependency order
DERIVATIVES
d/dt for each STATE variable
Predefined primitives include
math
sincosexptanhsqrtlog
random
gaussuniform
table
graph
table lookup with linear interpolation
STELLA-compatible delay/smooth functions
delay fixed lag: the input from delay_time ago
smth1 first-order smooth, STELLA's SMTH1
The edit contract, stated in the program header and repeated in the Editor prompt
  • 1  Change code only between the BEGIN ... / END ... markers.
  • 2  Never touch imports, wrappers, loop structure, Euler integration, or the OUTPUT section.
  • 3  Never change dt, t0, tf, seed in CONFIG.
  • 4  Variables marked # NECESSARY cannot be deleted; HELPERS are free to add, remove, modify, reorder.
Method: move 2

LLM Judge as fitness, LLM Editor as variation

Node expansion: Editor updates the system, it runs, Judge scores and analyzes

Editor (variation operator): structural edits (add/remove state variables, rewire feedback, rewrite equations), guided by strategy, goal, and the parent's analysis.

①→② the Editor writes a new system; running it produces a fresh execution record.

Judge (fitness function): reads the record; returns a bounded score and an analysis that feeds the next edit. A generate-and-evaluate loop, in the spirit of evolutionary computation.

Method: move 2

Inside the prompts: four slots, one shared rubric, two output shapes

LLM JudgeANALYZE SIMULATION RESULTS FOR TREE-BASED OPTIMIZATIONGOAL:               {goal}CURRENT CODE:       {code}SIMULATION RESULTS: {csv_data}TREE CONTEXT:       {tree_context}=== For your reference ===
Format for code in tree context: shows only the differences in
  each reference node compared to current code; lines starting
  with "+" show what the reference node has instead
Consider: how well this variant achieves the goal; performance
  relative to ALL other nodes (calibrated scoring); meaningful
  progress in the search space
SCORING GUIDELINES: ABSOLUTE PERFORMANCE SCORING (depth-constrained)
  Primary Principle: score how well this code achieves the goal,
  regardless of other nodes  7 bands + depth cap, next slide
Use the tree context to keep scoring well-calibrated relative
  to all explored alternatives
=== Task ===REASONING: [a brief summary in the first 200 characters,
  then detailed reasoning about goal achievement]
SCORE: [numerical score based on the scoring guidelines]
LLM EditorSUGGEST CODE MODIFICATIONS FOR TREE SEARCH OPTIMIZATIONGOAL:               {goal}CURRENT CODE:       {code}SIMULATION RESULTS: {csv_data}TREE CONTEXT:       {tree_context}=== For your reference ===
Format for code in tree context: same diff format as the Judge
Focus on: parameters within the marked BEGIN/END edit sections;
  state variables, constants, simulation configuration;
  derivative equations and helper expressions; table values and
  time-dependent inputs; learning from tree context outcomes
When you modify: start from EVERYTHING in CURRENT CODE; change
  only between BEGIN/END markers; do not touch imports, wrappers,
  loop structure, or OUTPUT
Tree Search Strategy: your position in the tree; performance
  patterns; the diversification strategy; other nodes' outcomes
SCORING GUIDELINES: same rubric and depth cap
=== Task ===REASONING: [the modification strategy in the first 200
  characters, then reasoning and expected improvement]
SELF_ASSESSED_SCORE: [numerical score for the expected result]
MODIFIED_CODE: [complete Python, edited only between BEGIN/END]

Tree context carries the analysis and scores of all nodes, including the selected one; the expansion strategy is injected into it.

Method: move 2

Scoring: seven bands, two decimals, a depth-limited ceiling

SCORING SCALE (use 2 decimal places like 7.25, 12.75)
20.00+EXCEPTIONAL performance - far surpasses what the goal was asking for
10.00+VERY GOOD performance - exceeds the goal expectations significantly
8.00-10.00Excellent progress - meets most requirements of the optimization goal
6.00-8.00Good progress - clear advancement with substantial goal achievement
4.00-6.00Moderate progress - measurable improvement and moving toward the goal
2.00-4.00Partial progress - some improvement but far from achieving the goal
0.00-2.00Failed progress - no meaningful progress toward the goal

Primary principle: score how well this code achieves the optimization goal, regardless of other nodes in the tree.

Important constraint
score <= 10.0 + 2.5 * depth

Within this limit, high scores are encouraged when performance truly merits them.

LLM Editor transcript, a node at depth 4
... warranting a score of 14.75-15.25 given the depth constraint of 10.0 + 2.5*4 = 20.0.

Why the tree context is in both prompts

Preliminary studies: without tree context, the expansion process fails to produce meaningful improvements.

Method: move 3

The search tree is a structured population

Generalized UCT selection (upper confidence bound applied to trees)

Score(v) = S_v + alpha * sqrt(ln(c_p+1)/(c_v+1)) * I[c_v < tau] + gamma * Depth(v)
  • exploration (alpha) + depth bonus (gamma) + progressive widening (tau)
  • nodes re-expandable until c_v >= tau, unlike vanilla MCTS

The same loop, in evolutionary vocabulary

MCTSEvolutionary computation
search tree Tstructured candidate population
node u with system P_ucandidate system
LLM Editorvariation operator
LLM Judgefitness function
UCT score, argmax over V_expselection
re-expand until c_v reaches tauniche preservation, unlike vanilla MCTS
Branching keeps many good, different systems alive at once: selection pressure without collapse. Ablation, shown later: MCTS beats linear search.
Method: move 3

Selection is UCT with two twists: progressive widening and a depth bonus

Score(v) = S_v + phi(c_v, c_p, tau) with phi = alpha * sqrt(ln(c_p+1)/(c_v+1)) * I[c_v < tau] + beta * I[c_v >= tau] (progressive widening) + gamma * Depth(v) (depth-based bonus)

Twist 1: progressive widening

alpha adjusts the amount of exploration; tau controls the expansion count. A node is expandable iff v in V_exp and c_v < tau, and CEDAR sets beta = -infinity, so a saturated node leaves the race. The cap "prevents overexpansion in vast action spaces like code modification and expensive LLM calls".

Twist 2: depth bonus

gamma > 0 controls the preference for deeper nodes: every extra level adds gamma to the score, so a promising branch keeps being refined.

Why these two, from the appendix

"high-quality solutions often result from several consecutive refinements among a promising branch, so our choice should favour deeper nodes, cap expansion counts, thus avoiding over-exploring shallow nodes with expensive LLM calls"

In our runs alpha = 1, gamma = 2, set empirically.

Method: move 3

Read formally: the Editor is a transition kernel, the Judge a value function

Eq. 2 / LLM Editor as a learned transition kernel

P_u ~ P_theta(. | P_v, A_v, s, G), where P_theta = LlmEditor_theta, s ~ Uniform(S)
  • a stochastic operator induced by the LLM: a conditional distribution over modified programs
  • "extends LLM-powered transition kernels from linear to tree search"

Eq. 3 / LLM Judge as a learned value function

(A_u, S_u) = R_phi(P_u, R_u, G), R_phi = LlmJudge_phi, S_u = pi_S(R_phi(P_u, R_u, G))
  • "Su constitutes a bounded, noisy reward"; semantic LLM scoring is treated as non-adversarial
  • "UCT remains consistent when reward noise is bounded and non-adversarial" (Lisy 2013; Efroni 2019)
Caveat: asymptotic convergence and regret guarantees for MCTS with LLMs remain open; current theory gives at best partial guarantees.
Setup

Eight expansion strategies, sampled uniformly, injected verbatim

Each expansion draws one strategy uniformly from the fixed set and injects its instruction into the Editor's tree context.

StrategyLLM instruction
breakthroughMake significant, high-impact changes designed to achieve major performance improvements
aggressiveMake bold structural or algorithmic changes
amplifyIdentify and significantly increase the most promising parameters or mechanisms
exploratoryTry completely different parameter combinations
targetedFocus on specific high-impact parameters identified from analysis
contrarianTry approaches opposite to current trends or patterns
balancedMake moderate parameter changes with good risk/reward ratio
conservativeMake small, incremental parameter adjustments
Editor transcript, appendix: The diversification strategy calls for an "EXPLORATORY APPROACH: Try completely different parameter combinations."
Setup

Twenty classical systems, 100 expansions, about thirty minutes

Data

World Dynamics (Forrester 1971) in DYNAMO, plus 19 systems from Modeling Dynamic Biological Systems (Hannon and Ruth) in STELLA, converted into our representation: 20 systems, 20 to 69 integrated variables each.

VariablesMeanMaxRange
Integrated29.46920 to 69
Helpers10.91210 to 12

Two uses: models to optimize toward goals, and ground truths that produce reference records.

Search

  • 20 node selections × 5 new candidates each = 100 expansions per search
  • alpha = 1, gamma = 2, set empirically
  • backends: Claude Sonnet 4.5 and GPT-5.1, default decoding, structured outputs, up to three retries
  • crashed or NaN-valued runs get a low score, so MCTS naturally backtracks

Engineering and cost

  • each LLM call adaptively subsamples the execution record to stay within a context budget L
  • overall O(NL) with N expanded nodes, so large trees and long records scale
  • $10 to $50 per run, about 30 minutes per run
  • runtime primarily bounded by LLM calls, not local computation
Editor and Judge define the transition and evaluation operators: their settings are part of the method.
Results: abstract goal

Experiment 1: one sentence against a web of coupled variables

Balance population, resources, and environment by optimizing to (1) maximize population growth, (2) minimize the resource depletion rate, and (3) minimize the pollution accumulation rate. Seek the best trade-off where the population grows sustainably without depleting resources too quickly or creating excessive pollution. (Important: only change the coefficients in the helper. Do not change any coefficient by more than 50% to prevent variable explosion.)

Why this is hard for World Dynamics, three reasons from the paper:

Cascading effects

With such interdependencies among variables, a single change can trigger cascading effects multiple time steps away.

Competing subgoals

A vague goal decomposes into subgoals that can compete: increasing population typically requires greater resource consumption.

A published Pareto frontier

The baseline is a published system strong enough to sit near a Pareto frontier: pushing one subgoal often comes at the expense of the others.

Dependency graph of the World Dynamics system: state variables, derivatives, and helper variables in a dense web
World Dynamics as a dependency graph: 48 named quantities, one edit cascades everywhere.
Results: abstract goal

The goal is self-conflicting: pushing one objective breaks the others

  • World Dynamics already sits near a Pareto frontier
  • Maximize population only (magenta) ⇒ resources crash, pollution explodes
  • Minimize depletion only (orange) ⇒ population stagnates
Joint improvement of all three subgoals is the real test.
Single-objective optimization: each subgoal alone damages the others
Results: abstract goal

CEDAR finds sustainable worlds: a different one per LLM

MCTS search tree from baseline to optimized system, best path highlighted
Optimized population, resources, and pollution trajectories versus the baseline system
  • The tree (left) steers toward higher Judge scores; best path highlighted
  • Optimized systems (right): population ↑, resources ↑, pollution ↓, all three jointly
  • Claude and GPT-5.1 discover structurally distinct trade-offs (population-first vs. resource-first)
One vague sentence in, a portfolio of qualitatively different sustainable systems out.
Results: abstract goal

Watch the search climb the tree, one strategy at a time

MCTS search tree of the World Dynamics run (Claude): six levels from the baseline root to the best node, best path highlighted

Editor and Judge responses along the best path, LLM-summarized (Table 3 in the paper)

nodeLLM EditorLLM Judge
0(No editor response for root, which is the initial system given as is.)Unsustainable overshoot behavior - 69% resource depletion, 46x pollution increase
1Breakthrough approach - 25-40% efficiency improvements targeting 6-8 scoreSustainable progress - population to 5.46B, 30% resources remaining, controlled pollution
9Exploratory approach - radical efficiency through enhanced capital productivityParadigm shift - 7.0B population, 78% resource conservation, near-zero pollution
11Ultra-aggressive conservation - pushing toward exceptional 9.5+ performanceBreakthrough sustainability - 3.2x population, 36% resource depletion, 90% pollution improvement
17Revolutionary breakthrough - 75% resource reduction, 90% pollution control, 300% capital productivityBest-in-tree performance - 6.3x population, 59% resource conservation, exceptional pollution control
24Extreme efficiency breakthrough - 95% resource conservation, 98% pollution reduction, 15x capital productivityHoly grail achievement - 6.4x population growth with only 19.9% resource depletion
best path: 0 / 3.2 breakthrough1 / 6.8 exploratory9 / 9.2 breakthrough11 / 11.8 aggressive17 / 13.2 exploratory24 / 15.8
Results: interpretability

What the winning edit did, as the Judge reads it

# baseline World Dynamics, before the edit: the four helper tables the winning edit (Claude run, node 24) re-tuned106NRMM = graph(107    MSL, ((0, 0), (1, 1), (2, 1.8), (3, 2.4), (4, 2.9), (5, 3.3), (6, 3.6), (7, 3.8), (8, 3.9), (9, 3.95), (10, 4))108)  # natural-resource-from-material multiplier111CIM = graph(MSL, ((0, 0.1), (1, 1.0), (2, 1.8), (3, 2.4), (4, 2.8), (5, 3)))  # capital-investment multiplier114POLCM = graph(CIR, ((0, 0.05), (1, 1), (2, 3), (3, 5.4), (4, 7.4), (5, 8)))  # pollution-from-capital multiplier115POLAT = graph(116    POLR, ((0, 0.6), (10, 2.5), (20, 5), (30, 8), (40, 11.5), (50, 15.5), (60, 20))117)  # pollution-absorption time

NRMM ↓ down

Resource use per unit of material living standard. Judge: "ultra-low resource usage through NRMM reduction".

POLCM ↓ down

Pollution generated per unit of capital. Judge: "revolutionary pollution control through POLCM reduction".

CIM ↑ up

Capital investment multiplier. Judge: "massive capital productivity increase through enhanced CIM values".

POLAT ↑ up

Pollution absorption time: "POLAT values 2-3x higher than parent nodes, enabling rapid pollution cleanup".

Outcome, in the Judge's words

Population grows from 1.65B to 10.57B (6.4x); natural resources decline only 19.9% (from 900B to 720B); pollution 3.6B units by 2100 (vs 200M baseline), representing a controlled 18x increase.

What the transcripts show

  • The Judge analyzes with balanced focus on the subgoals.
  • The Editor first evaluates overall performance, then fine-tunes individual subgoals, "also attending to unmentioned aspects (e.g., capital productivity)".
  • Score and reasoning are aligned: reasoning helps produce better edits, the score helps node selection, "their roles are complementary".
Results: record fitting

Experiment 2: fit a stochastic record from a bare skeleton

Ground truth (excerpt): a stochastic death rate sampled at each time step CEDAR gets only the record, in the goal, and a bare-minimum skeleton
dt = 0.1  # time step size
t0 = 0.0  # start time
tf = 3500.0  # end time
POPULATION = 2.0  # NECESSARY
SUM_POP = 0.0  # NECESSARY
    BIRTHS = 0.07 * POPULATION
    NOMINAL_DR = (exp(-0.01 * t) * 0.03 + 0.01) * 1 + 0.04 * 0
    DR_DISTRIBUTION = normal(NOMINAL_DR, 0.005 * POPULATION)
    DR_DIST_CONTROL = DR_DISTRIBUTION if (DR_DISTRIBUTION >= 0.01 and DR_DISTRIBUTION <= 1) else 0.01
    DEATH_RATE = ( (DR_DIST_CONTROL if DR_DIST_CONTROL > NOMINAL_DR else NOMINAL_DR) * 1 + 0 * DR_DIST_CONTROL + 0 * NOMINAL_DR )
    DEATHS = DEATH_RATE * POPULATION
    dPOPULATION = BIRTHS - DEATHS

Optuna level 1: no formulae

BIRTH_RATEDEATH_RATE

Two constant rates, no structure

Level 2: simple formulae

BIRTH_RATEDEATH_RATEEFFECTIVE_DEATH_RATE_COEFFMAX_POPULATION

Adds a population-dependent death rate

Level 3: full formulae

BIRTH_RATENOMINAL_DR_EXP_COEFF_TNOMINAL_DR_EXP_SCALENOMINAL_DR_EXP_SHIFTDR_DISTRIBUTION_STD_COEFF_POPULATION

The ground truth's own formulae: pure parameter fitting

Optuna: 100 trials per variant. Metrics: L1 and DTW (via the dtaidistance library), Sakoe-Chiba band w = 250, 7.1% of the 3500 steps, inside the recommended 5 to 10%.

Results: record fitting

CEDAR with no formulae beats Optuna with the full formulae

Task: fit the record of a stochastic population model, starting from a bare skeleton. Optuna gets 100 trials and up to the full ground-truth equations: strictly more prior structure than CEDAR.

MethodFormulaeL1 ↓DTW ↓
Optunanone29.065503.68
Optunasimple26.014927.94
Optunafull3.71477.52
CEDAR (Claude)none3.29757.21
CEDAR (GPT-5.1)none2.22433.13

Without formulae, Optuna collapses to near-constant populations; CEDAR tracks the peaks and dips within ground-truth variability.
Vs. Optuna (full): Claude wins on L1 only; GPT-5.1 wins on both metrics.

Population trajectories: CEDAR follows ground truth; weak baselines flatline
Results: record fitting

The ground truth is itself volatile: CEDAR fits within the seed band

Ground truth trajectories across 10 random seeds with variability band
Overlay of the 10 seed trajectories of the ground truth system

10 random seeds of the ground truth: the stochastic death rate makes the volatility intrinsic; CEDAR's record (previous slide) generally falls within this band.

DR_DISTRIBUTION = normal(NOMINAL_DR, 0.005 * POPULATION)

The death rate is sampled at every time step from a normal distribution parameterized by the current population, so peaks and dips are not in sync across runs: the volatility is an intrinsic property of the system, not an artifact of the optimizer.

Results: record fitting

A second full-formulae run does not close the gap: why parameter fitting trails

MethodFormulaeL1 ↓DTW ↓
Optuna (Run 1)full3.71477.52
Optuna (Run 2)full4.26605.05
CEDAR (GPT-5.1)none2.22433.13

In theory, with full formulae access and enough trials, Optuna could approach the ground truth system's parameters. In practice it does not perfectly match the dynamics. Two factors:

  • The noise floor. Visible in the ground truth itself: peaks and dips are not in sync across runs.
  • A hard landscape for purely numeric search. The parameter space is high-dimensional and sensitive: "small changes can lead to qualitatively different records" through nonlinear feedbacks.
Population trajectories of two full-formulae Optuna runs against the ground truth record
Two full-formulae Optuna runs against the ground-truth record: neither perfectly matches its dynamics.
Results: why MCTS

Near-best nodes of one run: a population, not a point

Distinct near-best population trajectories from one run
Near-best nodes of one record-fitting run: all satisfy the goal along distinct trajectories.
  • Diversity. Nodes within a single run whose scores are close to the best all satisfy the goal, yet follow distinct trajectories; unlike the Optuna baselines, CEDAR avoids collapsing to a single overfitting-like point, which enables better decision-making through sensitivity analysis.
  • Performance. MCTS yields higher-scoring nodes than linear search (next slide).
  • Open-ended discovery. A branching tree, rather than convergence to a single point, preserves structurally distinct high-performing systems, each emphasizing different trade-offs among objectives.
In ALife, exploring a range of emergent behaviors matters alongside optimizing one objective.
Results: why MCTS

Ablation: the tree beats the line, in score and in dynamics

Box plot of node scores: linear search versus CEDAR
Node scores, Linear vs CEDAR: "MCTS attains higher-scoring nodes than linear search."
Population trajectories of linear-search and CEDAR solutions, two each
Population trajectories, Linear S1/S2 vs CEDAR S1/S2: "the resulting population dynamics are smoother and avoid the overfitting-like behavior of linear search."
Tree-based exploration drives CEDAR's performance: MCTS with LLMs is crucial for the gains.
Positioning

Where CEDAR sits among LLM search methods

WorkWhat it searchesWhy it differs
I-MCTS (Liang 2025)AutoML hyperparametersHyperparameters, not iterative temporal dynamics
LATS (Zhou 2024)Discrete task graphsTask graphs, not iterative temporal dynamics
GIF-MCTS, LLM-SRBenchShort sequencesShort sequences vs multi-thousand-step dynamics
EvoPrompt, PromptBreeder, DSPyPromptsNeed demonstrations; none in online exploration
LLMs for system dynamics (Liu 2024; Luo 2025; Liu and Keith 2025)Predictors of behavior unknown to the optimizerSmaller systems: up to 4 variables and 12 steps
CEDAR (ours)Complex systems as runnable Python20 systems, 20 to 69 variables, a 3500-step record

Also nearby: LLMs with MCTS for automated scientific discovery (AI Scientist-v2), artificial life discovery (ASAL), and runnable code for reasoning (Katz 2024).

Same two ingredients, LLM and search; a different object: multi-thousand-step dynamics, no demonstrations.
Discussion

For artificial life: range, access, and a record of why

  • Open-ended exploration. A branching tree preserves structurally distinct emergent behaviors, valuable when the range of behaviors matters, not just one optimum.
  • Accessibility. Natural-language goals + Python representation lower the barrier that DYNAMO/STELLA workflows impose: complex-systems modeling for more domains, faster decisions.
  • Transparency. LLM analyses document how structural edits steer emergent behavior, step by step: a new handle on the structure-to-emergence question.
Evolutionary search over living-system models, with agents as its operators.
Limits & next

Limits, open theory, and what comes next

Limits

  • Judge scores what a same-class LLM edited: circularity risk for abstract goals
  • Trends, not tight statistics; two systems studied in depth
  • Judge rationales are the stated reason for each edit and aid inspection; they are not a verified causal account of how structure produces emergence
  • Convergence guarantees for MCTS with LLMs: open
    Asymptotic convergence and regret guarantees remain open questions; current theory gives at best partial guarantees (e.g., loose verifier-induced upper bounds)

Next

  • Systematic benchmarks vs. classical evolutionary and multi-objective methods
  • When is LLM variation/evaluation necessary, not merely helpful?
  • More systems, more domains

In the appendix

  • Full prompts and rubric
  • System code
  • Complete Judge and Editor transcripts
Ask for the behavior.
Let the agents grow the system.

Questions?

Yingtao Tian  /  Sakana AI  /  [email protected]  /  @alanyttian

Sakana AI
→ or tap right: next / ← or tap left: back / swipe / F fullscreen