252 lines
6.9 KiB
Python
252 lines
6.9 KiB
Python
"""
|
||
高级群体智能示例
|
||
演示复杂的群体行为和交互
|
||
"""
|
||
|
||
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("高级示例设置完成,观察群体的复杂行为") |