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

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...