Source code for line_solver.api.dtmc


"""
Discrete-Time Markov Chain (DTMC) analysis algorithms.

This module provides functions for analyzing discrete-time Markov chains,
including steady-state analysis, stochastic complement operations,
time-reversal, and simulation methods.

These functions are used by various solvers and analysis methods.
"""

import jpype
import numpy as np
from line_solver import jlineMatrixToArray, jlineMatrixFromArray


[docs] def dtmc_solve(matrix): """ Solve for steady-state probabilities of a DTMC. Args: matrix: Transition probability matrix. Returns: numpy.ndarray: Steady-state probability distribution. """ return jlineMatrixToArray( jpype.JPackage('jline').api.mc.Dtmc_solveKt.dtmc_solve( jlineMatrixFromArray(matrix) ) )
[docs] def dtmc_stochcomp(matrix, indexes): """ Compute stochastic complement of a DTMC. Performs state space reduction by computing the stochastic complement, eliminating specified states while preserving transition probabilities. Args: matrix: Transition probability matrix. indexes: List of state indexes to eliminate. Returns: numpy.ndarray: Reduced transition matrix (stochastic complement). """ ind = jpype.java.util.ArrayList() for i in range(len(indexes)): ind.add(jpype.JInt(indexes[i])) return jlineMatrixToArray( jpype.JPackage('jline').api.mc.Dtmc_stochcompKt.dtmc_stochcomp( jlineMatrixFromArray(matrix), ind ) )
[docs] def dtmc_timereverse(matrix): """ Compute time-reversed DTMC. Constructs the time-reversed discrete-time Markov chain using the detailed balance equations and steady-state probabilities. Args: matrix: Original transition probability matrix. Returns: numpy.ndarray: Time-reversed transition probability matrix. """ return jlineMatrixToArray( jpype.JPackage('jline').api.mc.Dtmc_timereverseKt.dtmc_timereverse( jlineMatrixFromArray(matrix) ) )
[docs] def dtmc_makestochastic(matrix): """ Normalize matrix to be row-stochastic. Converts a non-negative matrix to a proper stochastic matrix by normalizing rows to sum to 1. Args: matrix: Non-negative matrix to normalize. Returns: numpy.ndarray: Row-stochastic matrix. """ return jlineMatrixToArray( jpype.JPackage('jline').api.mc.Dtmc_makestochasticKt.dtmc_makestochastic( jlineMatrixFromArray(matrix) ) )
[docs] def dtmc_rand(length): """ Generate random DTMC transition matrix. Creates a random row-stochastic matrix suitable for use as a discrete-time Markov chain transition matrix. Args: length: Size of the square matrix (number of states). Returns: numpy.ndarray: Random stochastic transition matrix. """ return jlineMatrixToArray( jpype.JPackage('jline').api.mc.Dtmc_randKt.dtmc_rand(jpype.JInt(length)) )
[docs] def dtmc_simulate(P, pi0, n): """ Simulate DTMC state trajectory. Generates a sample path of the discrete-time Markov chain starting from an initial distribution. Args: P: Transition probability matrix. pi0: Initial state distribution. n: Number of time steps to simulate. Returns: numpy.ndarray: Sequence of visited states. """ result = jpype.JPackage('jline').api.mc.Dtmc_simulateKt.dtmc_simulate( jlineMatrixFromArray(P), jlineMatrixFromArray(pi0), jpype.JInt(n) ) return np.array([result[i] for i in range(len(result))])
[docs] def dtmc_isfeasible(P): """ Check if matrix is a valid DTMC transition matrix. Verifies that the matrix satisfies the requirements for a discrete-time Markov chain: non-negative entries and row sums equal to 1. Args: P: Matrix to check. Returns: bool: True if matrix is a valid DTMC transition matrix. """ return jpype.JPackage('jline').api.mc.Dtmc_isfeasibleKt.dtmc_isfeasible( jlineMatrixFromArray(P) )