1.4 KiB
1.4 KiB
import numpy as np
# Anzahl der Zustände
n_states = 21 # 20 Anweisungen + 1 Endzustand
n_actions = 3 # Ausführen, Überspringen, Test beenden
# Übergangswahrscheinlichkeiten
P = np.zeros((n_states, n_actions, n_states))
# Belohnungsfunktion
R = np.zeros((n_states, n_actions))
# Beispielfüllung der Matrizen P und R
for s in range(n_states - 1):
P[s, 0, s + 1] = 1 # Aktion ausführen führt zum nächsten Zustand
P[s, 1, s + 1] = 1 # Zum nächsten Zustand übergehen
P[s, 2, n_states - 1] = 1 # Test beenden führt zum Endzustand
R[s, 0] = 1 # Belohnung für das Ausführen einer Aktion
R[s, 1] = -1 # Kosten für das Überspringen
R[s, 2] = -10 # Hohe Kosten für das vorzeitige Beenden
# Implementierung der Value Iteration
V = np.zeros(n_states)
gamma = 0.95 # Diskontierungsfaktor
threshold = 1e-4 # Konvergenzschwelle
while True:
V_prev = V.copy()
for s in range(n_states):
V[s] = max([sum(P[s, a, s_prime] * (R[s, a] + gamma * V_prev[s_prime])
for s_prime in range(n_states)) for a in range(n_actions)])
if np.max(np.abs(V - V_prev)) < threshold:
break
# Ausgabe der optimalen Politik
policy = np.zeros(n_states, dtype=int)
for s in range(n_states):
policy[s] = np.argmax([sum(P[s, a, s_prime] * (R[s, a] + gamma * V[s_prime])
for s_prime in range(n_states)) for a in range(n_actions)])
print("Optimale Politik:", policy)