Passi di distribuzioni finite di Markov
Avanza un vettore di probabilità fino a 100 transizioni di una matrice di Markov con massimo otto stati.
from math import fsum, isfinite
def markov_steps(initial, matrix, steps):
if type(initial) is not list or not 1 <= len(initial) <= 8:
raise ValueError("state count")
n = len(initial)
if type(matrix) is not list or len(matrix) != n or any(
type(row) is not list or len(row) != n for row in matrix):
raise ValueError("square matrix")
rows = [initial] + matrix
if any(type(x) not in (int, float) or not 0 <= x <= 1 or
not isfinite(x) for row in rows for x in row):
raise ValueError("probability values")
if any(abs(fsum(row)-1) > 1e-12 for row in rows):
raise ValueError("row sums")
if type(steps) is not int or not 0 <= steps <= 100:
raise ValueError("step count")
result = initial[:]
for _ in range(steps):
result = [fsum(result[i] * matrix[i][j] for i in range(n))
for j in range(n)]
return result| Controlla prima di applicare | Confronta il comportamento effettivo con il risultato atteso. Se una verifica fallisce, indaga la causa prima di altre modifiche. |
|---|---|
| Modelli | Configura un endpoint compatibile con OpenAI o Anthropic usando URL di base e chiave API, se necessaria. Prova la connessione. Il server locale deve essere in esecuzione; gli strumenti remoti possono trasmettere dati separatamente. |
| Progetto | Controlla zero passi e stati assorbenti, rifiutando valori negativi e somme di riga distanti da uno oltre 1e-12. |
from math import fsum, isfinite
def markov_steps(initial, matrix, steps):
if type(initial) is not list or not 1 <= len(initial) <= 8:
raise ValueError("state count")
n = len(initial)
if type(matrix) is not list or len(matrix) != n or any(
type(row) is not list or len(row) != n for row in matrix):
raise ValueError("square matrix")
rows = [initial] + matrix
if any(type(x) not in (int, float) or not 0 <= x <= 1 or
not isfinite(x) for row in rows for x in row):
raise ValueError("probability values")
if any(abs(fsum(row)-1) > 1e-12 for row in rows):
raise ValueError("row sums")
if type(steps) is not int or not 0 <= steps <= 100:
raise ValueError("step count")
result = initial[:]
for _ in range(steps):
result = [fsum(result[i] * matrix[i][j] for i in range(n))
for j in range(n)]
return resultMantieni chiare le convenzioni di probabilità durante la modifica
StepMaranta offre a un'attività di modellazione probabilistica un ambiente di programmazione con IA per Windows, con contesto del progetto e conversazione con un modello collegato. Parti dalla convenzione dell'applicazione per stati e transizioni, poi identifica la procedura e il codice che la usa. Chiedere una spiegazione prima di modificare aiuta a distinguere una discrepanza di interpretazione da un errore nel calcolo.
Un'attività sulle transizioni finite di Markov può specificare una distribuzione iniziale, una matrice di transizione basata sulle righe e un numero limitato di passi. Includi nella richiesta l'intervallo di probabilità accettato e la tolleranza della somma delle righe. Chiedi come il codice proposto preservi quel contratto con zero passi e in uno stato assorbente, anziché accettare l'output solo perché i numeri sembrano plausibili.
Rivedi la modifica risultante con distribuzioni attese esplicite nei test del tuo progetto. Controlla dimensioni malformate e valori negativi separatamente dal comportamento valido delle transizioni. Mantieni l'input originale accanto all'output quando esamini le mutazioni. Questo approccio collega una proposta numerica a requisiti osservabili dell'applicazione senza presentare l'ambiente come servizio di validazione statistica.
StepMaranta supporta connessioni a endpoint compatibili con OpenAI o Anthropic e credenziali quando necessarie. Puoi scegliere un modello di IA senza restrizioni se il tuo endpoint ne offre uno. Restrizioni, strumenti disponibili e limiti di contesto dipendono da quel modello e server. La tua definizione della convenzione di transizione e i risultati delle verifiche restano centrali per accettare il codice proposto.
Domande su una modifica al modello di transizione
- Quale convenzione della matrice devo fornire?
Indica se ogni riga descrive le transizioni da uno stato e come è rappresentata la distribuzione iniziale. Includi un piccolo risultato atteso. Questo aiuta il modello a esaminare l'implementazione senza sostituire silenziosamente una convenzione trasposta non usata dai chiamanti.
- Perché controllare esplicitamente zero passi?
Rende la distribuzione iniziale invariata un requisito osservabile e può rivelare mutazioni indesiderate. Indica se serve un oggetto risultato separato, poi testa i valori restituiti e l'input originale con i controlli del progetto prima di accettare l'implementazione proposta.
- Come includere nella richiesta la tolleranza della somma delle righe?
Fornisci la tolleranza richiesta dall'applicazione e spiega cosa succede al di fuori di essa. Rivedi la validazione separatamente dal calcolo delle transizioni. Un modello può discutere alternative, ma non deve scegliere implicitamente una diversa soglia di accettazione mentre implementa una modifica richiesta non correlata.
- Superare l'esempio di stato assorbente convalida tutto il modello?
No. Verifica un comportamento utile del codice. Includi altri casi pertinenti e valuta se le ipotesi del modello si adattano all'applicazione. L'ambiente supporta la revisione del codice; non stabilisce la validità scientifica delle probabilità fornite.
StepMaranta · Aggiornato 2026-10-25