SCENARIOS / SC-016 / THERMOSTAT
SC-016 Continuous Control

Thermostat

A continuous-state HVAC MDP — real-valued temperature, threshold control, noisy dynamics.

Async Tick Observations FSM
COMFORT 20° TEMP HEAT COAST
View replay
SC-016 / SCHEMATICContinuous Control
Clock 100 Hz tick
Update Asynchronous
State Continuous (float)
Comfort band 19–22°
Control Threshold @ 20°
OVERVIEW

A continuous-state Markov decision process for HVAC control. A room's temperature is a floating-point measure, not a discrete state. Each cycle the controller heats if the temperature is at or below the threshold and coasts otherwise; the heater adds a normally-distributed gain and the weather subtracts a normally-distributed loss, so the trajectory drifts continuously. Comfort and energy are tracked as separate reward channels.

Shows the engine handling continuous state and distribution-valued updates, not just discrete transitions. The two independent reward channels let you study the comfort-versus-energy trade-off offline, directly from the exported room rows.

VISUALIZATION

A live replay of a simulation run — scrub, step and explore.

Control replay — temperature trace, comfort band and energy cost FULLSCREEN ⤢
TRAITS
Async
Independent, event-driven timelines
Tick
Discrete fixed-step time
Observations
Emits structured agent observations
FSM
Entities are finite-state machines
SCHEMA

Linked tables with guaranteed referential integrity.

TABLECOLUMNSDESCRIPTION
room ID, temperature, comfort_reward, energy_cost, current_state One row per room: the real-valued temperature and the separate comfort-reward and energy-cost accumulators.
LIVE API

Generated REST endpoints. Also exposed as MCP tools.

POST /scenarios/thermostat/experiments Seed a new set of rooms
POST /scenarios/thermostat/experiments/{eid}/run Advance N control cycles
GET /scenarios/thermostat/experiments/{eid}/entities/room Read room temperatures and rewards
GET /scenarios/thermostat/experiments/{eid}/events Append-only event log
GET /scenarios/thermostat/experiments/{eid}/dataset Download the exported dataset
SEMANTIC LAYER

OSI-compatible definition, emitted with the dataset.

# thermostat.osi.yaml — emitted automatically
semantic_model:
  name: "thermostat"
  source: "duckdb://thermostat.db"
  entities:
    - name: room
      primary_key: id
  dimensions:
    - name: state
      type: categorical
    - name: t
      type: time
  measures:
    - name: row_count
      agg: count
    - name: active
      agg: sum
      filter: "state = 'ACTIVE'"