---
id: wiki-2026-0508-understanding-complex-systems
title: Understanding Complex Systems
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Complexity Science, Complex Adaptive Systems, CAS]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [complexity, systems-thinking, emergence, networks]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: Python
  framework: NetworkX / Mesa / SciPy
---

# Understanding Complex Systems

## 매 한 줄
> **"매 부분의 합 그 이상 — 매 emergence"**. Santa Fe Institute 1984 founding 이후 complexity science 는 economics, biology, AI safety 까지 확장됐고, 2026 현재 ABM + GNN + dynamical systems 의 hybrid analysis 가 standard toolkit이다.

## 매 핵심

### 매 정의 axes
- **Many components**: 매 대량의 interacting agent.
- **Nonlinearity**: small cause → large effect (butterfly).
- **Emergence**: macro pattern not reducible to micro rules.
- **Adaptation**: agent rule 의 evolution (CAS).
- **Self-organization**: external designer 없이 ordered structure.

### 매 phenomena
- **Phase transitions** (percolation, Ising).
- **Power laws / scale-free networks** (Barabási 1999).
- **Chaos & strange attractors** (Lorenz 1963).
- **Synchronization** (Kuramoto oscillators).
- **Critical brain hypothesis** (Beggs & Plenz 2003).

### 매 응용
1. Epidemic modeling (COVID-19, agent-based + network).
2. Financial market (heavy tails, flash crashes).
3. AI safety: emergent behaviors in LLM scaling, multi-agent.
4. Climate tipping points.
5. Urban / supply chain resilience.

## 💻 패턴

### Game of Life — emergence demo
```python
import numpy as np

def step(grid):
    n = sum(np.roll(np.roll(grid, i, 0), j, 1)
            for i in (-1, 0, 1) for j in (-1, 0, 1)
            if (i, j) != (0, 0))
    return ((n == 3) | ((grid == 1) & (n == 2))).astype(int)

g = np.random.binomial(1, 0.3, (200, 200))
for _ in range(500):
    g = step(g)
```

### Scale-free network (Barabási–Albert)
```python
import networkx as nx
G = nx.barabasi_albert_graph(n=10_000, m=3, seed=42)

degrees = [d for _, d in G.degree()]
# verify power-law
import powerlaw
fit = powerlaw.Fit(degrees, discrete=True)
print(fit.alpha, fit.xmin, fit.distribution_compare("power_law", "lognormal"))
```

### Kuramoto synchronization
```python
import numpy as np
from scipy.integrate import odeint

def kuramoto(theta, t, omega, K, N):
    dtheta = omega.copy()
    for i in range(N):
        dtheta[i] += (K/N) * np.sum(np.sin(theta - theta[i]))
    return dtheta

N, K = 100, 1.5
omega = np.random.normal(0, 1, N)
theta0 = np.random.uniform(0, 2*np.pi, N)
t = np.linspace(0, 50, 1000)
sol = odeint(kuramoto, theta0, t, args=(omega, K, N))

# order parameter r(t)
r = np.abs(np.exp(1j * sol).mean(axis=1))
```

### SIR epidemic on network
```python
import networkx as nx, random

def sir(G, beta=0.05, gamma=0.01, init=5, T=200):
    state = {n: "S" for n in G}
    for n in random.sample(list(G), init): state[n] = "I"
    history = []
    for _ in range(T):
        new = state.copy()
        for n, s in state.items():
            if s == "I":
                if random.random() < gamma: new[n] = "R"
                for nb in G.neighbors(n):
                    if state[nb] == "S" and random.random() < beta:
                        new[nb] = "I"
        state = new
        history.append((sum(v=="S" for v in state.values()),
                        sum(v=="I" for v in state.values()),
                        sum(v=="R" for v in state.values())))
    return history
```

### Lyapunov exponent (logistic map)
```python
import numpy as np
def lyapunov(r, x0=0.5, n=10_000, burn=1000):
    x = x0
    for _ in range(burn): x = r*x*(1-x)
    s = 0.0
    for _ in range(n):
        x = r*x*(1-x)
        s += np.log(abs(r - 2*r*x) + 1e-12)
    return s / n

for r in np.linspace(2.5, 4.0, 16):
    print(f"r={r:.2f}  λ={lyapunov(r):+.4f}")
```

### Causal emergence via effective info (PyPhi-lite idea)
```python
# coarse-grain & measure mutual info gain — 매 Hoel 2017
def effective_info(P_micro, grouping):
    # P_micro: (S, S) transition matrix
    # grouping: list of macro-state index per micro-state
    import numpy as np
    macro = max(grouping) + 1
    P_macro = np.zeros((macro, macro))
    for i, gi in enumerate(grouping):
        for j, gj in enumerate(grouping):
            P_macro[gi, gj] += P_micro[i, j]
    P_macro /= P_macro.sum(axis=1, keepdims=True) + 1e-12
    return P_macro
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| Local rules, emergent macro | Agent-based (Mesa, NetLogo) |
| Network structure matters | NetworkX / igraph + null models |
| Continuous coupled oscillators | Kuramoto / ODE |
| Discrete-time chaos | Iterated maps + Lyapunov |
| Real data, latent dynamics | SINDy / Koopman / NeuralODE |

**기본값**: NetworkX + Mesa for structure+dynamics, SciPy for ODE, powerlaw for tail fit.

## 🔗 Graph
- 부모: [[Systems Theory]] · [[Nonlinear Dynamics]]
- 응용: [[Pedestrian-Modeling]]
- Adjacent: [[Entropy in Information Theory|Information Theory]] · [[AI_Safety_and_Alignment|AI Safety]]

## 🤖 LLM 활용
**언제**: model scaffolding, parameter sweep, hypothesis enumeration, literature 정리.
**언제 X**: long-horizon stability claim — 매 numerical proof / theorem 직접 검증.

## ❌ 안티패턴
- **Power-law claim 의 over-fit**: 매 lognormal vs power-law 비교 검증 필수 (Clauset 2009).
- **Emergence as magic**: 매 정의 명확화 — weak (epistemic) vs strong (ontological).
- **Single ABM run**: Monte Carlo ensemble 필수 (≥100 runs).
- **Network metric without null**: 매 configuration model baseline 비교.

## 🧪 검증 / 중복
- Verified (Mitchell "Complexity: A Guided Tour", SFI lectures, Strogatz "Nonlinear Dynamics and Chaos", Newman "Networks" 2nd ed).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — emergence + networks + chaos pattern set |
