鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程

在这里插入图片描述

鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种基于鲸鱼捕食行为的智能优化算法。它模拟了座头鲸在狩猎时的“气泡网”捕食策略。

文章目录

  • 1.适应度函数
    • 2. 更新公式
    • 2.1 突袭行为
    • 2.2 螺旋更新
    • 3.线性递减参数
    • 4. 边界处理
  • MATLAB 实现示例
  • 代码说明
  • 注意事项

1.适应度函数

在优化问题中,适应度函数通常是我们希望最优化的目标函数。例如,Rosenbrock函数的公
式为:

f ( x ) = ∑ i = 1 n − 1 [ 100 ⋅ ( x i + 1 − x i 2 ) 2 + ( 1 − x i ) 2 ] f(x)=\sum\limits_{i=1}^{n-1}\begin{bmatrix}100\cdot(x_{i+1}-x_i^2)^2+(1-x_i)^2\end{bmatrix} f(x)=i=1n1[100(xi+1xi2)2+(1xi)2]

2. 更新公式

2.1 突袭行为

在突袭行为中,鲸鱼的位置更新公式为:

D = ∣ C ⋅ X ∗ − X i ∣ D=|C\cdot X^*-X_i| D=CXXi

X i = X ∗ − A ⋅ D X_i=X^*-A\cdot D Xi=XAD

其中:

∙ \bullet X ∗ X^* X是当前最佳位置。
· A A A是一个控制参数,定义为:

A = 2 a ⋅ r − a A=2a\cdot r-a A=2ara

∙ C \bullet C C是随机数,定义为:

C = 2 ⋅ r a n d ( ) C=2\cdot rand() C=2rand()

· D D D是当前鲸鱼与最佳位置之间的距离。

2.2 螺旋更新

在螺旋更新中,鲸鱼的位置更新公式为:

X i = D ⋅ e ( i ⋅ 2 π ) + X ∗ X_i=D\cdot e^{(i\cdot2\pi)}+X^* Xi=De(i2π)+X

其中:

· D D D是与最佳位置的距离,计算为:

D = ∣ X ∗ − X i ∣ D=\begin{vmatrix}X^*-X_i\end{vmatrix} D= XXi

3.线性递减参数

在算法迭代过程中,参数 a a a逐渐减小,以影响鲸鱼的探索行为:

a = 2 − ( 2 m a x i t e r ⋅ i t e r ) a=2-\left(\frac{2}{max_iter}\cdot iter\right) a=2(maxiter2iter)

4. 边界处理

在更新位置后,确保鲸鱼的位置在设定的边界内:

X i = max ⁡ ( min ⁡ ( X i , u b ) , l b ) X_i=\max(\min(X_i,ub),lb) Xi=max(min(Xi,ub),lb)

下面是一个简单的MATLAB实现示例,展示如何使用鲸鱼优化算法进行函数优化。我们将以最小化一个简单的目标函数(例如, R o s e n b r o c k Rosenbrock Rosenbrock函数)为例。

MATLAB 实现示例

% Whale Optimization Algorithm (WOA) for Function Optimization% 设置参数
max_iter = 100; % 最大迭代次数
num_whales = 30; % 鲸鱼数量
dim = 2; % 问题维度
lb = -5; % 下界
ub = 5; % 上界% 初始化鲸鱼位置
whales = lb + (ub - lb) * rand(num_whales, dim);% 初始化最佳解
best_score = inf;
best_position = zeros(1, dim);% 目标函数:Rosenbrock函数
target_function = @(x) sum(100*(x(:,2) - x(:,1).^2).^2 + (1 - x(:,1)).^2);% 主循环
for iter = 1:max_iterfor i = 1:num_whales% 计算当前鲸鱼的位置的目标函数值fitness = target_function(whales(i, :));% 更新最佳解if fitness < best_scorebest_score = fitness;best_position = whales(i, :);endend% 更新鲸鱼位置a = 2 - iter * (2 / max_iter); % 线性递减参数for i = 1:num_whales% 选择随机鲸鱼r = rand();A = 2 * a * rand() - a; % 计算A值C = 2 * rand(); % 计算C值if rand() < 0.5% 突袭行为if abs(A) < 1% 更新位置D = abs(C * best_position - whales(i, :));whales(i, :) = best_position - A .* D;else% 随机位置random_whale = whales(randi(num_whales), :);D = abs(C * random_whale - whales(i, :));whales(i, :) = random_whale - A .* D;endelse% 螺旋更新distance_to_best = abs(best_position - whales(i, :));whales(i, :) = distance_to_best * exp(1i * 2 * pi * rand()) + best_position;end% 限制位置在边界内whales(i, :) = max(min(whales(i, :), ub), lb);end% 显示当前迭代的最佳结果disp(['Iteration ' num2str(iter) ': Best Score = ' num2str(best_score)]);
end% 显示最终结果
disp(['Global Best Position: ' num2str(best_position)]);
disp(['Global Best Score: ' num2str(best_score)]);

