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()