EG/plugins/user/swarm_intelligence/examples/advanced_example.py
2025-12-12 16:16:15 +08:00

183 lines
6.0 KiB
Python

"""
高级群体智能示例
演示使用高级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