带画图的多无人机路径规划粒子群算法 python源程序

时间: 2023-08-02 14:06:29 浏览: 48
以下是带画图的多无人机路径规划粒子群算法 Python 源程序: ```python import numpy as np import matplotlib.pyplot as plt # 定义常量 POP_SIZE = 30 # 种群数量 N_DIM = 2 # 维度数 N_STEP = 100 # 迭代次数 N_DRONE = 3 # 无人机数量 X_RANGE = [-10, 10] # x 范围 Y_RANGE = [-10, 10] # y 范围 V_MAX = 1 # 最大速度 C1 = 2 # 学习因子1 C2 = 2 # 学习因子2 W_MAX = 0.9 # 最大惯性因子 W_MIN = 0.4 # 最小惯性因子 # 初始化位置和速度 def init_pos_vel(): pos = np.zeros((POP_SIZE, N_DRONE*N_DIM)) vel = np.zeros((POP_SIZE, N_DRONE*N_DIM)) for i in range(POP_SIZE): for j in range(N_DRONE): pos[i][j*N_DIM:(j+1)*N_DIM] = np.array([np.random.uniform(X_RANGE[0], X_RANGE[1]), np.random.uniform(Y_RANGE[0], Y_RANGE[1])]) vel[i][j*N_DIM:(j+1)*N_DIM] = np.array([np.random.uniform(-V_MAX, V_MAX), np.random.uniform(-V_MAX, V_MAX)]) return pos, vel # 适应度函数 def fitness(pos): fitness_list = np.zeros(POP_SIZE) for i in range(POP_SIZE): for j in range(N_DRONE): x = pos[i][j*N_DIM] y = pos[i][j*N_DIM+1] fitness_list[i] += (x-1)**2 + (y-1)**2 # 以 (1,1) 为目标点 return fitness_list # 粒子群算法 def PSO(): pos, vel = init_pos_vel() p_best_pos = pos.copy() p_best_fitness = fitness(pos).copy() g_best_pos = pos[p_best_fitness.argmin()].copy() g_best_fitness = p_best_fitness.min().copy() w = W_MAX for i in range(N_STEP): # 更新速度和位置 for j in range(POP_SIZE): vel[j] = w * vel[j] + C1 * np.random.rand(N_DRONE*N_DIM) * (p_best_pos[j] - pos[j]) + C2 * np.random.rand(N_DRONE*N_DIM) * (g_best_pos - pos[j]) pos[j] += vel[j] # 边界处理 for k in range(N_DRONE): if pos[j][k*N_DIM] < X_RANGE[0]: pos[j][k*N_DIM] = X_RANGE[0] vel[j][k*N_DIM] = -vel[j][k*N_DIM] elif pos[j][k*N_DIM] > X_RANGE[1]: pos[j][k*N_DIM] = X_RANGE[1] vel[j][k*N_DIM] = -vel[j][k*N_DIM] if pos[j][k*N_DIM+1] < Y_RANGE[0]: pos[j][k*N_DIM+1] = Y_RANGE[0] vel[j][k*N_DIM+1] = -vel[j][k*N_DIM+1] elif pos[j][k*N_DIM+1] > Y_RANGE[1]: pos[j][k*N_DIM+1] = Y_RANGE[1] vel[j][k*N_DIM+1] = -vel[j][k*N_DIM+1] # 更新个体最优解和群体最优解 fitness_list = fitness(pos) for j in range(POP_SIZE): if fitness_list[j] < p_best_fitness[j]: p_best_fitness[j] = fitness_list[j] p_best_pos[j] = pos[j].copy() if fitness_list[j] < g_best_fitness: g_best_fitness = fitness_list[j] g_best_pos = pos[j].copy() # 缩小惯性因子 w = W_MAX - i * (W_MAX - W_MIN) / N_STEP # 画图 plt.clf() plt.xlim(X_RANGE) plt.ylim(Y_RANGE) plt.title('PSO') for j in range(N_DRONE): x = [pos[k][j*N_DIM] for k in range(POP_SIZE)] y = [pos[k][j*N_DIM+1] for k in range(POP_SIZE)] plt.scatter(x, y, marker='.') plt.pause(0.01) return g_best_pos, g_best_fitness # 主函数 if __name__ == '__main__': best_pos, best_fitness = PSO() print('最优解:', best_pos) print('最优适应度:', best_fitness) plt.show() ``` 程序中的 `init_pos_vel` 函数用于初始化位置和速度,`fitness` 函数是适应度函数,`PSO` 函数是粒子群算法的核心部分。程序中通过 `matplotlib` 库实现了动态画图,可以直观地观察算法的运行过程。在算法结束后,程序输出最优解和最优适应度,并在图像中标出最优解。

相关推荐

最新推荐

recommend-type

python实现画图工具

主要为大家详细介绍了python实现画图工具,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

python多线程接口案例

项目为某内控公司要求并发测试,编写多线程访问接口,并生成Excel报告的脚本,记录基本步骤。 若有需要写UI自动化,接口自动化,多线程,服务器测试定时脚本等等,可联系本工具熊。 分五步操作实现50个或更多用户...
recommend-type

利用python在excel中画图的实现方法

主要介绍了利用python在excel中画图的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Python使用matplotlib和pandas实现的画图操作【经典示例】

主要介绍了Python使用matplotlib和pandas实现的画图操作,结合实例形式分析了Python基于matplotlib和pandas的数值运算与图形显示操作相关实现技巧,并对部分代码的图形显示进行了显示效果测试,需要的朋友可以参考下
recommend-type

python画图--输出指定像素点的颜色值方法

今天小编就为大家分享一篇python画图--输出指定像素点的颜色值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。