MCP HubMCP Hub
Вернуться к навыкам

model-markov-chain

pjt222
Обновлено 2 days ago
4 просмотров
17
2
17
Посмотреть на GitHub
Метаaidesign

О программе

Этот навык строит и анализирует дискретные или непрерывные цепи Маркова для моделирования систем без памяти. Он создаёт матрицы переходов, классифицирует состояния, вычисляет стационарные распределения и определяет средние времена первого достижения. Используйте его для расчёта стационарных вероятностей, ожидаемых времён достижения или в качестве основы для СММ и МПП.

Быстрая установка

Claude Code

Рекомендуется
Основной
npx skills add pjt222/agent-almanac -a claude-code
Команда плагинаАльтернативный
/plugin add https://github.com/pjt222/agent-almanac
Git клонированиеАльтернативный
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/model-markov-chain

Скопируйте и вставьте эту команду в Claude Code для установки этого навыка

Документация

Model Markov Chain

Construct + classify + analyze DTMC/CTMC from raw transition data or domain specs → stationary distributions + mean first passage times + simulation validation. Both DTMC + CTMC workflows end-to-end.

Use When

  • Memoryless system: future depends only on current state
  • Observed transition counts/rates between finite state set
  • Long-run steady-state probabilities
  • Expected hitting times or absorption probabilities
  • Classify states transient/recurrent/absorbing for structural analysis
  • Compare alternative Markov models for same system
  • Foundation for advanced (HMM, RL MDPs)

In

Required

InputTypeDescription
state_spacelist/vectorExhaustive enumeration of all states in the chain
transition_datamatrix, data frame, or edge listRaw transition counts, a probability matrix, or a rate matrix (for CTMC)
chain_typestringEither "discrete" (DTMC) or "continuous" (CTMC)

Optional

InputTypeDefaultDescription
initial_distributionvectoruniformStarting state probabilities
time_horizoninteger/float100Number of steps (DTMC) or time units (CTMC) for simulation
tolerancefloat1e-10Convergence tolerance for iterative computations
absorbing_stateslistauto-detectStates explicitly marked as absorbing
labelsliststate indicesHuman-readable names for each state
methodstring"eigen"Solver method: "eigen", "power", or "linear_system"

Do

Step 1: Define State Space + Transitions

1.1. Enumerate all distinct states. Confirm exhaustive + mutually exclusive.

1.2. Raw obs → tabulate counts into n x n count matrix C where C[i,j] = transitions from i to j.

1.3. CTMC → collect holding times each state alongside transition destinations.

1.4. Verify no state missing → every observed origin + destination in state space.

1.5. Doc data source, observation period, filtering. Provenance essential for reproducing + explaining anomalies.

→ Well-defined state space size n + count matrix or (origin, destination, rate/count) tuples covering all observed transitions. Small enough for matrix ops (typically n < 10000 dense).

If err: states missing → re-examine source, expand enumeration. Too large → lump rare into "other" or simulation-based. Extremely sparse → verify observation period long enough.

Step 2: Construct Transition Matrix or Generator

2.1. DTMC: Normalize each row of count matrix → probability matrix P:

  • P[i,j] = C[i,j] / sum(C[i,])
  • Verify row sums = 1 within tolerance

2.2. CTMC: Construct rate (generator) matrix Q:

  • Off-diag: Q[i,j] = rate i to j
  • Diag: Q[i,i] = -sum(Q[i,j] for j != i)
  • Verify row sums = 0 within tolerance

2.3. Zero-count rows (states never observed as origins) → smoothing: Laplace, absorbing, or flag for review.

2.4. Store format suitable for downstream (dense small, sparse large).

→ Valid stochastic P (rows sum 1) or generator Q (rows sum 0), no neg off-diag in P, no pos diag in Q.

If err: row sums deviate → check data corruption or float issues. Re-normalize or re-examine.

Step 3: Classify States

3.1. Communication classes via strongly connected components of directed graph (positive prob edges only).

3.2. Per class:

  • Recurrent if no outgoing edges to other classes
  • Transient if has outgoing edges
  • Absorbing if single state w/ P[i,i] = 1

3.3. Periodicity per recurrent class via GCD of cycle lengths. Period 1 = aperiodic.

3.4. Irreducible (single class) or reducible (multiple)?

3.5. Summarize: each class, type, period, absorbing states.

→ Complete classification: every state assigned class + labels (transient/positive recurrent/null recurrent/absorbing) + periodicity.

If err: graph analysis inconsistent → verify no neg entries + rows sum correctly. Very large → iterative graph algorithms not full matrix powers.

Step 4: Stationary Distribution

4.1. Irreducible aperiodic: Solve pi * P = pi s.t. sum(pi) = 1.

  • Reformulate pi * (P - I) = 0 w/ normalization
  • Eigendecomp: pi = left eigenvector of P for eigenvalue 1, normalized

