从零开始人工智能Matlab案例-粒子群优化

目标:求解Rastrigin函数最小值(多峰测试函数)

粒子群优化算法是一种基于群体智能的优化算法,模拟了鸟群或鱼群等群体的行为,通过粒子在搜索空间中的移动来寻找最优解。

% PSO参数
nParticles = 30;    % 粒子数量
maxIter = 100;      % 最大迭代次数
dim = 2;            % 变量维度
w = 0.7;            % 惯性权重
c1 = 1.5;           % 个体学习因子
c2 = 2.0;           % 群体学习因子% 初始化粒子
positions = -5.12 + 10.24*rand(nParticles, dim);
velocities = zeros(nParticles, dim);
pBestPos = positions;
pBestVal = inf(nParticles,1);% 计算初始适应度
for i = 1:nParticlespBestVal(i) = rastrigin(positions(i,:));
end
[gBestVal, gBestIdx] = min(pBestVal);
gBestPos = pBestPos(gBestIdx,:);% 用于记录每次迭代的全局最优值和粒子位置
globalBestValues = zeros(maxIter, 1);
particlePositions = zeros(nParticles, dim, maxIter);
particlePositions(:, :, 1) = positions;
globalBestValues(1) = gBestVal;% 主循环
for iter = 1:maxIterfor i = 1:nParticles% 更新速度和位置velocities(i,:) = w*velocities(i,:) + ...c1*rand*(pBestPos(i,:) - positions(i,:)) + ...c2*rand*(gBestPos - positions(i,:));positions(i,:) = positions(i,:) + velocities(i,:);% 计算新适应度currentVal = rastrigin(positions(i,:));% 更新个体最优if currentVal < pBestVal(i)pBestVal(i) = currentVal;pBestPos(i,:) = positions(i,:);endend% 更新全局最优[newGBestVal, idx] = min(pBestVal);if newGBestVal < gBestValgBestVal = newGBestVal;gBestPos = pBestPos(idx,:);end% 记录当前迭代的信息globalBestValues(iter) = gBestVal;particlePositions(:, :, iter) = positions;% 显示结果fprintf('Iter %d: Best Value = %.4f\n', iter, gBestVal);
end% 可视化部分% 绘制全局最优适应度值随迭代次数的变化曲线
figure;
plot(1:maxIter, globalBestValues, 'b-o');
xlabel('迭代次数');
ylabel('全局最优适应度值');
title('全局最优适应度值随迭代次数的变化');
grid on;% Rastrigin函数定义
function y = rastrigin(x)y = 10*numel(x) + sum(x.^2 - 10*cos(2*pi*x));
end

Rastrigin 函数定义
function y = rastrigin(x)y = 10*numel(x) + sum(x.^2 - 10*cos(2*pi*x));
end

Rastrigin是一个复杂的多峰函数,常用于测试优化算法的性能。numel(x) 表示向量 x 的元素个数,这里是 2。函数的全局最小值在所有变量都为 0 的位置。

