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等.粒子群优化 ...
随机推荐
- Android Studio打开现有的项目,Android自带的类、函数(方法)属性等爆红,含解决方式
如上图,Android 自带的 setContentView 爆红,XML文件内 android:相关的属性(如android:layout_width) 爆红 原因: 使用Android Studi ...
- BFS与DFS区别和特点
什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同) 二维数组的题目,N小于20的,适用DFS.而一般 N<= 200,N<=1000这种,一定不可能用DFS去做.而且并不只 ...
- jeecg 导出加批注
public static void main(String[] args) throws IOException { // 创建工作簿对象 XSSFWorkbook wb = new XSSFWor ...
- Linux非正式学习随笔(1)
11.5进linux学的第一件事,找个中文输入法.Linux是一套免费的类unix操作系统GPL:gnu通用公共许可证.托马斯斯托曼提出gnu计划,自由软件思想的一个协议.Linux诞生1991年10 ...
- 20211306 实验四 Python综合实践
学号 20211306 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 2113 姓名: 丁文博 学号:20211306 实验教师:王志强 实验日期 ...
- windows系统PC设置多ip
1. 打开 "[打开网络和共享中心]" 2 "更改适配器设置" 3."[本地连接]"-- "[属性]" 4.打开 [ ...
- Git系列 -> 如何获取远程库某个文件
有时候远程库存放很多文件夹,我们可能只需要下载或获取某个文件中的内容,可以采用以下: 首先点击clone 按钮,然后复制clone URL , 如果想要下载其中的某个文件夹的内容,需要在后面加入指定文 ...
- 分布式-Etcd介绍
Etcd客户端基本操作 提供了如下操作接口: put - 添加一个新的 key-value 到存储中 get - 获取一个 key 的 value delete - 删除节点 range - 获取一个 ...
- scala中的数据类型
一.Scala的数据类型 (1). scala中一切数据都是对象,都是Any的子类: (2).scala中数据类型分为两大类:数值类型(AnyVal,即any value,任意值).引用类型(AnyR ...
- jenkins - Asp.net 环境搭建(Windows)
jenkins - Asp.net 环境搭建(Windows) 安装环境 通过 Chocolatey自动安装 choco install ojdkbuild11 #或 choco install jd ...