116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
|
|
from scenario_env import MultiAgentScenarioEnv
|
|||
|
|
from simple_idm_policy import ConstantVelocityPolicy
|
|||
|
|
from metadrive.engine.asset_loader import AssetLoader
|
|||
|
|
from logger_utils import setup_logger
|
|||
|
|
import time
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
WAYMO_DATA_DIR = r"/home/huangfukk/MAGAIL4AutoDrive/Env"
|
|||
|
|
|
|||
|
|
def main(enable_logging=False):
|
|||
|
|
"""极致性能优化版本 - 启用所有优化选项"""
|
|||
|
|
env = MultiAgentScenarioEnv(
|
|||
|
|
config={
|
|||
|
|
"data_directory": AssetLoader.file_path(WAYMO_DATA_DIR, "exp_converted", unix_style=False),
|
|||
|
|
"is_multi_agent": True,
|
|||
|
|
"num_controlled_agents": 3,
|
|||
|
|
"horizon": 300,
|
|||
|
|
|
|||
|
|
# 关闭所有渲染
|
|||
|
|
"use_render": False,
|
|||
|
|
"render_pipeline": False,
|
|||
|
|
"image_observation": False,
|
|||
|
|
"interface_panel": [],
|
|||
|
|
"manual_control": False,
|
|||
|
|
"show_fps": False,
|
|||
|
|
"debug": False,
|
|||
|
|
|
|||
|
|
# 物理引擎优化
|
|||
|
|
"physics_world_step_size": 0.02,
|
|||
|
|
"decision_repeat": 5,
|
|||
|
|
|
|||
|
|
"sequential_seed": True,
|
|||
|
|
"reactive_traffic": True,
|
|||
|
|
|
|||
|
|
# 车道检测与过滤配置
|
|||
|
|
"filter_offroad_vehicles": True, # 过滤非车道区域的车辆
|
|||
|
|
"lane_tolerance": 3.0,
|
|||
|
|
"max_controlled_vehicles": 15, # 限制车辆数以提升性能
|
|||
|
|
},
|
|||
|
|
agent2policy=ConstantVelocityPolicy(target_speed=50)
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 【关键优化】启用激光雷达缓存
|
|||
|
|
# 每3帧才重新计算激光雷达,其余帧使用缓存
|
|||
|
|
# 可将激光雷达计算量减少到原来的1/3
|
|||
|
|
env.lidar_cache_interval = 3
|
|||
|
|
|
|||
|
|
obs = env.reset(0)
|
|||
|
|
|
|||
|
|
# 性能统计
|
|||
|
|
start_time = time.time()
|
|||
|
|
total_steps = 0
|
|||
|
|
|
|||
|
|
print("=" * 60)
|
|||
|
|
print("极致性能模式")
|
|||
|
|
print("激光雷达优化:80→40束 (前向), 10→6束 (侧向+车道线)")
|
|||
|
|
print("激光雷达缓存:每3帧计算一次,中间帧使用缓存")
|
|||
|
|
print("预期性能提升:3-5倍")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
for step in range(10000):
|
|||
|
|
actions = {
|
|||
|
|
aid: env.controlled_agents[aid].policy.act()
|
|||
|
|
for aid in env.controlled_agents
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
obs, rewards, dones, infos = env.step(actions)
|
|||
|
|
total_steps += 1
|
|||
|
|
|
|||
|
|
# 每100步输出一次性能统计
|
|||
|
|
if step % 100 == 0 and step > 0:
|
|||
|
|
elapsed = time.time() - start_time
|
|||
|
|
fps = total_steps / elapsed
|
|||
|
|
print(f"Step {step:4d}: FPS = {fps:6.2f}, 车辆数 = {len(env.controlled_agents):3d}, "
|
|||
|
|
f"平均步时间 = {1000/fps:.2f}ms")
|
|||
|
|
|
|||
|
|
if dones["__all__"]:
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
# 最终统计
|
|||
|
|
elapsed = time.time() - start_time
|
|||
|
|
fps = total_steps / elapsed
|
|||
|
|
print("\n" + "=" * 60)
|
|||
|
|
print(f"总计: {total_steps} 步")
|
|||
|
|
print(f"耗时: {elapsed:.2f}s")
|
|||
|
|
print(f"平均FPS: {fps:.2f}")
|
|||
|
|
print(f"单步平均耗时: {1000/fps:.2f}ms")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
env.close()
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
# 解析命令行参数
|
|||
|
|
enable_logging = "--log" in sys.argv or "-l" in sys.argv
|
|||
|
|
|
|||
|
|
# 提取自定义日志文件名
|
|||
|
|
log_file = None
|
|||
|
|
for arg in sys.argv:
|
|||
|
|
if arg.startswith("--log-file="):
|
|||
|
|
log_file = arg.split("=")[1]
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if enable_logging:
|
|||
|
|
# 使用日志记录
|
|||
|
|
log_dir = os.path.join(os.path.dirname(__file__), "logs")
|
|||
|
|
with setup_logger(log_file=log_file or "run_fast.log", log_dir=log_dir):
|
|||
|
|
main(enable_logging=True)
|
|||
|
|
else:
|
|||
|
|
# 普通运行(只输出到终端)
|
|||
|
|
print("💡 提示: 使用 --log 或 -l 参数启用日志记录")
|
|||
|
|
print("-" * 60)
|
|||
|
|
main(enable_logging=False)
|
|||
|
|
|