changed learning to array data only (not visual), changed some collisions
This commit is contained in:
+19
-13
@@ -4,18 +4,25 @@ from stable_baselines3 import PPO
|
||||
from stable_baselines3.common.callbacks import BaseCallback
|
||||
from flower_game_env import FlowerGameEnv
|
||||
|
||||
|
||||
# ---- Dein Spielbereich (anpassen!) ----
|
||||
# ---- Spielbereich ----
|
||||
monitor_area = {"top": 120, "left": 330, "width": 1900, "height": 1263}
|
||||
env = FlowerGameEnv(monitor_area)
|
||||
ui_exclude_rects = [] # optional: Pixel oder [0..1]-normiert
|
||||
|
||||
time.sleep(3)
|
||||
|
||||
# Env mit fester Referenzgröße (Baseline)
|
||||
env = FlowerGameEnv(
|
||||
monitor_area,
|
||||
ui_exclude_rects=ui_exclude_rects,
|
||||
ref_size=(1900, 1263),
|
||||
)
|
||||
|
||||
saved_model_name = "flower_bot"
|
||||
zip_file = saved_model_name + ".zip"
|
||||
zip_file = f"{saved_model_name}.zip"
|
||||
|
||||
|
||||
class TimeBasedCheckpoint(BaseCallback):
|
||||
"""
|
||||
Speichert das Modell alle 'save_every_secs' Sekunden in 'save_prefix' + Timestamp.
|
||||
"""
|
||||
"""Speichert das Modell alle 'save_every_secs' Sekunden nach save_prefix.zip"""
|
||||
def __init__(self, save_every_secs=60, save_prefix=saved_model_name, verbose=1):
|
||||
super().__init__(verbose)
|
||||
self.save_every_secs = save_every_secs
|
||||
@@ -25,7 +32,7 @@ class TimeBasedCheckpoint(BaseCallback):
|
||||
def _on_step(self) -> bool:
|
||||
now = time.time()
|
||||
if now - self._last_save >= self.save_every_secs:
|
||||
fname = f"{self.save_prefix}"
|
||||
fname = self.save_prefix
|
||||
if self.verbose:
|
||||
print(f"[Autosave] Saving model to {fname}.zip")
|
||||
self.model.save(fname)
|
||||
@@ -33,17 +40,16 @@ class TimeBasedCheckpoint(BaseCallback):
|
||||
return True
|
||||
|
||||
|
||||
# --- Laden, falls Datei vorhanden ---
|
||||
# --- Laden/Starten ---
|
||||
if os.path.exists(zip_file):
|
||||
print(f"Lade existierendes Modell aus {zip_file}")
|
||||
model = PPO.load(zip_file, env=env) # Weitertrainieren mit neuem Env
|
||||
model = PPO.load(zip_file, env=env) # weitertrainieren
|
||||
else:
|
||||
print("Starte neues Modell")
|
||||
# CNN + Dict-Observation → Verwende 'MultiInputPolicy'
|
||||
model = PPO("MultiInputPolicy", env, verbose=2)
|
||||
|
||||
# Trainieren mit Autosave (jede Minute)
|
||||
model.learn(total_timesteps=500_000, callback=TimeBasedCheckpoint(100, "flower_bot"))
|
||||
# Trainieren mit Autosave
|
||||
model.learn(total_timesteps=500_000, callback=TimeBasedCheckpoint(100, saved_model_name))
|
||||
|
||||
# Abschluss-Speicherstand
|
||||
model.save("flower_bot_final")
|
||||
|
||||
Reference in New Issue
Block a user