代码说明

  1. 参数设置

    • max_iter:最大迭代次数。
    • num_whales:鲸鱼的数量。
    • dim:问题的维度(此例中为2维)。
    • lbub:搜索空间的上下界。
  2. 初始化

    • 随机生成鲸鱼的位置。
  3. 目标函数

    • 使用Rosenbrock函数作为优化目标。
  4. 主循环

    • 计算每只鲸鱼的适应度,并更新最佳解。
    • 根据鲸鱼的行为(突袭行为和螺旋更新)更新鲸鱼的位置。
    • 确保鲸鱼的位置在设定的边界内。
  5. 结果输出

    • 每次迭代输出当前最佳适应度,并在最后输出全局最佳位置和适应度。

注意事项

  • 可以根据需要调整参数以实现不同的优化效果。
  • 目标函数可以替换为其他需要优化的函数。
  • 增加绘图功能可以更直观地展示优化过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455169.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计:现代设计方法习题笔记《chapter3》

第一题 ​ 代码示例&#xff1a; #include<stdio.h>int main() {printf("Enter a date&#xff08;mm/dd/yyyy&#xff09;: ");int day, month, year;scanf_s("%d/%d/%d", &month, &day, &year);printf("%04d%02d%02d", yea…

一款好用的搜索软件——everthing(搜索比文件资源管理器快)

everthing官网链接 在官网选择下载 1.下载后双击打开 2.点击OK&#xff08;需要其他语言自己选择&#xff09; 3.选择安装位置&#xff08;路径最好别带中文和空格&#xff09; 继续点击下一步 4. 点击下一步 5.继续点击安装 6.然后就完成了 7.点击打开然后就可以搜索了

Elastic Stack简介

本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 从ELK到Elastic Stack ELK是三个单词的首字母缩写&#xff0c;即Elasticsearch、Logstash和Kibana。 Elasticsearch用于数据存储与检索Logstash用于数据传输与清洗Kibana则用于数据可视化等领域 Elasticsearch的第…

AnaTraf | 网络性能监控系统NPM:提升网络性能与业务连续性

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 网络系统非常复杂&#xff0c;管理和维护它们也越来越具有挑战性。为了确保网络性能和业务的持续稳定运行&#xff0c;IT运维团队需要对网络进行实时监控、优化和快速排查故障。本文将围绕网络性能监控系统&…

raidrive 访问搭建的ftp服务报错超时的情况

尝试了很久&#xff0c;包括改用户权限和密码&#xff0c;后面根据ftp日志&#xff0c;查到用户登录是正常的 /var/log/vsftpd.log 就知道&#xff0c;不是密码问题也不是服务器端的问题&#xff0c;通过多次尝试发现是被动模式的问题&#xff0c;被动模式会通过其他端口进行交…

ChatGPT实现旅游推荐微信小程序

随着旅游行业的快速发展&#xff0c;个性化推荐已成为提升用户体验的重要手段。通过AI技术&#xff0c;提供一个智能旅游推荐小程序&#xff0c;使用户能够轻松获取定制化的旅行建议。 项目概述 项目目标 开发一个AI旅游推荐小程序&#xff0c;基于用户输入的旅行偏好&#…

前后端请求、返回数据的多种方式

Springboot项目的业务逻辑 &#x1f319;项目基本结构&#xff1a; 通常情况下&#xff0c;我们在搭建后端项目的时候&#xff0c;处理业务逻辑我们需要用到Controller,Service,Mapper(mybatis,mybatis-plus)&#xff0c;Entry各层之间的相互调用来完成&#xff0c;还有就是我…

Docker部署MySQL主从复制