4.2. Irreducible periodic: Stationary still exists but doesn't converge from arbitrary init. Same as 4.1.

4.3. Reducible: Stationary per recurrent class independently. Overall = convex combo depending on absorption probabilities from transient.

4.4. CTMC: Solve pi * Q = 0 w/ sum(pi) = 1.

4.5. Verify: pi * P (or Q) = pi within tolerance.

4.6. Reducible → absorption probabilities from each transient to each recurrent class. Combined w/ per-class stationary → long-run conditional on start.

4.7. Spectral gap (largest vs. 2nd-largest eigenvalue magnitudes). Governs convergence rate, useful for sim length Step 6.

→ Probability vector pi length n, all non-neg, sum 1, satisfies balance equations within tolerance. Spectral gap > 0 for aperiodic irreducible.

If err: eigensolver no converge → iterative power method (pi_k+1 = pi_k * P until converge). Multiple eigenvalues = 1 → reducible, handle 4.3. Very small spectral gap → mixes slowly, needs very long sims.

Step 5: Mean First Passage Times

5.1. Define m[i,j] = expected steps to reach j from i.

5.2. Irreducible → solve linear system:

  • m[i,j] = 1 + sum(P[i,k] * m[k,j] for k != j) for all i != j
  • m[j,j] = 1 / pi[j] (mean recurrence)

5.3. Absorbing → absorption probs + expected times:

  • Partition P into transient (Q_t) + absorbing
  • Fundamental: N = (I - Q_t)^{-1}
  • Expected steps to absorption: N * 1
  • Absorption probs: N * R where R = transient-to-absorbing block

5.4. CTMC → step counts → expected holding times via generator matrix.

5.5. Present matrix/table of pairwise FPT for key state pairs.

→ FPT matrix: diag = mean recurrence (1/pi[j]), off-diag = finite for communicating pairs.

If err: linear system singular → transient states can't reach target. Report unreachable as infinite. Verify chain structure Step 3.

Step 6: Validate w/ Simulation

6.1. Sim K independent paths for T steps, starting from initial dist.

6.2. Estimate stationary empirically: state occupancy frequencies across paths after burn-in.

6.3. Compare sim freq vs. analytical stationary. Total variation distance or chi-squared.

6.4. Estimate FPT empirically: first hitting time per target state across reps.

6.5. Report agreement:

  • Max abs deviation analytical vs. sim stationary probs
  • 95% CI for sim FPT vs. analytical

6.6. Discrepancies > tolerance → re-examine matrix construction + classification.

→ Sim stationary within 0.01 TV distance of analytical (sufficient runs). Sim FPT within 10% of analytical.

If err: increase T or K. Persists → analytical may have numerical errors, recompute higher precision.

Check

  • Transition matrix P: all non-neg, rows sum 1 (or Q rows sum 0 CTMC)
  • Stationary pi valid probability vector, pi * P = pi
  • Mean recurrence = 1/pi[j] for each recurrent state j
  • Sim state freqs converge to analytical stationary
  • State classification consistent: no recurrent state edges leaving its class
  • All eigenvalues of P ≤ 1 magnitude, exactly one = 1 per recurrent class
  • Absorbing chains: absorption probs from each transient sum to 1 across absorbing classes
  • Fundamental N = (I - Q_t)^{-1} all positive (expected visit counts positive)
  • Detailed balance iff reversible: pi[i] * P[i,j] = pi[j] * P[j,i] for all i,j

Traps

  • Non-exhaustive state space: Missing states → sub-stochastic (rows < 1). Always verify row sums first
  • Confuse DTMC vs. CTMC: Rate matrix has non-pos diag + rows sum 0. DTMC formulas on rate matrix → nonsense
  • Ignore periodicity: Periodic chain has valid stationary but doesn't converge usual sense. Mixing time analysis must account for period
  • Numerical instability large chains: Eigendecomp large dense matrices expensive + loses precision. Use sparse solvers or iterative for >few hundred states
  • Zero-prob transitions: Structural zeros → reducible. Verify irreducibility before single stationary
  • Insufficient sim length: Short sims w/ poor mixing → biased. Always compute effective sample size + check trace plots
  • Assume reversibility w/o checking: Many shortcuts (detailed balance) only reversible chains. Verify pi[i] * P[i,j] = pi[j] * P[j,i] before
  • Float accumulation in power method: Iterating pi * P many times accumulates rounding. Periodically re-normalize during power iteration

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/caveman-ultra/skills/model-markov-chain
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

content-collections

Мета

Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.

Просмотреть навык

polymarket

Мета

Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.

Просмотреть навык

creating-opencode-plugins

Мета

Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.

Просмотреть навык

sglang

Мета

SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.

Просмотреть навык