OODA Coefficients Reference
Complete catalog of every tunable coefficient in the OODA Loop System
(Feature 032). All coefficients live in the OODADefines class within
src/babylon/config/defines.py unless otherwise noted.
Access pattern:
from babylon.config.defines import GameDefines
defines = GameDefines()
ooda = defines.ooda # OODADefines instance
# Example: get base observe time
ooda.base_observe_time # 1.0
Cycle Time Weights
Used in babylon.ooda.cycle_time.compute_cycle_time() to compute the
four-phase additive OODA cycle time.
Formula:
Where:
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
1.0 |
|
Base Observe phase duration (ticks). |
|
0.5 |
|
Weight of |
|
2.0 |
|
Base Orient phase duration. |
|
0.6 |
|
Weight of |
|
1.0 |
|
Base Act phase duration (fixed, not modified by profile). |
|
0.3 |
|
Weight of coordination on Act phase (reserved for future use). |
|
0.4 |
|
Weight of |
|
0.1 |
|
Minimum Orient phase duration. Prevents coherence from zeroing out Orient. |
Code location: src/babylon/config/defines.py:2141-2177, used in
src/babylon/ooda/cycle_time.py:17-39.
Decision Mode Base Times
The decision_base term in the Decide phase formula. Looked up by
DecisionMode enum value in babylon.ooda.cycle_time.compute_cycle_time().
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
1.0 |
|
AUTOCRATIC: single decision-maker, fastest. |
|
2.0 |
|
DELEGATE: leader delegates to trusted subordinates. |
|
3.0 |
|
DEMOCRATIC: majority vote among members. |
|
5.0 |
|
CONSENSUS: full agreement required, slowest. |
Ordering invariant: AUTOCRATIC (1.0) < DELEGATE (2.0) < DEMOCRATIC (3.0) < CONSENSUS (5.0).
Code location: src/babylon/config/defines.py:2179-2199, used in
src/babylon/ooda/cycle_time.py:42-58.
Initiative Scoring Weights
Five-component weighted sum in babylon.ooda.initiative.compute_initiative_score().
Formula:
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
2.0 |
|
Weight for speed component (inverse cycle time). |
|
1.0 |
|
Weight for institutional bonus (state advantage). |
|
1.5 |
|
Weight for counter-intelligence capability. |
|
1.0 |
|
Weight for community embeddedness. |
|
0.5 |
|
Weight for recent success momentum. |
Code location: src/babylon/config/defines.py:2201-2226, used in
src/babylon/ooda/initiative.py:22-67.
Institutional Bonus by Jurisdiction
The \(B_{inst}\) term in the initiative formula. Looked up by
JurisdictionLevel enum value.
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
5.0 |
|
NATIONAL (federal) jurisdiction. FBI, DEA, ATF. |
|
3.0 |
|
STATE jurisdiction. State police, National Guard. |
|
1.5 |
|
COUNTY or MUNICIPAL jurisdiction. Local PD, sheriff. |
|
0.0 |
|
Non-state organizations (factions, civil society, business). |
Code location: src/babylon/config/defines.py:2228-2248, used in
src/babylon/ooda/initiative.py:148-167.
Momentum
Momentum rewards consecutive successful actions and decays exponentially per tick.
Formula:
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.8 |
|
Exponential decay factor per tick. Higher = slower decay. |
|
0.2 |
|
Bonus added per successful action. |
Code location: src/babylon/config/defines.py:2250-2261, used in
src/babylon/ooda/initiative.py:127-145.
Action Cost Modifiers
Community-modified action costs in babylon.ooda.action_costs.compute_action_cost().
Formula:
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.5 |
|
Cost discount factor for embedded orgs. Higher = steeper discount. |
|
2.5 |
|
Cost multiplier when org and target are on opposite sides of a contradiction axis. |
|
1.5 |
|
Cost multiplier for orgs with no membership in the target community. |
|
0.5 |
|
Floor cost modifier. Even fully embedded orgs pay at least 50% of base cost. |
Code location: src/babylon/config/defines.py:2263-2285, used in
src/babylon/ooda/action_costs.py:34-82.
Consciousness Effect Limits
Per-tick clamping in babylon.ooda.action_effects.compute_consciousness_delta().
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.05 |
|
Maximum absolute CI delta per action per tick. Prevents runaway consciousness shifts. |
Code location: src/babylon/config/defines.py:2287-2293, used in
src/babylon/ooda/action_effects.py:85-88.
Action Base Consciousness Multipliers
The action_base term in the consciousness delta formula. Zero means the
action has no consciousness effect (e.g., AGITATE affects contestation instead).
Formula:
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
1.2 |
|
EDUCATE: direct political education. Highest CI multiplier. |
|
0.0 |
|
AGITATE: increases contestation, not CI directly. Zero base. |
|
0.6 |
|
PROVIDE_SERVICE: serve-the-people programs. Moderate CI effect. |
|
0.3 |
|
RECRUIT: bringing in new members. Low CI effect. |
|
0.5 |
|
ORGANIZE: building community structures. Moderate CI effect. |
|
0.8 |
|
PROPAGANDIZE: media and messaging. High CI effect. |
|
0.8 |
|
REPRESS: state violence. Backfire CI effect (always +CI on target, REVOLUTIONARY tendency). |
|
0.2 |
|
SURVEIL: state surveillance. Smaller backfire CI effect than REPRESS. |
|
1.0 |
|
ASSIMILATE: institutional co-optation. Negative CI effect (pushes LIBERAL tendency). |
Special case – PROVIDE_SERVICE tendency split (hardcoded in _get_effective_action_base):
REVOLUTIONARY org: uses
action_base_provide_service(0.6)LIBERAL org: uses
action_base_provide_service * 0.3(0.18)Other tendency: zero effect
Code location: src/babylon/config/defines.py:2295-2340, used in
src/babylon/ooda/action_effects.py:231-246.
Autonomy Tradeoff
The autonomy-breadth tradeoff in babylon.ooda.constraints.apply_autonomy_modifier().
Formula:
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.5 |
|
Scale factor for the autonomy-effectiveness tradeoff. Higher = steeper penalty for spreading actions. |
Code location: src/babylon/config/defines.py:2342-2348, used in
src/babylon/ooda/constraints.py:92-116.
Agitation-Contestation Coupling
AGITATE actions increase ideological_contestation on the target community.
When contestation exceeds a threshold, EDUCATE actions receive a bonus multiplier.
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.1 |
|
Contestation increase per AGITATE action. |
|
1.5 |
|
EDUCATE CI delta multiplier when community contestation exceeds threshold. |
|
0.3 |
|
Contestation level at which EDUCATE bonus activates. |
Mechanic: AGITATE first to raise contestation above 0.3, then EDUCATE with 1.5x multiplier. This models how agitation creates the conditions for effective political education.
Code location: src/babylon/config/defines.py:2350-2367, used in
src/babylon/ooda/action_effects.py:78-82 (EDUCATE bonus) and
src/babylon/ooda/action_effects.py:150-163 (AGITATE resolver).
Lifecycle Modifiers
Elder legitimacy in babylon.ooda.lifecycle_capacity.elder_legitimacy_bonus().
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
1.3 |
|
CI delta multiplier when organization has elder (D’-phase) members. Elders lend legitimacy. |
Code location: src/babylon/config/defines.py:2369-2374, used in
src/babylon/ooda/lifecycle_capacity.py:44-70.
Counter-Intelligence
Counter-intelligence score progression.
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.1 |
|
Counter-intel score increment per successful COUNTER_INTEL action. |
Code location: src/babylon/config/defines.py:2376-2382.
Base Action Point Costs
Default AP cost for each of the 21 action types. All are integers with
ge=1. Modified at runtime by babylon.ooda.action_costs.compute_action_cost().
Parameter |
Default |
Description |
|---|---|---|
|
1 |
Political education. Cheap, high CI impact. |
|
1 |
Raise contestation. Cheap, no direct CI effect. |
|
1 |
Generate resources. |
|
1 |
Business auto-metabolism. |
|
1 |
State surveillance. Cheap, low backfire. |
|
1 |
Intelligence mapping. |
|
1 |
Diplomatic overture. |
|
1 |
Public condemnation. |
|
2 |
Grow membership. |
|
2 |
Build community structures. |
|
2 |
Media and messaging. |
|
2 |
Serve-the-people programs. |
|
2 |
State violence. Moderate cost, high backfire. |
|
2 |
Public demonstration. |
|
2 |
Counter-intelligence operations. |
|
2 |
Sabotage community infrastructure. |
|
2 |
Institutional co-optation. |
|
3 |
Labor withdrawal. Expensive, powerful. |
|
3 |
Seize property/resources. Expensive. |
|
3 |
Intelligence infiltration. Expensive. |
|
3 |
Build community infrastructure. Expensive, lasting effect. |
Code location: src/babylon/config/defines.py:2384-2411.
Layer 3 Propagation Coefficients
Used by babylon.ooda.layer3.process_layer3() to propagate action
consequences to community state.
Parameter |
Default |
Constraints |
Description |
|---|---|---|---|
|
0.15 |
|
Heat increase per REPRESS action. Heavy state attention. |
|
0.05 |
|
Heat increase per SURVEIL action. Light state attention. |
|
0.1 |
|
Infrastructure increase per BUILD_INFRASTRUCTURE action. |
|
0.1 |
|
Infrastructure decrease per ATTACK_INFRASTRUCTURE action. |
Code location: src/babylon/config/defines.py:2413-2428, used in
src/babylon/ooda/layer3.py:97-222.
Module-Level Constants
Constants defined outside OODADefines, typically structural data or
loop safety limits.
Structural Constants
Constant |
Location |
Description |
|---|---|---|
|
|
5 tuples of |
|
|
|
|
|
Priority queues by org type. STATE_APPARATUS: SURVEIL first. POLITICAL_FACTION: EDUCATE first. CIVIL_SOCIETY: PROVIDE_SERVICE first. BUSINESS: EMPLOY first. |
Loop Safety Limits
All OODA modules enforce static upper bounds on iterations per the project’s loop safety rule. These are not tunable game parameters.
Constant |
Value |
Location |
Scope |
|---|---|---|---|
|
20 |
|
Maximum actions processed per organization per tick. |
|
1000 |
|
Maximum Business orgs processed in Layer 0. |
|
1000 |
|
Maximum action results iterated per sub-processor. |
|
1000 |
|
Maximum edges iterated for membership overlap. |
|
1000 |
|
Maximum nodes iterated for community membership. |
|
20 |
|
Maximum NPC actions selected per org. |
Hardcoded Multipliers
Two values are hardcoded in function bodies rather than in OODADefines:
Value |
Location |
Purpose |
|---|---|---|
0.3 |
|
LIBERAL tendency multiplier for PROVIDE_SERVICE ( |
0.1 |
|
Autonomy effectiveness floor. Prevents complete ineffectiveness. |
0.01 |
|
Minimum overlap for credibility ( |
Coefficient Derivation Chain
Every tunable coefficient in OODADefines traces back to one of five
empirical irreducibles through a three-level hierarchy. Field descriptions
use category tags to indicate provenance:
[A] Direct substitution from an existing source primitive
[B] Computed from source primitives via an explicit formula
[C] Grounded in empirical data (COIN studies, census, organizational theory)
[D] Theoretically justified but not computationally derivable
[E] Engineering constant (structural value, keep as literal)
Level 0: Empirical Irreducibles
ID |
Value |
Symbol |
Source |
|---|---|---|---|
IR-1 |
7 weeks |
\(\tau_{1/2}\) |
Political half-life. FM 3-24 counterinsurgency doctrine: insurgent activity recovers to 50% within 6–8 weeks post-operation. Produces \(\lambda = \ln 2 / 7 \approx 0.1\). |
IR-2 |
0.8 |
\(\alpha\) |
Imperial extraction capacity. Amin/Emmanuel unequal exchange: ~80% of periphery surplus transferred to core. |
IR-3 |
0.3 |
\(p_c\) |
Network percolation threshold. For social networks with \(\langle k \rangle \approx 3\text{--}4\), site percolation \(p_c \approx 1 / \langle k \rangle\). |
IR-4 |
1.5× |
rent premium |
Gentrification rent premium. Census/HUD data, UCLA Urban Displacement Project: median rent increase of 40–60% during rapid displacement. |
IR-5 |
0.2 |
\(\Delta S\) |
George Floyd solidarity shift. Pew Research 2020: 20 percentage point shift in white BLM support. |
Level 1: Source Primitives
Source primitives are GameDefines constants that OODA coefficients reference.
Each derives from a Level 0 irreducible.
Primitive |
Default |
Derivation |
From |
|---|---|---|---|
|
0.1 |
\(\ln 2 / 7\) |
IR-1 |
|
0.1 |
= |
IR-1 |
|
0.1 |
= |
IR-1 |
|
0.5 |
\(\lambda / (1 - \alpha)\) |
IR-1 + IR-2 |
|
0.8 |
Amin/Emmanuel |
IR-2 |
|
0.3 |
\(p_c \approx 1/\langle k \rangle\) |
IR-3 |
|
0.5 |
= |
IR-1 + IR-2 |
|
0.1 |
= |
IR-1 |
|
0.05 |
= |
IR-1 |
|
0.15 |
= |
IR-1 + IR-4 |
|
1.5 |
Census/HUD |
IR-4 |
|
0.8 |
= \(\alpha\) |
IR-2 |
|
0.2 |
Pew Research |
IR-5 |
Level 2: OODA Coefficients
Coefficient |
Default |
Cat |
Formula / Source |
|---|---|---|---|
|
0.15 |
A |
= |
|
0.05 |
A |
= |
|
0.2 |
A |
= |
|
0.1 |
A |
= |
|
0.8 |
B |
\(1 - 2\lambda\) |
|
0.05 |
B |
\(\lambda / 2\) |
|
1.2 |
B |
\(1 + 2\lambda\) |
|
0.8 |
B |
\(1 - 2\lambda\) |
|
0.8 |
B |
\(\alpha\) |
|
0.2 |
B |
\(1 - \alpha\) |
|
0.6 |
B |
\(k + \text{routing\_scale}\) |
|
0.5 |
B |
\(k\) (sensitivity) |
|
0.3 |
B |
\(p_c\) (activation threshold) |
|
0.3 |
B |
\(p_c\) (activation threshold) |
|
1.5 |
B |
= |
|
0.5 |
B |
= |
|
1.3 |
C |
\(1 + \text{ideology\_institutional\_weight}\) |
|
0.1 |
C |
\(\lambda\) (Sparrow network entropy) |
|
1.5 |
C |
= |
|
2.5 |
C |
\(\approx \sqrt{4.2}\) (incarceration disparity) |
|
5.0 |
C |
FM 3-24 force density ratio |
|
3.0 |
C |
RAND state police force ratio |
|
1.5 |
C |
Galula administrative presence premium |
Runtime Validation
Call OODADefines.validate_derivations(game_defines) to detect coefficient
drift when source primitives are changed via YAML overrides or scenario configs:
defines = GameDefines.load_from_yaml("custom_scenario.yaml")
drifts = defines.ooda.validate_derivations(defines)
if drifts:
for msg in drifts:
print(f"WARNING: {msg}")
Code location: src/babylon/config/defines.py, validated in
tests/unit/ooda/test_coefficient_derivations.py.
See Also
The OODA Loop System – Why these coefficients have these values
OODA Loop System Reference – Complete API reference
Organization Reference – Organization model and consciousness formula
Configuration System – GameDefines configuration system