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

252 lines
6.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
高级群体智能示例
演示复杂的群体行为和交互
"""
from panda3d.core import Vec3
import random
def create_bird_flock(swarm_manager):
"""
创建鸟类群体
"""
print("创建鸟类群体...")
# 设置群体类型
swarm_manager.update_swarm_type("鸟类")
# 配置参数
swarm_manager.config.set("member_count", 50)
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.reset()
print("鸟类群体创建完成包含50个成员")
def create_fish_school(swarm_manager):
"""
创建鱼群
"""
print("创建鱼群...")
# 设置群体类型
swarm_manager.update_swarm_type("鱼类")
# 配置参数
swarm_manager.config.set("member_count", 30)
swarm_manager.config.set("cohesion_weight", 1.5)
swarm_manager.config.set("separation_weight", 2.0)
swarm_manager.config.set("alignment_weight", 1.2)
swarm_manager.config.set("perception_radius", 8.0)
swarm_manager.config.set("max_speed", 6.0)
# 重新创建群体
swarm_manager.reset()
print("鱼群创建完成包含30个成员")
def create_insect_swarm(swarm_manager):
"""
创建昆虫群体
"""
print("创建昆虫群体...")
# 设置群体类型
swarm_manager.update_swarm_type("昆虫")
# 启用游走行为
swarm_manager.config.set("wander_enabled", True)
swarm_manager.config.set("wander_weight", 0.8)
# 配置参数
swarm_manager.config.set("member_count", 100)
swarm_manager.config.set("cohesion_weight", 0.8)
swarm_manager.config.set("separation_weight", 1.2)
swarm_manager.config.set("alignment_weight", 0.6)
swarm_manager.config.set("perception_radius", 5.0)
swarm_manager.config.set("max_speed", 10.0)
# 重新创建群体
swarm_manager.reset()
print("昆虫群体创建完成包含100个成员")
def add_obstacles(swarm_manager, count=5):
"""
添加障碍物
"""
print(f"添加{count}个障碍物...")
for i in range(count):
# 随机位置
position = Vec3(
random.uniform(-30, 30),
random.uniform(-30, 30),
random.uniform(5, 20)
)
# 随机半径
radius = random.uniform(2, 5)
# 创建障碍物
swarm_manager.create_obstacle(position, radius)
print(f"障碍物添加完成")
def add_predators(swarm_manager, count=2):
"""
添加捕食者
"""
print(f"添加{count}个捕食者...")
for i in range(count):
# 随机位置
position = Vec3(
random.uniform(-40, 40),
random.uniform(-40, 40),
random.uniform(5, 25)
)
# 创建捕食者
swarm_manager.create_predator(position)
print(f"捕食者添加完成")
def create_v_formation(swarm_manager):
"""
创建V字形队形
"""
print("创建V字形队形...")
# 启用队形保持
swarm_manager.config.set("formation_enabled", True)
swarm_manager.config.set("formation_type", "V字形")
swarm_manager.config.set("formation_weight", 2.0)
# 设置目标
target = Vec3(0, 50, 15)
swarm_manager.set_target(target)
swarm_manager.config.set("seek_enabled", True)
swarm_manager.config.set("seek_weight", 1.5)
print("V字形队形创建完成")
def create_circular_formation(swarm_manager):
"""
创建圆形队形
"""
print("创建圆形队形...")
# 启用队形保持
swarm_manager.config.set("formation_enabled", True)
swarm_manager.config.set("formation_type", "圆形")
swarm_manager.config.set("formation_weight", 1.5)
print("圆形队形创建完成")
def create_path_following(swarm_manager):
"""
创建路径跟随场景
"""
print("创建路径跟随场景...")
# 定义路径点
path = [
Vec3(-30, -30, 10),
Vec3(0, -40, 15),
Vec3(30, -30, 10),
Vec3(40, 0, 20),
Vec3(30, 30, 10),
Vec3(0, 40, 15),
Vec3(-30, 30, 10),
Vec3(-40, 0, 20),
]
# 设置路径
swarm_manager.set_path(path)
# 启用路径跟随
swarm_manager.config.set("path_following_enabled", True)
swarm_manager.config.set("path_weight", 2.0)
swarm_manager.config.set("prediction_distance", 15.0)
print("路径跟随场景创建完成")
def create_hunting_scenario(swarm_manager):
"""
创建捕猎场景
"""
print("创建捕猎场景...")
# 创建小规模鸟类群体
swarm_manager.update_swarm_type("鸟类")
swarm_manager.config.set("member_count", 20)
swarm_manager.reset()
# 添加捕食者
predator_pos = Vec3(-20, -20, 15)
swarm_manager.create_predator(predator_pos)
# 启用捕食者躲避
swarm_manager.config.set("predator_avoid_enabled", True)
swarm_manager.config.set("predator_avoid_weight", 4.0)
swarm_manager.config.set("predator_radius", 20.0)
print("捕猎场景创建完成")
def create_obstacle_avoidance_scenario(swarm_manager):
"""
创建避障场景
"""
print("创建避障场景...")
# 创建中等规模群体
swarm_manager.config.set("member_count", 30)
swarm_manager.reset()
# 添加多个障碍物
obstacles = [
(Vec3(-10, 0, 10), 5),
(Vec3(10, 0, 15), 4),
(Vec3(0, 10, 12), 6),
(Vec3(0, -10, 8), 3),
]
for pos, radius in obstacles:
swarm_manager.create_obstacle(pos, radius)
# 设置移动目标
target = Vec3(0, 30, 15)
swarm_manager.set_target(target)
swarm_manager.config.set("seek_enabled", True)
# 启用避障
swarm_manager.config.set("obstacle_avoidance_enabled", True)
swarm_manager.config.set("obstacle_weight", 3.0)
print("避障场景创建完成")
def run_advanced_example(swarm_manager):
"""
运行高级示例
"""
print("=== 群体智能高级示例 ===")
# 创建鸟类群体
create_bird_flock(swarm_manager)
# 添加障碍物
add_obstacles(swarm_manager, 3)
# 添加捕食者
add_predators(swarm_manager, 1)
# 启用多种行为
swarm_manager.config.set("wander_enabled", True)
swarm_manager.config.set("boundary_enabled", True)
print("高级示例设置完成,观察群体的复杂行为")