Matlab:4维、单目标、约束、粒子群优化算法

% 主调用函数(求最大值)
clc;
clear;
close all; % 初始化种群
N = 100; % 初始种群个数
D = 4; % 空间维数
iter = 50; % 迭代次数
x_limit = [10, 13; 14, 25; 3, 8; 0.3, 0.5]; % 位置限制
v_limit = [-1, 1; -1, 1; -0.1, 0.1; -0.1, 0.1]; % 速度限制 x = zeros(N, D);
for i = 1:100
x(i,1) = randi([10,13],1,1);%初始种群的位置
x(i,2) = randi([14,25],1,1);%初始种群的位置
x(i,3) = x_limit(3, 1) + (x_limit(3, 2) - x_limit(3, 1)) * rand();%初始种群的位置
x(i,4) = x_limit(4, 1) + (x_limit(4, 2) - x_limit(4, 1)) * rand();%初始种群的位置
end
v(:,1) = randi([-1,1],N,1); % 初始种群z1方向的速度
v(:,2) = randi([-1,1],N,1); % 初始种群z2方向的速度
v(:,3) = rands(N, 1) * 1; % 初始种群3方向的速度
v(:,4) = rands(N, 1) * 1; % 初始种群phi_R方向的速度 p_best = x; % (初始化)每个个体的历史最佳位置
f_best = zeros(1, D); % (初始化)种群的历史最佳位置 fp_best = zeros(N, 1) - inf; % (初始化)每个个体的历史最佳适应度为负无穷 -
fg_best = -inf; % (初始化)种群历史最佳适应度为负无穷 - w = 1; % 惯性权重
c1 = 1; % 自我学习因子
c2 = 1; % 群体学习因子 i = 1;
record = zeros(iter, 1); % 记录器
while i <= iter fx = f_xy(x(:,1), x(:,2), x(:,3), x(:,4)); % 个体当前适应度
for j = 1:N
if fp_best(j) < fx(j) % 记录最大值
fp_best(j) = fx(j); % 更新个体历史最佳适应度
p_best(j,:) = x(j,:); % 更新个体历史最佳位置
end
end
if fg_best < max(fp_best)
[fg_best, ind_max] = max(fp_best); % 更新群体历史最佳适应度
f_best = p_best(ind_max, :); % 更新群体历史最佳位置
end v = v * w + c1 * randi([0,1],1,1) * (p_best - x) + c2 * randi([0,1],1,1) * (repmat(f_best, N, 1) - x); % 速度更新 % 速度处理
for t=1:N
for k=1:D
if v(t,k) > v_limit(k,2) % 超速处理
v(t,k) = v_limit(k,2);
elseif v(t,k) < v_limit(k,1) % 慢速处理
v(t,k) = v_limit(k,1);
end
end
end x = x + v; % 位置更新 % 边界处理
for t=1:N
for k=1:D
if x(t,k) > x_limit(k,2) % 超过边界上限
x(t,k) = x_limit(k,2);
elseif x(t,k) < x_limit(k,1) % 超过边界下限
x(t,k) = x_limit(k,1);
end
end
end record(i) = fg_best; % 最大值记录
i = i + 1;
if mod(i,10) == 0
i % 收敛进度输出
end
pause(0.1) end figure(1)
plot(-record);
xlabel('迭代次数');
ylabel('适应度值');
title('收敛过程'); disp(['最小值:',num2str(-fg_best)]);
disp(['变量取值:z1=',num2str(f_best(1)),' z2=',num2str(f_best(2)),...
' m=',num2str(f_best(3)),' phi_R=',num2str(f_best(4))]); function f = f_xy(z1, z2, m, phi_R)
% 适应度函数
n = 2;
b = phi_R.*m.*sqrt(z1.^2+z2.^2)./2;
theta1 = atan(z1./z2);
V1 = b.*pi.*cos(theta1).*(3.*m.^2.*z1.^2-6.*m.*z1.*b.*sin(theta1)+4.*b.^2.*(sin(theta1)).^2)./12;
V2 = b.*pi.*sin(theta1).*(3.*m.^2.*z1.^2-6.*m.*z1.*b.*cos(theta1)+4.*b.^2.*(cos(theta1)).^2)./12;
f = -(n.*V1+2.*V2);
end
参考:https://blog.csdn.net/Wang_Dou_Dou_/article/details/119417078
Matlab:4维、单目标、约束、粒子群优化算法的更多相关文章
- 粒子群优化算法PSO及matlab实现
算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群 ...
- MATLAB粒子群优化算法(PSO)
MATLAB粒子群优化算法(PSO) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.介绍 粒子群优化算法(Particle Swarm Optim ...
- 粒子群优化算法对BP神经网络优化 Matlab实现
1.粒子群优化算法 粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作 ...
- 计算智能(CI)之粒子群优化算法(PSO)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...
- 数值计算:粒子群优化算法(PSO)
PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...
- ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)
ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretiza ...
- [Algorithm] 群体智能优化算法之粒子群优化算法
同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...
- MOPSO 多目标粒子群优化算法
近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...
随机推荐
- WEB漏洞扫描工具之OWASP ZAP
添加扫描策略 使用新建的扫描策略
- 洛谷P4571 [JSOI2009] 瓶子和燃料
题目 https://www.luogu.com.cn/problem/P4571 思路 首先观察并且简单模拟一下火星人取燃料的过程,发现最终燃料的量一定是他选的k个瓶子容量的线性组合(观察操作3就知 ...
- CF1534F2 Falling Sand (Hard Version)
个人思路: 每个点向相邻沙子连边,向本列和相邻 \(2\) 列下方第一个沙子连边. 对于一个 DAG,所有入度为 \(0\) 的点会覆盖全部点.我们缩点即可通过 F1. 但是这样做是过不了 F2 的. ...
- C++实现有序表--链表的合并操作代码
#include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...
- (linux笔记)开放防火墙端口
关闭防火墙 CentOS 7.RedHat 7 之前的 Linux 发行版防火墙开启和关闭( iptables ): 即时生效,重启失效 #开启 service iptables start #关闭 ...
- iOS开发之检测项目是否包含UIWebView
应苹果审核要求不能包含UIWebView,所以我们上线之前应该扫一下项目是否包含UIWebView 我们直接打开终端 cd 到工程文件下面 执行命令 grep -r UIWebView . 在扫描结 ...
- Java 一次操作多条数据
//新增 <insert id="insertSelectiveList" useGeneratedKeys="true" parameterType=& ...
- [530] C3 Rise Of Darkness Opcodez
[530] C3 Rise Of Darkness Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestE ...
- 高级纹理以及复杂而真实的应用——ShaderCp10
--20.9.7 这章主要分成三个部分 立方体纹理(cubemap) 渲染纹理(RenderTexture,rt) 和程序纹理 一.立方体纹理 立方体纹理顾名思义是一种三维的纹理形状类似于立方体,由六 ...
- ADC参悟
SFDR比信噪比大15dB,怎么跟应用联系起来,分别决定了啥?