当前位置: 首页 > 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…...

统考通过率最高传媒艺考机构艺天影视

大家好&#xff0c;我是深耕传媒艺考行业8年的教学顾问。近年来&#xff0c;山西的传媒艺考竞争愈发激烈&#xff0c;以2026届为例&#xff0c;播音统考近万人报考&#xff0c;考生和家长无不感到压力山大。面对如此激烈的竞争&#xff0c;很多同学和家长在选择艺考培训机构时感…...

别只当题做!我把CTFshow Web信息搜集题(11-20)变成了真实漏洞挖掘指南

从CTF到实战&#xff1a;Web信息泄露漏洞的企业级攻防指南 当CTF技巧遇上真实世界 深夜两点&#xff0c;某电商平台的安全工程师收到告警——核心数据库正在被异常下载。溯源发现&#xff0c;攻击者竟是通过一个被遗忘的测试接口获取了服务器目录遍历权限。这个场景与CTFshow W…...

聚焦新型有效成分,守护爱宠健康

养宠过程中&#xff0c;用药安全是守护宠物健康的核心关键。多数养宠人选药时&#xff0c;常只关注品牌、价格或口碑&#xff0c;却忽略了药物有效成分这一核心根本。随着宠物医药技术迭代升级&#xff0c;多款新型专用药用成分落地应用&#xff0c;凭借精准、安全、低耐药的优…...

AI Agent 艺术创作能力探索

AI Agent 艺术创作能力探索:从生成式工具到自主创作主体的范式跃迁 关键词 AI Agent、生成式艺术、多模态创作、自主创作系统、计算美学、大模型推理、人机协同创作 摘要 本文从第一性原理出发,系统拆解AI Agent艺术创作的底层逻辑、技术架构、实现机制与产业价值。我们将…...

Sitara处理器PRU-ICSS架构解析:工业自动化信息传输系统设计实战

1. 项目概述&#xff1a;工业自动化中的信息传输挑战与Sitara方案在工业自动化领域&#xff0c;信息传输的实时性、可靠性与灵活性&#xff0c;直接决定了生产线的“智商”与“反应速度”。想象一下&#xff0c;一条高速运转的汽水装瓶线&#xff0c;如果无法在毫秒级内感知到原…...

避开PostgreSQL逻辑复制的那些坑:从复制标识(Replica Identity)配置到性能调优指南

PostgreSQL逻辑复制深度优化&#xff1a;从复制标识陷阱到高性能配置实战 在数据库架构设计中&#xff0c;逻辑复制作为PostgreSQL的核心功能之一&#xff0c;为数据分发、高可用和实时分析提供了强大支持。但许多中高级用户在实际部署时&#xff0c;往往会在复制标识配置和性能…...

OpenMMLab环境配置避坑指南:从CUDA 11.6到PyTorch 1.13,如何为MMRotate 0.3.4找到对的mmcv-full?

OpenMMLab精准环境配置实战&#xff1a;破解CUDA 11.6与PyTorch 1.13下的mmcv-full匹配困局 当你在RTX 3060显卡上尝试运行MMRotate 0.3.4时&#xff0c;突然发现控制台抛出ImportError: cannot import name get_dist_info from mmcv.runner——这往往是深度学习工程师与OpenMM…...

行业白皮书 GEO 化转 HTML + 结构化,AI 引用率提升 50%

你花了 3 个月写了一本白皮书&#xff0c;排版精美&#xff0c;数据详实。发出去之后&#xff0c;阅读量不到 500。更扎心的是&#xff0c;当用户在 ChatGPT、Perplexity 里提问时&#xff0c;引用的是竞品那篇网页版的报告&#xff0c;而不是你的 PDF。这不是运气问题&#xf…...

避坑指南:为什么你的mqtt.fx连不上OneNET?Token生成与参数配置的3个关键细节

避坑指南&#xff1a;为什么你的mqtt.fx连不上OneNET&#xff1f;Token生成与参数配置的3个关键细节 当你深夜调试MQTT设备&#xff0c;反复检查代码却依然看到刺眼的"离线"状态时&#xff0c;那种挫败感我深有体会。OneNET作为国内主流物联网平台&#xff0c;其MQTT…...

保姆级教程:用Python+OpenCV高效切割Potsdam语义分割数据集(附完整代码)

PythonOpenCV实战&#xff1a;Potsdam语义分割数据集高效切割全流程解析 第一次接触Potsdam数据集时&#xff0c;面对那些6000x6000像素的巨幅航拍图像&#xff0c;我的GPU在训练时直接报显存不足的错误。这让我意识到&#xff0c;高分辨率图像的切割预处理不是可选项&#xf…...