94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
"""
|
||
无控制基线测试 - SUMO环境
|
||
固定最高限速,不进行VSL控制
|
||
"""
|
||
import yaml
|
||
import numpy as np
|
||
from tqdm import tqdm
|
||
|
||
from sumo_vsl_environment import SUMOVSLEnvironment
|
||
|
||
|
||
def test_no_control():
|
||
with open("config_sumo_vsl.yaml", "r", encoding="utf-8") as f:
|
||
config = yaml.safe_load(f)
|
||
|
||
env = SUMOVSLEnvironment(config)
|
||
|
||
print("=" * 70)
|
||
print("无控制基线测试 - SUMO VSL环境")
|
||
print("=" * 70)
|
||
print(f" 测试回合数: 10")
|
||
print(f" 控制策略: 固定最高限速 (120 km/h)")
|
||
print()
|
||
|
||
num_episodes = 10
|
||
base_seed = 42
|
||
|
||
episode_rewards = []
|
||
episode_throughputs = []
|
||
episode_speeds = []
|
||
|
||
for episode in range(1, num_episodes + 1):
|
||
seed = base_seed + episode
|
||
state = env.reset(seed=seed)
|
||
episode_reward = 0
|
||
episode_throughput = 0
|
||
episode_speed = 0
|
||
done = False
|
||
step = 0
|
||
|
||
pbar = tqdm(total=env.episode_length, desc=f"Episode {episode}/{num_episodes}", leave=False)
|
||
|
||
while not done:
|
||
# 无控制:所有zone都使用最高限速
|
||
action = np.array([4, 4, 4, 4, 4]) # 索引4 = 120 km/h
|
||
|
||
next_state, reward, done, info = env.step(action)
|
||
|
||
episode_reward += reward
|
||
episode_throughput += info["throughput"]
|
||
episode_speed += info["mean_speed_kmh"]
|
||
state = next_state
|
||
step += 1
|
||
|
||
pbar.set_postfix(r=f"{episode_reward:.1f}",
|
||
tp=f"{info['throughput']:.0f}",
|
||
v=f"{info['mean_speed_kmh']:.1f}")
|
||
pbar.update(1)
|
||
|
||
pbar.close()
|
||
|
||
avg_tp = episode_throughput / step
|
||
avg_speed = episode_speed / step
|
||
|
||
episode_rewards.append(episode_reward)
|
||
episode_throughputs.append(avg_tp)
|
||
episode_speeds.append(avg_speed)
|
||
|
||
print(f"Episode {episode}: Reward={episode_reward:.2f}, "
|
||
f"Throughput={avg_tp:.1f} veh/h, Speed={avg_speed:.1f} km/h")
|
||
|
||
env.close()
|
||
|
||
print("\n" + "=" * 70)
|
||
print("无控制基线测试结果")
|
||
print("=" * 70)
|
||
print(f"累积奖励: {np.mean(episode_rewards):.2f} ± {np.std(episode_rewards):.2f}")
|
||
print(f"平均通行量: {np.mean(episode_throughputs):.1f} ± {np.std(episode_throughputs):.1f} veh/h")
|
||
print(f"平均速度: {np.mean(episode_speeds):.1f} ± {np.std(episode_speeds):.1f} km/h")
|
||
print("=" * 70)
|
||
|
||
return {
|
||
"reward_mean": np.mean(episode_rewards),
|
||
"reward_std": np.std(episode_rewards),
|
||
"throughput_mean": np.mean(episode_throughputs),
|
||
"throughput_std": np.std(episode_throughputs),
|
||
"speed_mean": np.mean(episode_speeds),
|
||
"speed_std": np.std(episode_speeds)
|
||
}
|
||
|
||
|
||
if __name__ == "__main__":
|
||
test_no_control()
|