172 lines
5.3 KiB
Python
172 lines
5.3 KiB
Python
"""
|
||
性能测试示例
|
||
测试群体智能插件的性能表现
|
||
"""
|
||
|
||
import time
|
||
from panda3d.core import Vec3
|
||
|
||
def performance_test(swarm_manager, member_counts=[50, 100, 200, 500]):
|
||
"""
|
||
性能测试函数
|
||
测试不同群体规模下的性能表现
|
||
"""
|
||
print("=== 群体智能插件性能测试 ===")
|
||
|
||
# 保存原始设置
|
||
original_count = swarm_manager.config.get("member_count", 20)
|
||
|
||
for count in member_counts:
|
||
print(f"\n测试群体规模: {count} 个成员")
|
||
|
||
# 设置群体数量
|
||
swarm_manager.config.set("member_count", count)
|
||
swarm_manager.reset()
|
||
|
||
# 运行测试
|
||
test_duration = 5.0 # 测试5秒
|
||
start_time = time.time()
|
||
frame_count = 0
|
||
|
||
# 简单的性能测试循环
|
||
while time.time() - start_time < test_duration:
|
||
swarm_manager._update_swarm()
|
||
frame_count += 1
|
||
|
||
# 计算FPS
|
||
elapsed_time = time.time() - start_time
|
||
fps = frame_count / elapsed_time
|
||
|
||
print(f" 帧数: {frame_count}")
|
||
print(f" 耗时: {elapsed_time:.2f} 秒")
|
||
print(f" 平均FPS: {fps:.2f}")
|
||
|
||
# 显示群体统计信息
|
||
stats = swarm_manager.get_stats()
|
||
print(f" 群体统计: {stats}")
|
||
|
||
# 恢复原始设置
|
||
swarm_manager.config.set("member_count", original_count)
|
||
swarm_manager.reset()
|
||
|
||
print("\n性能测试完成")
|
||
|
||
def behavior_performance_test(swarm_manager):
|
||
"""
|
||
行为性能测试
|
||
测试不同行为对性能的影响
|
||
"""
|
||
print("\n=== 行为性能测试 ===")
|
||
|
||
# 基准测试(仅基本Boids行为)
|
||
print("\n基准测试(仅基本Boids行为):")
|
||
swarm_manager.config.set("obstacle_avoidance_enabled", False)
|
||
swarm_manager.config.set("wander_enabled", False)
|
||
swarm_manager.config.set("predator_avoid_enabled", False)
|
||
swarm_manager.config.set("formation_enabled", False)
|
||
swarm_manager.config.set("path_following_enabled", False)
|
||
|
||
baseline_duration = run_behavior_test(swarm_manager, 3.0)
|
||
baseline_fps = 3.0 / baseline_duration if baseline_duration > 0 else 0
|
||
print(f" 基准FPS: {baseline_fps:.2f}")
|
||
|
||
# 避障行为测试
|
||
print("\n避障行为测试:")
|
||
swarm_manager.config.set("obstacle_avoidance_enabled", True)
|
||
# 添加一些障碍物
|
||
for i in range(5):
|
||
pos = Vec3(i*10-20, 0, 10)
|
||
swarm_manager.create_obstacle(pos, 3.0)
|
||
|
||
obstacle_duration = run_behavior_test(swarm_manager, 3.0)
|
||
obstacle_fps = 3.0 / obstacle_duration if obstacle_duration > 0 else 0
|
||
print(f" 避障FPS: {obstacle_fps:.2f}")
|
||
print(f" 性能下降: {((baseline_fps - obstacle_fps) / baseline_fps * 100):.1f}%")
|
||
|
||
# 清理障碍物
|
||
swarm_manager.obstacles.clear()
|
||
|
||
# 游走行为测试
|
||
print("\n游走行为测试:")
|
||
swarm_manager.config.set("obstacle_avoidance_enabled", False)
|
||
swarm_manager.config.set("wander_enabled", True)
|
||
|
||
wander_duration = run_behavior_test(swarm_manager, 3.0)
|
||
wander_fps = 3.0 / wander_duration if wander_duration > 0 else 0
|
||
print(f" 游走FPS: {wander_fps:.2f}")
|
||
print(f" 性能下降: {((baseline_fps - wander_fps) / baseline_fps * 100):.1f}%")
|
||
|
||
# 恢复默认设置
|
||
swarm_manager.config.set("wander_enabled", False)
|
||
|
||
print("\n行为性能测试完成")
|
||
|
||
def run_behavior_test(swarm_manager, duration):
|
||
"""
|
||
运行行为测试
|
||
"""
|
||
start_time = time.time()
|
||
frame_count = 0
|
||
|
||
while time.time() - start_time < duration:
|
||
swarm_manager._update_swarm()
|
||
frame_count += 1
|
||
|
||
return time.time() - start_time
|
||
|
||
def stress_test(swarm_manager):
|
||
"""
|
||
压力测试
|
||
测试极端条件下的性能表现
|
||
"""
|
||
print("\n=== 压力测试 ===")
|
||
|
||
# 极大群体规模
|
||
print("\n极大群体规模测试 (1000个成员):")
|
||
original_count = swarm_manager.config.get("member_count", 20)
|
||
swarm_manager.config.set("member_count", 1000)
|
||
swarm_manager.reset()
|
||
|
||
duration = run_behavior_test(swarm_manager, 5.0)
|
||
fps = 5.0 / duration if duration > 0 else 0
|
||
print(f" FPS: {fps:.2f}")
|
||
|
||
# 恢复原始设置
|
||
swarm_manager.config.set("member_count", original_count)
|
||
swarm_manager.reset()
|
||
|
||
# 大量障碍物
|
||
print("\n大量障碍物测试 (100个障碍物):")
|
||
for i in range(100):
|
||
pos = Vec3(
|
||
(i % 10) * 10 - 45,
|
||
(i // 10) * 10 - 45,
|
||
10
|
||
)
|
||
swarm_manager.create_obstacle(pos, 2.0)
|
||
|
||
duration = run_behavior_test(swarm_manager, 3.0)
|
||
fps = 3.0 / duration if duration > 0 else 0
|
||
print(f" FPS: {fps:.2f}")
|
||
|
||
# 清理障碍物
|
||
swarm_manager.obstacles.clear()
|
||
|
||
print("\n压力测试完成")
|
||
|
||
def run_all_performance_tests(swarm_manager):
|
||
"""
|
||
运行所有性能测试
|
||
"""
|
||
print("开始运行所有性能测试...")
|
||
|
||
# 基本性能测试
|
||
performance_test(swarm_manager)
|
||
|
||
# 行为性能测试
|
||
behavior_performance_test(swarm_manager)
|
||
|
||
# 压力测试
|
||
stress_test(swarm_manager)
|
||
|
||
print("\n所有性能测试完成!") |