蜻蜓优化算法Python代码(详细注释)

news/2025/3/19 19:37:57/

1.代入例子,目标函数求最优解迭代过程:

  1. 蜻蜓算法流程:

蜻蜓算法(Dragonfly Algorithm)是一种基于种群的优化算法,灵感来自于蜻蜓的群集行为。该算法通过模拟蜻蜓之间的吸引力和斥力,以及蜻蜓的移动,来搜索问题的最优解。

下面是蜻蜓算法的流程:

初始化种群:生成一组随机的蜻蜓位置和速度,并初始化蜻蜓最佳位置、蜻蜓最佳适应度值、种群最佳位置和种群最佳适应度值。

迭代优化:对于每个迭代,执行以下步骤:

a. 计算蜻蜓间距:计算每对蜻蜓之间的欧几里德距离。

b. 计算蜻蜓吸引力:对于每个蜻蜓,计算其吸引力,即吸引其它蜻蜓向其移动

c. 计算蜻蜓斥力:对于每个蜻蜓,计算其斥力,即排斥其它蜻蜓的移动。斥力的计算公式为:

如果某个蜻蜓的最佳适应度值优于其它蜻蜓,那么它的斥力将比其它蜻蜓更大。

d. 更新速度和位置:根据蜻蜓吸引力和斥力的作用,更新蜻蜓的速度和位置。速度和位置的更新公式分别为

e. 更新最佳位置和适应度值:对于每个蜻蜓,如果它的新位置的适应度值优于原来的最佳适应度值,那么更新它的最佳位置和最佳适应度值。如果它的最佳

3.代码:

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 18 12:51:47 2023@author: pony
"""import numpy as np
import matplotlib.pyplot as plt# 设置目标函数
def obj_func(x):return (x**2).sum()# 定义蜻蜓优化算法
def dragonfly_opt(func, dim, num, max_iter, lb, ub):# 初始化蜻蜓位置x = np.random.uniform(lb, ub, (num, dim))# 初始化蜻蜓速度v = np.zeros((num, dim))# 初始化蜻蜓最佳位置pbest = x.copy()# 初始化蜻蜓最佳适应度值fbest = np.zeros(num)for i in range(num):fbest[i] = func(pbest[i])# 初始化种群最佳位置gbest = pbest[fbest.argmin()].copy()# 初始化种群最佳适应度值fgbest = fbest.min()# 迭代优化for t in range(max_iter):# 计算蜻蜓间距dist = np.sqrt(((x[:, np.newaxis, :] - x)**2).sum(axis=2))# 计算蜻蜓吸引力attract = np.zeros((num, dim))for i in range(num):for j in range(num):if i != j:attract[i] += (x[j] - x[i]) / ((dist[i, j] + 1e-10)**2)# 计算蜻蜓斥力repel = np.zeros((num, dim))for i in range(num):for j in range(num):if i != j:if fbest[i] < fbest[j]:repel[i] += (x[i] - x[j]) / ((dist[i, j] + 1e-10)**2)# 更新速度和位置v = v + attract + repelx = x + vx = np.clip(x, lb, ub)# 更新最佳位置和适应度值for i in range(num):fnew = func(x[i])if fnew < fbest[i]:pbest[i] = x[i].copy()fbest[i] = fnewif fnew < fgbest:gbest = x[i].copy()fgbest = fnew# 打印当前迭代结果print("Iteration {}: Best Fitness Value = {}".format(t+1, fgbest))# 返回最佳位置和适应度值return gbest, fgbest# 设置目标函数的维度和范围
dim = 2
lb = np.array([-10, -10])
ub = np.array([10, 10])# 调用蜻蜓优化算法求解目标函数
best_pos, best_val = dragonfly_opt(obj_func, dim, num=20, max_iter=100, lb=lb, ub=ub)
文章来源:https://blog.csdn.net/qq_40840797/article/details/129635461
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/32837.html

相关文章

【华为OD机试真题2023 JAVA】最佳对手

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 最佳对手 知识点排序DFS搜索回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 游戏里面,队伍通过匹配实力相近的对手进行对战。 但是如果匹配的队伍实例相差太大,对于双方游戏体验都不会太好。 给定n个…

docker 知识讲解

一&#xff1a;docker三大基础组件&#xff1a; docker有三个重要的概念&#xff1a;仓库&#xff0c;镜像&#xff0c;容器&#xff0c;它们是docker的三大基础组件。 1.镜像&#xff1a; 操作系统分为内核和用户空间。对于Linux而言&#xff0c;内核启动后&#xff0c;会挂…

文心一言发布的个人看法

文心一言发布宣传视频按照发布会上说的&#xff0c;文心一言并非属于百度赶工抄袭Chat-GPT的作品&#xff0c;而是十几年一直布局AI产业厚积薄发的成果&#xff0c;百度在芯片&#xff0c;机器学习&#xff0c;自然语言处理&#xff0c;知识图谱等方面均有相对深厚的积累。 国…

MS(mbed l432KC)-->速通9个lab详细解析[5]

Exercise5 这次实验我们将正式接触到一个相对来说有点意思并且有点牌面的传感器了----->数码管。数码管是我们生活中非常常见的一种传感器,比如计时器,秒表,以及数字显示大屏幕,其实原理都跟数码管差不多。如果是没有单片机基础的同学,突然一下接触到相对来说比较常见…

通过百度文心一言大模型作画尝鲜,感受国产ChatGPT的“狂飙”

3月16日下午&#xff0c;百度于北京总部召开新闻发布会&#xff0c;主题围绕新一代大语言模型、生成式AI产品文心一言。百度创始人、董事长兼首席执行官李彦宏&#xff0c;百度首席技术官王海峰出席&#xff0c;并展示了文心一言在文学创作、商业文案创作、数理推算、中文理解、…

这几个过时Java技术不要再学了

Java 已经发展了近20年&#xff0c;极其丰富的周边框架打造了一个繁荣稳固的生态圈。 Java现在不仅仅是一门语言&#xff0c;而且还是一整个生态体系&#xff0c;实在是太庞大了&#xff0c;从诞生到现在&#xff0c;有无数的技术在不断的推出&#xff0c;也有很多技术在不断的…

阿里笔试2023-3-15

太菜了&#xff0c;记录一下笔试题目&#xff0c;代码有更好解法欢迎分享。 1、满二叉子树的数量。 给定一颗二叉树&#xff0c;试求这课二叉树有多少个节点满足以该节点为根的子树是满二叉树&#xff1f;满二叉树指每一层都达到节点最大值。 第一行输入n表示节点数量&#xff…

手把手学会DFS (递归入门)

目录 算法介绍 递归实现指数型枚举 递归实现排列型枚举 递归实现组合型枚举 算法介绍 &#x1f9e9;DFS 即 Depth First Search &#xff0c;中文又叫深度优先搜索&#xff0c;是一种沿着树的深度对其进行遍历&#xff0c;直到尽头之后再进行回溯&#xff0c;再走其他路线的…