car_env / test.py
Hajorda's picture
Upload folder using huggingface_hub
1a0d68d verified
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()