import os import time from stable_baselines3 import SAC from stable_baselines3.common.vec_env import DummyVecEnv, VecFrameStack # rc_car_envs.py dosyasından sınıfları çekiyoruz (Senin dosya yapınla aynı) from rc_car_envs import RcCarTargetEnv, RcCarDriveEnv, RcCarComplexEnv # ========================================== # AYARLAR: HANGİ MODU TEST EDECEKSİN? # ========================================== # Burası eğitimdeki MODE ile aynı olmalı veya test etmek istediğin mod olmalı. # Seçenekler: "target", "drive", "complex" MODE = "complex" def main(): print(f"🔍 {MODE.upper()} Modu için test başlatılıyor...") # 1. Ortamı Seç (Eğitim kodundaki mantığın aynısı) if MODE == "target": env = RcCarTargetEnv() elif MODE == "drive": env = RcCarDriveEnv() elif MODE == "complex": env = RcCarComplexEnv() else: raise ValueError("Geçersiz Mod! 'target', 'drive' veya 'complex' seçin.") # 2. Wrapperlar (Eğitimdekiyle BİREBİR AYNI olmalı) # Eğitimde FrameStack=4 kullandığın için burada da kullanmazsan hata alırsın. env = DummyVecEnv([lambda: env]) env = VecFrameStack(env, n_stack=4) # 3. Model Dosyasını Bul model_dir = f"./models_{MODE}/" final_model_path = f"{model_dir}/sac_rc_car_{MODE}_final.zip" interrupted_model_path = f"{model_dir}/sac_rc_car_{MODE}_interrupted.zip" if os.path.exists(final_model_path): model_path = final_model_path print(f"✅ Final modeli bulundu: {model_path}") elif os.path.exists(interrupted_model_path): model_path = interrupted_model_path print(f"⚠️ Final model yok, yarıda kesilen model yükleniyor: {model_path}") else: print(f"❌ Model dosyası bulunamadı! Şu klasöre bakıldı: {model_dir}") return # 4. Modeli Yükle try: model = SAC.load(model_path, env=env) except Exception as e: print(f"Hata oluştu: {e}") return # 5. Test Döngüsü print("🚗 Test Sürüşü Başlıyor... (Çıkmak için CTRL+C)") obs = env.reset() total_reward = 0 steps = 0 try: while True: # deterministic=True: Model macera aramaz, öğrendiği en iyi hareketi yapar. action, _states = model.predict(obs, deterministic=True) obs, rewards, dones, info = env.step(action) total_reward += rewards[0] steps += 1 # Konsol Çıktısı (Anlık durumu görmek için) if steps % 10 == 0: # Action[0][0] -> Gaz, Action[0][1] -> Direksiyon throttle = action[0][0] steering = action[0][1] print(f"Adım: {steps} | Gaz: {throttle:.2f} | Yön: {steering:.2f} | Ödül: {rewards[0]:.2f}") if dones[0]: print(f"🏁 Episode Bitti! Toplam Puan: {total_reward:.2f}") obs = env.reset() total_reward = 0 steps = 0 time.sleep(1.0) # Yeni tur başlamadan önce kısa bekleme except KeyboardInterrupt: print("\n🛑 Test sonlandırıldı.") finally: env.close() if __name__ == "__main__": main()