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)