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