File size: 2,014 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
import os
from stable_baselines3 import SAC
from stable_baselines3.common.vec_env import DummyVecEnv, VecFrameStack
from stable_baselines3.common.monitor import Monitor

# rc_car_envs.py dosyasından sınıfları çekiyoruz
from rc_car_envs import RcCarTargetEnv, RcCarDriveEnv, RcCarComplexEnv

# ==========================================
# AYARLAR: HANGİ MODU EĞİTECEKSİN?
# ==========================================
# Seçenekler: "target", "drive", "complex"
MODE = "complex" 

if __name__ == "__main__":
    
    log_dir = f"./logs_{MODE}/"
    model_dir = f"./models_{MODE}/"
    os.makedirs(log_dir, exist_ok=True)
    os.makedirs(model_dir, exist_ok=True)

    # 1. Ortamı Seç
    if MODE == "target":
        print("🎯 TARGET Mode Seçildi: Sadece hedefe gitmeyi öğrenecek.")
        env = RcCarTargetEnv()
    elif MODE == "drive":
        print("🏎️ DRIVE Mode Seçildi: Sadece hızlı sürmeyi öğrenecek.")
        env = RcCarDriveEnv()
    elif MODE == "complex":
        print("🧠 COMPLEX Mode Seçildi: Hedef + Engel + Hız.")
        env = RcCarComplexEnv()
    else:
        raise ValueError("Geçersiz Mod! 'target', 'drive' veya 'complex' seçin.")

    # 2. Wrapperlar (İzleme ve Stack)
    env = Monitor(env, filename=os.path.join(log_dir, "monitor"))
    env = DummyVecEnv([lambda: env])
    env = VecFrameStack(env, n_stack=4)

    # 3. Model Kurulumu
    print(f"🚀 {MODE.upper()} eğitimi başlıyor...")
    
    model = SAC.load("./models_target/sac_rc_car_target_interrupted", env=env, tensorboard_log=log_dir)

    # 4. Eğitim
    try:
        # İstersen adım sayısını artırabilirsin
        model.learn(total_timesteps=500_000, progress_bar=True)
        
        # Kaydet
        model.save(f"{model_dir}/sac_rc_car_{MODE}_final")
        print("✅ Eğitim Başarıyla Tamamlandı.")
        
    except KeyboardInterrupt:
        print("🛑 Eğitim manuel durduruldu. Kaydediliyor...")
        model.save(f"{model_dir}/sac_rc_car_{MODE}_interrupted")