Days Without Strife — Planner Optimizer

Game
Starting resources
Tradeable into (Trade Goods convert 1-for-1 for scoring)
Cities

The name is the city's unique identifier — it labels the output plan and is what an agent's "forced city" refers to. Upgrades are the ones already installed at the start; the available choices follow the city's type. Adjacent cities lists neighbours by name (adjacency is symmetric); an Industrialist Governor grants free Infrastructure to its city and every adjacent one.

Agents

Pick a known agent; its governor behaviour is implicit and shown in the Effect column. The name identifies it and is what a forced city refers back to. All effects apply while the agent is Governor of a city (at most one city per turn).

Objective — scoring terms

Each term scores a resource (or renown) at the end of a turn (blank turn = final turn). For a log term, write a JS expression that evals to a one-argument function, e.g. (x) => Math.log2(x + 1). It is called over amounts 0..max_resource in the browser to build the lookup table.

Resource constraints