1. 主从复制概念及优势 1.1 概念 MySQL主从复制是一种数据库复制技术&#xff0c;它允许将一个数据库服务器&#xff08;主服务器&#xff09;上的数据更改复制到一个或多个数据库服务器&#xff08;从服务器&#xff09;。这种技术在数据库管理和维护中扮演着重要的角色&…

Ubuntu 2张4090,显卡安装,无法双屏显示

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; Ubuntu20.04 安装nvidia显卡 在已经安装好nvidia显卡的情况下&#xff1a; 单屏幕无法修改屏幕分辨率 无法双屏显示 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 单屏幕无法…

【Origin科技绘图】最新Origin2024中文版软件安装教程

Origin是由OriginLab公司开发的一个科学绘图、数据分析软件,支持在MicrosoftWindows下运行。Origin支持各种各样的2D/3D图形。Origin中的数据分析功能包括统计,信号处理,曲线拟合以及峰值分析。Origin中的曲线拟合是采用基Levernberg-Marquardt算法(LMA)的非线性最小二乘法拟合…

理工科考研想考计算机,湖南大学、重大、哈工大威海、山东大学,该如何选择?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 计算机对理工科同学来说&#xff0c;还是性价比很高的&#xff0c;具有很大的优势&#xff01; 一、就业前景广阔 高需求行业 在当今数字化时代&#xff0c;计算机技术几乎渗透到了各个领域&#xff0c;无论是互联网…

LabVIEW提高开发效率技巧----插入式架构

随着LabVIEW项目规模的扩大和系统复杂性的增加&#xff0c;传统的单一代码架构难以应对后期维护和功能扩展的需求。插入式架构&#xff08;Plug-In Architecture&#xff09;作为一种模块化设计方式&#xff0c;通过动态加载和运行子VI&#xff0c;使系统功能更加灵活、模块化&…

Django从请求到响应

视图 一个视图函数&#xff0c;简称视图&#xff0c;是一个简单的Python函数 def view_name() 定义视图函数view_name() URL的常用配置 path函数&#xff1a; path(route,view,name,**kwargs) route&#xff1a;RUL匹配规则 view&#xff1a;视图函数 name&#xf…

【部署篇】RabbitMq-03集群模式部署

一、准备主机 准备3台主机用于rabbitmq部署&#xff0c;文章中是在centos7上安装部署rabbitmq3.8通过文章中介绍的方式可以同样在centos8、centos9上部署&#xff0c;只需下载对应的版本进行相同的操作。 主机IP角色说明192.168.128.31种子节点192.168.128.32普通节点192.16…

React 分装webSocket

背景 AI 实时对话 需要流式数据 React Hooks 写法。新建WebSocket.tsx 放在根目录components import { useCallback, useRef, useState } from react;type MessageHandler (message: MessageEvent) > void; type ErrorHandler (event: Event) > void;export functi…

技术成神之路:设计模式(二十二)命令模式

介绍 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;允许将请求&#xff08;命令&#xff09;封装为对象&#xff0c;从而使您可以使用不同的请求、队列或记录请求日志&#xff0c;以及支持可撤销操作。 1. 定义 命令模式将一个请求封装为一个…

S32DS for ARM GPIO实践

S32DS操作&#xff1a; 一、新建项目 打开S32DS&#xff0c;FIle–>NEW–> S32DS Application Project选择对应芯片&#xff0c;写入项目名然后下一步 选择对应的SDK&#xff0c;Debugger选带有PE字眼的&#xff0c;点击完成 配置GPIO&#xff0c;双击Components界面下的…

【MySQL】详解MySQL数据类型

一、数据类型 各类型的数值范围&#xff1a; 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。对于int类型可能存放不下的数据&#xff0c;尽量不使用unsigned&#xff0c;unsigned int 同样可…

pytorch dataloader学习

import torch from torch.utils.data import Dataset, DataLoader import numpy as np torch.manual_seed(1) # 自定义数据集 class CustomDataset(Dataset):def __init__(self):# 创建一些示例数据&#xff08;100个样本&#xff0c;每个样本包含10个特征&#xff09;self.dat…

推荐一个开源非线性视频编辑器:Kdenlive

Kdenlive是一个开源的视频编辑软件&#xff0c;项目始于约2003年。它基于Qt和KDE框架库构建&#xff0c;大部分视频处理由MLT框架完成&#xff0c;同时依赖其他开源项目如FFmpeg、frei0r、movit、ladspa、sox等。 软件特点&#xff1a; - 多轨视频编辑&#xff1a;支持多个音频…