""" 高级群体智能示例 演示使用高级Boids算法和优化功能 """ from panda3d.core import Vec3 import random import time def create_optimized_swarm(swarm_manager): """ 创建优化的群体 使用空间分区和高级行为 """ print("创建优化的群体...") # 配置高级参数 swarm_manager.config.set("member_count", 200) # 增加群体规模 swarm_manager.config.set("cohesion_weight", 1.2) swarm_manager.config.set("separation_weight", 1.8) swarm_manager.config.set("alignment_weight", 1.0) swarm_manager.config.set("perception_radius", 15.0) swarm_manager.config.set("max_speed", 8.0) # 启用物理效果 swarm_manager.config.set("gravity_enabled", True) swarm_manager.config.set("air_resistance_enabled", True) # 启用空间分区优化 swarm_manager.config.set("spatial_partitioning", True) swarm_manager.config.set("neighbor_search_optimization", True) # 重新创建群体 swarm_manager.reset() print(f"优化群体创建完成,包含{len(swarm_manager.members)}个成员") def create_complex_obstacles(swarm_manager, count=20): """ 创建复杂障碍物环境 """ print(f"创建{count}个复杂障碍物...") for i in range(count): # 随机位置 position = Vec3( random.uniform(-40, 40), random.uniform(-40, 40), random.uniform(5, 25) ) # 随机半径 radius = random.uniform(1, 8) # 创建障碍物 swarm_manager.create_obstacle(position, radius) print(f"复杂障碍物创建完成") def create_hierarchical_flock(swarm_manager): """ 创建分层群体结构 包含领导者和跟随者 """ print("创建分层群体结构...") # 标记前10%的成员为领导者 leader_count = max(1, len(swarm_manager.members) // 10) for i, member in enumerate(swarm_manager.members): if i < leader_count: member['is_leader'] = True # 设置领导者颜色 if 'node' in member: member['node'].setColor(0, 1, 0, 1) # 绿色 else: member['is_leader'] = False # 设置跟随者颜色 if 'node' in member: member['node'].setColor(1, 1, 1, 1) # 白色 # 调整领导者参数 swarm_manager.config.set("leader_cohesion_weight", 2.0) swarm_manager.config.set("leader_separation_weight", 1.0) print(f"分层群体结构创建完成,{leader_count}个领导者") def create_dynamic_environment(swarm_manager): """ 创建动态环境 包括移动障碍物和变化的目标 """ print("创建动态环境...") # 添加移动障碍物 moving_obstacle = { 'position': Vec3(0, 0, 15), 'radius': 5.0, 'velocity': Vec3(2, 1, 0), 'bounds': {'min_x': -30, 'max_x': 30, 'min_y': -30, 'max_y': 30} } swarm_manager.moving_obstacles = [moving_obstacle] # 设置移动目标 swarm_manager.set_target(Vec3(20, 20, 15)) swarm_manager.config.set("seek_enabled", True) print("动态环境创建完成") def update_dynamic_environment(swarm_manager, dt): """ 更新动态环境 移动障碍物和变化目标 """ # 更新移动障碍物 if hasattr(swarm_manager, 'moving_obstacles'): for obstacle in swarm_manager.moving_obstacles: # 移动障碍物 obstacle['position'] += obstacle['velocity'] * dt # 边界反弹 bounds = obstacle['bounds'] if obstacle['position'].x < bounds['min_x'] or obstacle['position'].x > bounds['max_x']: obstacle['velocity'].x *= -1 if obstacle['position'].y < bounds['min_y'] or obstacle['position'].y > bounds['max_y']: obstacle['velocity'].y *= -1 # 保持在边界内 obstacle['position'].x = max(bounds['min_x'], min(bounds['max_x'], obstacle['position'].x)) obstacle['position'].y = max(bounds['min_y'], min(bounds['max_y'], obstacle['position'].y)) # 定期改变目标位置 if not hasattr(swarm_manager, 'last_target_change'): swarm_manager.last_target_change = time.time() if time.time() - swarm_manager.last_target_change > 10.0: # 每10秒改变一次目标 new_target = Vec3( random.uniform(-30, 30), random.uniform(-30, 30), random.uniform(10, 25) ) swarm_manager.set_target(new_target) swarm_manager.last_target_change = time.time() def create_performance_test(swarm_manager): """ 创建性能测试场景 """ print("创建性能测试场景...") # 创建大规模群体 swarm_manager.config.set("member_count", 500) swarm_manager.reset() # 添加大量障碍物 create_complex_obstacles(swarm_manager, 50) # 启用所有优化 swarm_manager.config.set("spatial_partitioning", True) swarm_manager.config.set("neighbor_search_optimization", True) swarm_manager.config.set("gravity_enabled", True) swarm_manager.config.set("air_resistance_enabled", True) print("性能测试场景创建完成") def run_advanced_example(swarm_manager): """ 运行高级示例 """ print("=== 高级群体智能示例 ===") # 创建优化群体 create_optimized_swarm(swarm_manager) # 创建复杂环境 create_complex_obstacles(swarm_manager, 10) create_hierarchical_flock(swarm_manager) create_dynamic_environment(swarm_manager) print("高级示例设置完成") print("观察群体的复杂行为和优化性能") return update_dynamic_environment