nParticles = 30;    % 粒子数量
maxIter = 100;      % 最大迭代次数
dim = 2;            % 变量维度
w = 0.7;            % 惯性权重
c1 = 1.5;           % 个体学习因子
c2 = 2.0;           % 群体学习因子

  • 粒子数量(nParticles:表示在搜索空间中同时进行搜索的粒子个数,这里设置为 30 个。每个粒子代表一个可能的解。
  • 最大迭代次数(maxIter:算法最多进行 100 次迭代,每一次迭代粒子都会更新自己的位置和速度。
  • 变量维度(dim:表示问题的维度,这里是 2 维,意味着每个粒子的位置由两个变量组成。
  • 惯性权重(w:控制粒子保持原有速度的程度,值越大,粒子越倾向于保持原来的运动方向,这里设置为 0.7。
  • 个体学习因子(c1:表示粒子向自身历史最优位置学习的能力,值越大,粒子越容易向自己曾经找到的最优位置靠近,这里设置为 1.5。
  • 群体学习因子(c2:表示粒子向全局最优位置学习的能力,值越大,粒子越容易向整个群体找到的最优位置靠近,这里设置为 2.0。
 positions = -5.12 + 10.24*rand(nParticles, dim);
velocities = zeros(nParticles, dim);
pBestPos = positions;
pBestVal = inf(nParticles,1);
  • 位置初始化(positions:在  区间内随机生成 30 个粒子的初始位置,每个粒子的位置是一个 2 维向量。
  • 速度初始化(velocities:将所有粒子的初始速度都设为 0。
  • 个体最优位置初始化(pBestPos:初始时,每个粒子的个体最优位置就是它的初始位置。
  • 个体最优值初始化(pBestVal:将每个粒子的个体最优值初始化为无穷大,方便后续更新。
 for i = 1:nParticlespBestVal(i) = rastrigin(positions(i,:));
end
[gBestVal, gBestIdx] = min(pBestVal);
gBestPos = pBestPos(gBestIdx,:);
  • 遍历每个粒子,计算其初始位置的适应度值(即 Rastrigin 函数的值),并将其作为该粒子的初始个体最优值。
  • 从所有粒子的个体最优值中找出最小值,将其作为全局最优值(gBestVal),并记录对应的粒子索引(gBestIdx)。
  • 根据索引找到全局最优位置(gBestPos)。

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

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

相关文章

无人机遥感图像拼接及处理教程

无人机遥感图像采集流程&#xff1a; 无人机遥感监测 无人机航线规划设计 无人机飞行软件操作 无人机航拍一般过程 无人机遥感图像拼接软件&#xff1a; Photoscan软件 软件基本操作 遥感图像拼接的一般流程 遥感图像分组拼接与点云分类 无人机遥感图像拼接&#xff1a; 基于无…

LeetCode每日精进:876.链表的中间结点

题目链接&#xff1a;876.链表的中间结点 题目描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5…

Vue 发送 PDF 文件链接到 WinForm 程序进行打印

Vue 发送 PDF 文件链接到 WinForm 程序进行打印的完整流程如下&#xff1a; 1. Vue 端 Vue 通过 fetch 或 axios 发送 PDF 文件的 URL 给 WinForms 程序&#xff08;WinForms 需要开启一个本地 API&#xff09;。 <template><div><button click"sendPri…

从零到一:开发并上线一款极简记账本小程序的完整流程

从零到一&#xff1a;开发并上线一款极简记账本小程序的完整流程 目录 前言需求分析与功能设计 2.1 目标用户分析2.2 核心功能设计2.3 技术栈选择 开发环境搭建 3.1 微信开发者工具安装与配置3.2 项目初始化3.3 版本控制与协作工具 前端开发 4.1 页面结构与布局4.2 组件化开发…

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 , 基于 openEuler 构建 LVS-DR 群集。

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 NAT模式的优势&#xff1a; 可以隐藏后端服务器的IP地址&#xff0c;提高了系统的安全性。 支持多个后端服务器共享同一个IP地址&#xff0c;提高了系统的可扩展性。 可以在负载均衡器和后端服务…

【操作系统】操作系统结构

内核 什么是内核&#xff1f; 内核作为应用程序连接硬件设备的桥梁&#xff0c;使得应用程序只需关心与内核交互&#xff0c;不用关心硬件细节。 内核有哪些能力呢&#xff1f; 内核是怎么工作的&#xff1f; Linux 的设计 MultiTask SMP ELF ELF 的意思是可执行文件链接格式…

缓存的介绍

相关面试题 &#xff1a; ● 为什么要用缓存&#xff1f; ● 本地缓存应该怎么做&#xff1f; ● 为什么要有分布式缓存?/为什么不直接用本地缓存? ● 为什么要用多级缓存&#xff1f; ● 多级缓存适合哪些业务场景&#xff1f; 缓存思想 空间换时间(索引&#xff0c;集群&a…

什么是弧形光源

工业检测中的弧形光源是一种专门设计用于机器视觉和自动化检测的照明设备,通常用于提供均匀、高对比度的照明,以增强图像采集质量,便于检测系统识别和分析目标物体的特征。以下是关于工业检测弧形光源的详细介绍: 特点 1均匀照明: 弧形设计能够提供均匀的漫反射光,减少阴…

[每日动态]科技新闻每日信息差2025年2月14日

### 2025年2月14日科技新闻每日信息差 #### 引言 在快速发展的科技领域&#xff0c;信息差是决定个人和企业竞争力的关键因素。2025年2月14日&#xff0c;全球科技界迎来了多项重要进展&#xff0c;从人工智能到量子计算&#xff0c;从医疗科技到太空探索&#xff0c;这些…

Go语言实现单例模式

单例模式 单例模式分为饿汉和懒汉模式&#xff0c;前者是在程序启动的时候就初始化一个单例对象&#xff0c;后者是使用到这个单例的时候&#xff0c;才会初始化一个单例对象。 饿汉模式 package mainimport "fmt"type Singleton struct { }var instance *Singleto…

zyNo.23

SQL注入漏洞 1.SQL语句基础知识 一个数据库由多个表空间组成&#xff0c;sql注入关系到关系型数据库&#xff0c;常见的关系型数据库有MySQL,Postgres,SQLServer,Oracle等 以Mysql为例&#xff0c;输入 mysql-u用户名-p密码 即可登录到MySQL交互式命令行界面。 既然是…

LeapMotion第2代 Unity示范代码(桌面开发)

一、官方地址&#xff1a; 官网&#xff1a;https://www.ultraleap.com/ 驱动下载&#xff1a;https://leap2.ultraleap.com/downloads/leap-motion-controller-2/ docs地址&#xff1a;https://docs.ultraleap.com/xr-and-tabletop/tabletop/unity/getting-started/index.html…

深入剖析推理模型:从DeepSeek R1看LLM推理能力构建与优化

著名 AI 研究者和博主 Sebastian Raschka 又更新博客了。原文地址&#xff1a;https://sebastianraschka.com/blog/2025/understanding-reasoning-llms.html。这一次&#xff0c;他将立足于 DeepSeek 技术报告&#xff0c;介绍用于构建推理模型的四种主要方法&#xff0c;也就是…

使用Cocos Creator制作“打砖块”小游戏:从零开始的详细教程

Cocos Creator是一款强大的游戏开发工具,特别适合2D游戏的开发。本文将以经典的“打砖块”小游戏为例,逐步讲解如何使用Cocos Creator实现这个游戏。我们将从项目创建、场景搭建、脚本编写到最终的游戏发布,详细讲解每一步的实现过程。 1. 环境准备 首先,确保你已经安装了…

vue3常见面试题

当然&#xff0c;以下是关于 Vue 3 的一些常见面试题及其答案&#xff1a; 1. Vue 3 相比 Vue 2 有哪些主要改进&#xff1f; 性能提升&#xff1a;Vue 3 在编译时做了更多的优化&#xff0c;比如静态提升&#xff08;hoisting static nodes&#xff09;、事件监听缓存等。更…

Ubuntu 22.04 LTS 安装MinerU

1. 检测是否已安装nvidia驱动 nvidia-smi 如果看到类似如下的信息&#xff0c;说明已经安装了nvidia驱动&#xff0c;可以跳过步骤2 Note CUDA Version 显示的版本号应 > 12.1&#xff0c;如显示的版本号小于12.1&#xff0c;请升级驱动 2. 安装驱动 如没有驱动&#…

DeepSeek 指导手册(入门到精通)

第⼀章&#xff1a;准备篇&#xff08;三分钟上手&#xff09;1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章&#xff1a;基础对话篇&#xff08;像交朋友⼀样学交流&#xff09;2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章&#xff1a;效率飞跃篇&…

MacOS使用PhpWebStudy搭建PHP开发环境

mac上的PHP开发环境搭建方式有很多, brew, docker, mamp等, 这里使用最近新出的工具PhpWebStudy来搭建mac上的php开发环境 安装 使用brew安装 brew install phpwebstudy 无法使用brew的话, 可以去官网下载最新版本安装 FlyEnv | Powerful Web Server and Environment Mana…

布隆过滤器的原理和应用场景,解决缓存穿透

一、布隆过滤器BloomFilter是什么 布隆过滤器BloomFilter是一种专门用来解决去重问题的高级数据结果。 实质就是一个大型位数组和几个不同的无偏hash函数&#xff0c;无偏表示分布均匀。由一个初值为零的bit数组和多个哈希函数组成&#xff0c;用来判断某个数据是否存在&…

macOs安装nvm

首先确定本机上没有安装nvm 如果之前安装过先卸载 1. 删除 nvm 目录 首先&#xff0c;删除 nvm 所安装的文件目录。默认情况下&#xff0c;nvm 会安装到 ~/.nvm 目录。 运行以下命令删除 nvm 目录&#xff1a; rm -rf ~/.nvm2. 移除 .zshrc 或 .bash_profile 中的 nvm 配置…