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

125 lines
4.3 KiB
Python

"""
环境感知示例
演示如何使用环境感知和响应机制
"""
from panda3d.core import Vec3
import sys
import os
# 添加插件路径
plugin_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, plugin_dir)
from swarm_manager import SwarmManager
from config import Config
def create_environment_demo(world):
"""
创建环境感知演示
"""
print("创建环境感知演示...")
# 创建群体管理器
swarm_manager = SwarmManager(world)
# 配置环境感知参数
config = swarm_manager.config
# 启用环境感知
config.set("environment_awareness_enabled", True)
# 设置传感器参数
config.set("sensor_range", 20.0) # 增加传感器范围
config.set("sensor_accuracy", 0.95) # 提高传感器精度
# 设置环境响应权重
config.set("obstacle_response_weight", 2.5)
config.set("predator_response_weight", 3.5)
config.set("resource_seek_weight", 0.8)
config.set("hazard_avoid_weight", 4.0)
# 创建示例群体
swarm_manager.create_example_swarm("鸟类", 30)
# 添加环境元素
# 1. 添加障碍物
swarm_manager.create_obstacle(Vec3(10, 10, 5), 3.0)
swarm_manager.create_obstacle(Vec3(-15, 5, 8), 2.5)
swarm_manager.create_obstacle(Vec3(0, -20, 3), 4.0)
# 2. 添加捕食者
predator = swarm_manager.create_predator(Vec3(25, 0, 10))
# 3. 添加资源点
if hasattr(swarm_manager, 'environment_manager'):
swarm_manager.environment_manager.add_resource(Vec3(-10, 15, 5), "食物", 100.0)
swarm_manager.environment_manager.add_resource(Vec3(20, -10, 7), "水源", 80.0)
# 4. 添加危险区域
if hasattr(swarm_manager, 'environment_manager'):
swarm_manager.environment_manager.add_hazard(Vec3(5, 0, 5), "有毒气体", 6.0)
swarm_manager.environment_manager.add_hazard(Vec3(-25, -15, 3), "辐射区", 8.0)
# 设置目标点(让群体向目标移动,观察环境响应)
swarm_manager.set_target(Vec3(30, 30, 15))
config.set("seek_enabled", True)
print("环境感知演示创建完成")
print(f"- 群体成员数量: {len(swarm_manager.members)}")
print(f"- 障碍物数量: {len(swarm_manager.obstacles)}")
print(f"- 捕食者数量: {len(swarm_manager.predators)}")
if hasattr(swarm_manager, 'environment_manager'):
env_info = swarm_manager.environment_manager.get_environment_info()
print(f"- 资源点数量: {len(env_info.get('resources', []))}")
print(f"- 危险区域数量: {len(env_info.get('hazards', []))}")
return swarm_manager
def update_environment_demo(swarm_manager, dt):
"""
更新环境感知演示
"""
# 更新环境时间
if hasattr(swarm_manager, 'environment_manager'):
swarm_manager.environment_manager.advance_time(dt)
swarm_manager.environment_manager.update_environment_dynamics()
# 可以在这里添加动态环境变化
# 例如:移动障碍物、改变天气等
def demo_environment_awareness_features():
"""
演示环境感知特性的使用方法
"""
print("=== 环境感知特性演示 ===")
# 1. 传感器配置
print("1. 传感器配置:")
print(" - sensor_range: 传感器的感知范围")
print(" - sensor_accuracy: 传感器的精度 (0.0-1.0)")
# 2. 环境响应权重
print("2. 环境响应权重:")
print(" - obstacle_response_weight: 避障响应权重")
print(" - predator_response_weight: 躲避捕食者响应权重")
print(" - resource_seek_weight: 寻找资源响应权重")
print(" - hazard_avoid_weight: 避开危险区域响应权重")
# 3. 环境元素
print("3. 环境元素:")
print(" - obstacles: 障碍物")
print(" - predators: 捕食者")
print(" - resources: 资源点")
print(" - hazards: 危险区域")
# 4. 环境动态
print("4. 环境动态:")
print(" - time_of_day: 时间变化")
print(" - weather: 天气变化")
print(" - resource regeneration: 资源恢复")
if __name__ == "__main__":
# 如果直接运行此脚本,显示特性说明
demo_environment_awareness_features()