|
|
import os |
|
|
import time |
|
|
from stable_baselines3 import SAC |
|
|
from stable_baselines3.common.vec_env import DummyVecEnv, VecFrameStack |
|
|
|
|
|
|
|
|
from rc_car_envs import RcCarTargetEnv, RcCarDriveEnv, RcCarComplexEnv |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MODE = "complex" |
|
|
|
|
|
def main(): |
|
|
print(f"🔍 {MODE.upper()} Modu için test başlatılıyor...") |
|
|
|
|
|
|
|
|
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.") |
|
|
|
|
|
|
|
|
|
|
|
env = DummyVecEnv([lambda: env]) |
|
|
env = VecFrameStack(env, n_stack=4) |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
try: |
|
|
model = SAC.load(model_path, env=env) |
|
|
except Exception as e: |
|
|
print(f"Hata oluştu: {e}") |
|
|
return |
|
|
|
|
|
|
|
|
print("🚗 Test Sürüşü Başlıyor... (Çıkmak için CTRL+C)") |
|
|
obs = env.reset() |
|
|
|
|
|
total_reward = 0 |
|
|
steps = 0 |
|
|
|
|
|
try: |
|
|
while True: |
|
|
|
|
|
action, _states = model.predict(obs, deterministic=True) |
|
|
|
|
|
obs, rewards, dones, info = env.step(action) |
|
|
|
|
|
total_reward += rewards[0] |
|
|
steps += 1 |
|
|
|
|
|
|
|
|
if steps % 10 == 0: |
|
|
|
|
|
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) |
|
|
|
|
|
except KeyboardInterrupt: |
|
|
print("\n🛑 Test sonlandırıldı.") |
|
|
finally: |
|
|
env.close() |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |