当前位置: 首页 > news >正文

洪水灾害多智能体分布式模拟示例代码

1. 环境定义:支持灾害动态、地理数据和分布式架构

import numpy as np
import random
import matplotlib.pyplot as plt# 新疆主要城市及邻接关系
XINJIANG_CITIES = {'Urumqi': ['Changji', 'Shihezi'],'Changji': ['Urumqi', 'Shihezi', 'Turpan'],'Shihezi': ['Urumqi', 'Changji', 'Karamay'],'Karamay': ['Shihezi'],'Turpan': ['Changji']
}CITY_COORDINATES = {'Urumqi': (43.8256, 87.6168),'Changji': (44.0169, 87.3082),'Shihezi': (44.3024, 86.0369),'Karamay': (45.5798, 84.8892),'Turpan': (42.9513, 89.1895)
}class XinjiangFloodEnvironment:def __init__(self, cities, max_steps=50, disaster_spread_prob=0.3):"""新疆多城市洪水灾害环境。参数:- cities: 城市及邻接关系字典。- max_steps: 每回合最大步数。- disaster_spread_prob: 灾害扩散概率。"""self.cities = citiesself.city_list = list(cities.keys())self.num_cities = len(self.city_list)self.max_steps = max_stepsself.disaster_spread_prob = disaster_spread_probself.reset()def reset(self):""" 重置环境,初始化灾害和资源分布。 """self.steps = 0self.disaster_status = {city: 0 for city in self.city_list}  # 灾害状态:0为无灾,1为灾害中self.resource_status = {city: 5 for city in self.city_list}  # 每城市初始资源disaster_city = random.choice(self.city_list)self.disaster_status[disaster_city] = 1  # 随机选择灾害城市return self._get_state()def _get_state(self):""" 获取当前状态,包含灾害和资源信息。 """return {'disaster_status': self.disaster_status,'resource_status': self.resource_status}def _spread_disaster(self):""" 模拟灾害扩散。 """new_disaster_status = self.disaster_status.copy()for city, status in self.disaster_status.items():if status == 1:  # 当前城市有灾害for neighbor in self.cities[city]:if random.random() < self.disaster_spread_prob:new_disaster_status[neighbor] = 1self.disaster_status = new_disaster_statusdef step(self, actions):"""执行动作。参数:- actions: 每个城市的动作字典 {city: allocated_resources}。返回:- 下一状态- 总奖励- 是否结束"""total_reward = 0for city, allocated_resources in actions.items():if self.disaster_status[city] == 1:  # 如果该城市有灾害if allocated_resources > 0:self.resource_status[city] -= allocated_resourcesif self.resource_status[city] < 0:  # 资源不能为负allocated_resources += self.resource_status[city]self.resource_status[city] = 0self.disaster_status[city] = 0  # 灾害解决total_reward += 10  # 成功解决灾害else:total_reward -= 5  # 未响应灾害的惩罚self.steps += 1if self.steps >= self.max_steps or sum(self.disaster_status.values()) == 0:return self._get_state(), total_reward, True  # 所有灾害解决或步数结束# 更新灾害状态(灾害扩散)self._spread_disaster()return self._get_state(), total_reward, False  # 继续运行def render(self):""" 可视化当前环境状态。 """disaster_cities = [city for city, status in self.disaster_status.items() if status == 1]print(f"Step {self.steps}:")print(f"Disaster Cities: {disaster_cities}")print(f"Resource Status: {self.resource_status}")plt.figure(figsize=(8, 8))for city, (lat, lon) in CITY_COORDINATES.items():plt.scatter(lon, lat, color='blue' if city in self.resource_status else 'red', s=100)plt.text(lon, lat, city, fontsize=10)plt.xlabel("Longitude")plt.ylabel("Latitude")plt.title("Xinjiang Flood Simulation")plt.show()

2. 分布式多智能体实现

class DistributedAgent:def __init__(self, city, action_size):"""分布式智能体。参数:- city: 智能体负责的城市。- action_size: 动作空间大小。"""self.city = cityself.action_size = action_sizeself.epsilon = 1.0  # 探索概率self.epsilon_decay = 0.995self.epsilon_min = 0.01def act(self, state, available_resources):""" 基于当前状态和资源选择动作。 """if np.random.rand() <= self.epsilon:return random.randint(0, available_resources)  # 随机分配资源return available_resources  # 简化决策:全分配def update_epsilon(self):""" 衰减探索概率。 """if self.epsilon > self.epsilon_min:self.epsilon *= self.epsilon_decay

3. 动态奖励函数

def calculate_reward(disaster_map, response_time, resources_used, weights):"""计算动态奖励。参数:- disaster_map: 当前灾害状态。- response_time: 当前响应时间。- resources_used: 当前使用的资源量。- weights: 奖励函数的权重 (dict)。返回:- reward: 总奖励值。"""covered_disasters = disaster_map.sum()  # 未解决的灾害数量return (weights['covered'] * (1 - covered_disasters) -weights['time'] * response_time -weights['resources'] * resources_used)

4. 主训练循环

if __name__ == "__main__":env = XinjiangFloodEnvironment(XINJIANG_CITIES)  # 初始化环境agents = {city: DistributedAgent(city, 5) for city in XINJIANG_CITIES.keys()}  # 每城市一个智能体episodes = 100  # 训练轮次for e in range(episodes):state = env.reset()  # 重置环境total_reward = 0while True:actions = {}for city, agent in agents.items():available_resources = state['resource_status'][city]actions[city] = agent.act(state, available_resources)  # 每个智能体选择动作next_state, reward, done = env.step(actions)  # 执行动作total_reward += rewardif done:print(f"Episode {e+1}/{episodes}, Total Reward: {total_reward}")env.render()breakstate = next_state# 更新每个智能体的探索概率for agent in agents.values():agent.update_epsilon()

功能扩展与总结

  1. 灾害动态扩展

    • 灾害通过邻接城市扩散。
    • 动态更新灾害状态,提升模拟真实性。
  2. 多智能体分布式协作

    • 每个智能体管理自己城市的资源。
    • 集中式奖励计算与全局决策评估。
  3. 动态奖励函数

    • 同时优化响应时间、资源成本和覆盖范围。
  4. 新疆地理数据支持

    • 模拟新疆主要城市及其邻接关系。
    • 地理坐标可视化,帮助分析决策动态。

相关文章:

洪水灾害多智能体分布式模拟示例代码

1. 环境定义&#xff1a;支持灾害动态、地理数据和分布式架构 import numpy as np import random import matplotlib.pyplot as plt# 新疆主要城市及邻接关系 XINJIANG_CITIES {Urumqi: [Changji, Shihezi],Changji: [Urumqi, Shihezi, Turpan],Shihezi: [Urumqi, Changji, K…...

【前端】Node.js使用教程

目录 一、?Node.js开发环境和编译 1.1 安装Node.js 1.2 创建一个Node.js项目 1.3 编写Node.js程序 1.4 运行Node.js程序 1.5 使用Node.js模块 二、高级的Node.js编程概念和示例 2.1 异步编程 2.2 错误处理 2.3 网络请求 2.4 构建Web服务器 2.5 数据库交互 三、No…...

django33全栈班2025年004 录入数据

前言 通过前面的学习, 我们已经算是Python基本入门了. 如果你能熟练的掌握的话, 至少让你换台电脑, 在新电脑上搭建Python的开发环境肯定是没问题的. 我们呢也学习了第一行Python代码, 但是我们不知道这行代码是什么意思, 为什么能够运行, 怎么就能输出到控制台呢? 还有, …...

小白投资理财 - 看懂 EPS 每股收益

小白投资理财 - 看懂 EPS 每股收益 什么是 EPSEPS 缺陷EPS 优点EPS 跟自己比EPS 跟别人比 总结 投资一家公司就要选择会赚钱的公司&#xff0c;我们最为关心的莫过于公司的盈利能力&#xff0c;只有会下蛋的鸡才是好鸡&#xff0c;买股票为的就是获得利润。想成为一位成功的投资…...

Pandas-apply自定义函数

文章目录 一. Series的apply方法1. 一个元素一个元素的传入2. apply传入一个参数函数2.apply传入多个参数函数 二. DataFrame的apply方法1. axis参数指定按行/ 按列(默认)传入数据2. apply使用 三. apply 使用案例1. 栗子12. 栗子2-列3. 栗子3-行 四. 向量化函数1. 使用np.vect…...

github 项目分享

今天和大家分享一些github上面搜到关于卫星遥感和水环境相关的项目。 一、WaterDetect 使用端到端算法去识别水体范围的算法&#xff0c;针对哨兵2卫星遥感数据可用。 项目地址&#xff1a; https://github.com/cordmaur/WaterDetect 二、DeepWaterMap 深度卷积神经网络去…...

与你共度的烟火日常

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 我和她一起收拾完屋子&#xff0c;忙完已经中午了。她说&#xff1a;“咱们去趟超市吧&…...

基于Python的社交音乐分享平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Kafka的acks机制和ISR列表

Kafka 是一个流行的分布式流处理平台&#xff0c;用于构建实时数据流管道和应用程序。在 Kafka 中&#xff0c;acks 机制和 ISR&#xff08;In-Sync Replicas&#xff09;列表是两个重要的概念&#xff0c;它们共同确保消息的持久性和可靠性。 acks 机制 acks 机制是 Kafka 生…...

FreeRTOS: ISR(中断服务例程)和 TCB(任务控制块)

在讨论 ISR&#xff08;中断服务例程&#xff09;和 TCB&#xff08;任务控制块&#xff0c;Task Control Block&#xff09;时&#xff0c;我们实际上是在探讨 FreeRTOS 中两个不同但又相互关联的概念&#xff1a;一个是用于处理硬件或软件触发的中断事件&#xff0c;另一个是…...

【Spring】Spring DI(依赖注入)详解—自动装配—byType实现原理

一、引言 依赖注入&#xff08;Dependency Injection, DI&#xff09;是Spring框架的核心特性之一&#xff0c;它通过控制反转&#xff08;Inversion of Control, IoC&#xff09;来管理对象的生命周期和依赖关系。在实际应用中&#xff0c;DI不仅提高了代码的可维护性和可测试…...

015-spring-动态原理、AOP的xml和注解方式

强制使用cglib动态代理 spring-AOP的使用...

linux更换yum源

1.备份系统源文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak2.下载国内的yum源到/etc/yum.repos.d/CentOS-Base.repo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo如无法使用wget命令也可以…...

跨年战揭开本地生活新赛季:美团、抖音和快手争夺冰雪经济

元旦将至&#xff0c;冬季文旅消费渐至高潮。 2024年的文旅消费市场延续了去年冰雪游的热度&#xff0c;不断创下年内话题和热度新高。美团旅行数据显示&#xff0c;12月以来&#xff0c;雪场夜滑搜索热度同比增长65%&#xff0c;TOP5搜索城市分别是北京、乌鲁木齐、张家口、吉…...

文件传输工具FTransferor<优化篇>

在上一篇文章中&#xff0c;我们详细探讨了FTransferor文件传输工具的设计与实现&#xff0c;并展示了它在局域网文件传输方面的高效性。然而&#xff0c;随着互联网应用场景的不断丰富&#xff0c;传统的基于 TCP/UDP 的传输方式已经无法满足部分开发者的需求。特别是在跨平台…...

【最新】17个一站式数据集成平台案例PPT下载(Apache SeaTunnel )

17个Apache SeaTunnel案例下载见附件&#xff01; 开发篇 1.Apache SeaTunnel——OLAP 引擎的数据动脉 1.1项目定位——EtLT 时代的新一代数据集成平台 1.2Apache SeaTunnel 核心功能 1.3Apache SeaTunnel 在 OLAP 场景下的应用 1.4WhaleTunnel 产品特性 2.教你从头到尾开发一…...

【每日学点鸿蒙知识】子窗口方向、RichEdit不居中、本地资源缓存给web、Json转对象丢失方法、监听状态变量数组中内容改变

1、HarmonyOS 应用新建子窗口设置显示方向未生效&#xff1f; 子窗口getPreferredOrientation获取到的是横向 设置没问题&#xff0c;但是ui显示还是纵向的 直接设置主窗口的方向即可。参考demo&#xff1a; import window from ohos.window;Entry Component struct Index {…...

【AI绘画】Midjourney前置指令/imagine与单图指令详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;Midjourney前置指令/imagine什么是前置指令&#xff1f;/imaginepromptUpscale&#xff08;图像分离&#xff09;Variations&#xff08;变化&#xff09;&#x1f504;&a…...

【鸿蒙NEXT】鸿蒙里面类似iOS的Keychain——关键资产(@ohos.security.asset)实现设备唯一标识

前言 在iOS开发中Keychain 是一个非常安全的存储系统&#xff0c;用于保存敏感信息&#xff0c;如密码、证书、密钥等。与 NSUserDefaults 或文件系统不同&#xff0c;Keychain 提供了更高的安全性&#xff0c;因为它对数据进行了加密&#xff0c;并且只有经过授权的应用程序才…...

学习笔记 --C#基础其他知识点(数据结构)

C#中的数据结构《二》–视频学习笔记 在数据结构的分类&#xff1a; 1.集合 2.线性 3.树形 4.图状结构 数据结构是数据在程序中的存储结构&#xff0c;和基本的数据操作 算法&#xff1a;解决问题的解决思路&#xff0c;基于数据结构 本课程包括&#xff1a;线性表&#xff…...

基于51单片机的L298N直流电机驱动设计方案(含Proteus8.9仿真文件与C语言KEIL...

项目&#xff1a;L298N驱动电机——基于51单片机的电机驱动 设计&#xff1b;proteus 仿真&#xff08;版本8.9-可提供软件安装包&#xff09; 主控&#xff1a;51单片机 外设&#xff1a;液晶lcd1602&#xff0c;直流电机&#xff0c;led 程序&#xff1a;C语言&#xff0c;KE…...

磁力搜索终极指南:magnetW跨平台聚合工具完整教程

磁力搜索终极指南&#xff1a;magnetW跨平台聚合工具完整教程 【免费下载链接】magnetW [已失效&#xff0c;不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 在数字资源日益丰富的今天&#xff0c;高效获取磁力链接成为许多用户的刚需。magnetW作为一款…...

HBase Shell 新手必知的10个高效命令(附实战示例)

HBase Shell 高效命令实战指南&#xff1a;从入门到精通 第一次接触HBase Shell时&#xff0c;那种面对命令行界面的茫然感我还记忆犹新。作为HBase数据库的交互式接口&#xff0c;Shell命令看似简单&#xff0c;实则蕴含着强大的数据处理能力。本文将分享我在实际项目中总结出…...

Autosar最小系统搭建避坑指南:从Det到BswM,那些容易忽略的模块依赖与自动修复技巧

Autosar最小系统搭建避坑指南&#xff1a;从Det到BswM&#xff0c;那些容易忽略的模块依赖与自动修复技巧 在Autosar工程实践中&#xff0c;搭建最小系统往往是开发者面临的第一个实质性挑战。不同于简单的"Hello World"式验证&#xff0c;一个真正可运行的Autosar最…...

ClearerVoice-Studio多场景落地:直播回放降噪、远程会议分离、访谈提取

ClearerVoice-Studio多场景落地&#xff1a;直播回放降噪、远程会议分离、访谈提取 1. 开箱即用的语音处理利器 在日常工作和内容创作中&#xff0c;我们经常遇到这样的困扰&#xff1a;直播回放背景噪音太大影响观看体验&#xff0c;远程会议多人同时发言难以听清&#xff0…...

OpenClaw权限控制实战:千问3.5-35B-A3B-FP8敏感操作保护方案

OpenClaw权限控制实战&#xff1a;千问3.5-35B-A3B-FP8敏感操作保护方案 1. 为什么需要权限控制&#xff1f; 上周我在调试OpenClaw自动化脚本时&#xff0c;差点酿成一场"灾难"。当时想让AI助手帮我整理下载文件夹&#xff0c;结果一条模糊指令导致模型误删了三个…...

别再死磕理论书了!给工程新人的ANSYS Fluent CFD仿真保姆级入门路线图

工程实战派&#xff1a;ANSYS Fluent高效入门的三维突破法 刚接手第一个仿真项目时&#xff0c;我对着满屏的流体方程和复杂的软件界面手足无措。直到导师扔来一个简单的管道流动案例&#xff1a;"先别管那些公式&#xff0c;把这个压降曲线跑出来再说。"三小时后&am…...

基于深度学习的肾结石检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Django+web+训练代码+数据集)

视频演示 基于深度学习的肾结石检测系统演示目录 视频演示 1. 前言​ 2. 项目演示 2.1 用户登录界面 2.2 主界面布局 2.3 个人信息管理 2.4 多模态检测展示 2.5 检测结果保存 2.6 多模型切换 2.7 识别历史浏览 2.8 管理员管理用户信息 2.9 管理员管理识别历史 3.模…...

ICRA 2025自动叉车顶会论文拆解:ADAPT如何在真实复杂场景完成托盘搬运?

ICRA 2025 最新AGV顶会论文拆解&#xff1a;ADAPT自动叉车系统&#xff0c;如何在真实复杂户外场景完成托盘搬运&#xff1f;如果说仓库 AGV 研究已经逐渐成熟&#xff0c;那么真正更难的&#xff0c;其实是户外、非结构化、天气变化大、障碍物复杂的施工场地搬运。 这篇来自 A…...

etcd 显示连接失败

文章目录一、查看服务运行情况二、查看具体日志1. 错误原因2. 解决方法方案 1&#xff1a;修改 etcd 配置文件方案 2&#xff1a;直接修改 systemd 服务文件方案 3&#xff1a;临时测试&#xff08;不推荐生产环境&#xff09;3. 验证是否解决4. 其他注意事项配置一致性&#x…...