IndexError: list index out of range

Code-Stücke können hier veröffentlicht werden.
Antworten
PurpleM
User
Beiträge: 1
Registriert: Samstag 18. Februar 2023, 08:10

Hallo zusammen,

ich habe ein Code geschrieben, der die Zustandswahrscheinlichkeiten einer Markov-Kette ausgeben soll. Leider gibt mir Python einen Indexfehler aus. Ich habe tagelang versucht, diesen Fehler zu beheben, aber kriege es leider alleine nicht hin.

Ich bin noch Anfängerin und stell mich wahrscheinlich doof an. Ich würde mich sehr freuen, wenn ihr mir helfen könntet.
Das ist der Code:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

# Zustandswahrscheinlichkeiten vom Spiel B
G = [[0, 1, -1], [-1, 0, 1], [1, -1, 0]]
UebergangsMatrixB = [[0, 1 / 10, 9 / 10], [1 / 4, 0, 3 / 4], [3 / 4, 1 / 4, 0]]
ZustandsWkeit = {}
ZustandsWkeit[(0, 0)] = 1
ZustandsWkeit[(1, 0)] = 0
ZustandsWkeit[(2, 0)] = 0


def ZustandsWkeit(i, n, P, Speichern={}):
    if (i, n) in Speichern:
        return Speichern[(i, n)]
    if n == 0:
        return 1 if i == 0 else 0
    Ergebnis = sum(ZustandsWkeit(k, n - 1, P, Speichern) * P[k + 1][i + 1] for k in range(3))
    Speichern[(i, n)] = Ergebnis
    return Ergebnis


def Zustaende(n, UebergangsMatrixB):
    zustaende = []
    for i in range(n + 1):
        zustand = [
            ZustandsWkeit(0, i, UebergangsMatrixB),
            ZustandsWkeit(1, i, UebergangsMatrixB),
            ZustandsWkeit(2, i, UebergangsMatrixB)
        ]
        zustaende.append(zustand)
    return zustaende

# Anzahl der Zeitschritte, für die der Zustand berechnet werden soll
n = 1

# Zustände berechnen
zustaende = Zustaende(n, UebergangsMatrixB)

# Zeitachse erstellen#
t = range(n+1)

# Zustandswahrscheinlichkeiten plotten
plt.plot(t, [z[0] for z in zustaende], label="Zustand 0")
plt.plot(t, [z[1] for z in zustaende], label="Zustand 1")
plt.plot(t, [z[2] for z in zustaende], label="Zustand 2")

# Achsenbeschriftungen und Legende hinzufügen
plt.xlabel("t")
plt.ylabel("Zustandswahrscheinlichkeiten")
plt.legend()
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PurpleM: Da wird halt versucht auf einen Index zuzugreifen den es nicht gibt. Wo das passiert ist mehr oder weniger offensichtlich wenn man sich den Traceback anschaut. Warum wird dort der Index so berechnet wie er berechnet wird? Welche Werte kann der dadurch denn annehmen? Und vor allem auch welcher gültige Indexwert wird dadurch nie angenommen und macht das Sinn auf bestimmte Werte niemals zuzugreifen?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten