File size: 2,598 Bytes
1a0d68d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import gymnasium as gym
import numpy as np
from sb3_contrib import RecurrentPPO # <--- DİKKAT: PPO DEĞİL, RecurrentPPO
from stable_baselines3.common.vec_env import DummyVecEnv
from training2 import RcCarEnv # Senin training.py dosyanın yanında olmalı
# Model ismini buraya tam ve doğru yazmalısın
# Eğer "interrupted" olduysa:
MODEL_PATH = "bot1_lstm_interrupted"
# Veya eğitim bittiyse: "bot1_lstm_final"
def main():
print("🚗 Test Ortamı Hazırlanıyor...")
# 1. Ortamı yarat ve Vektörleştir (Eğitimdeki gibi olması şart)
env = RcCarEnv()
env = DummyVecEnv([lambda: env])
print(f"🧠 Hafızalı Şampiyon Yükleniyor: {MODEL_PATH}...")
try:
# RecurrentPPO olarak yüklüyoruz
model = RecurrentPPO.load(MODEL_PATH, env=env)
print("✅ Yüklendi! Yola çıkıyoruz...")
except FileNotFoundError:
print(f"❌ HATA: '{MODEL_PATH}.zip' dosyası bulunamadı!")
print(" - Dosya adını kontrol et.")
print(" - Bu scriptin model dosyasıyla aynı klasörde olduğundan emin ol.")
return
except ValueError as e:
print(f"❌ MODEL YÜKLEME HATASI: {e}")
print(" - Muhtemelen PPO ile RecurrentPPO karıştı.")
return
# --- LSTM TEST DÖNGÜSÜ ---
# İlk gözlem
obs = env.reset()
# LSTM Durumları (Hafıza) - Başlangıçta boştur (None)
lstm_states = None
# Episode Başlangıç Sinyali (Hafızayı ne zaman sıfırlayacağını bilmesi için)
# 1 ortamımız olduğu için [True] ile başlıyoruz.
episode_starts = np.ones((1,), dtype=bool)
try:
while True:
# deterministic=True -> Risk alma, en iyi bildiğini yap (Yarış Modu)
# DİKKAT: state ve episode_start parametrelerini ekledik!
action, lstm_states = model.predict(
obs,
state=lstm_states,
episode_start=episode_starts,
deterministic=True
)
# Adım at
obs, rewards, dones, infos = env.step(action)
# Bir sonraki adım için "Episode bitti mi?" bilgisini güncelle
episode_starts = dones
# Eğer tur bittiyse (env.step otomatik resetler ama görselleştirmek için)
if dones[0]:
print(f"🏁 Tur Bitti! Hafıza sıfırlanıyor...")
except KeyboardInterrupt:
print("\n🛑 Test sonlandırıldı.")
env.close()
if __name__ == '__main__':
main() |