% 主调用函数(求最大值)
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维、单目标、约束、粒子群优化算法的更多相关文章

  1. 粒子群优化算法PSO及matlab实现

    算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群 ...

  2. MATLAB粒子群优化算法(PSO)

    MATLAB粒子群优化算法(PSO) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.介绍 粒子群优化算法(Particle Swarm Optim ...

  3. 粒子群优化算法对BP神经网络优化 Matlab实现

    1.粒子群优化算法 粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作 ...

  4. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

  5. 数值计算:粒子群优化算法(PSO)

    PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...

  6. ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)

    ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...

  7. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretiza ...

  8. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  9. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...

  10. MOPSO 多目标粒子群优化算法

    近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...

随机推荐

  1. SAP 删除销售订单行

    DATA: ORDER_HEADER_INX TYPE BAPISDH1X, GT_ORDER_ITEM_IN TYPE STANDARD TABLE OF BAPISDITM, LS_ORDER_I ...

  2. OSS管理文件(Java)

    工具类 package com.panchina.util; import com.alibaba.druid.util.StringUtils; import com.aliyun.oss.Http ...

  3. php处理mysql的结果集

    Php使用mysqli_result类处理结果集有以下几种方法 fetch_all() 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集. fetch_array() 以一个 ...

  4. mySql查询-系统公告发布接收人情况

    -- display_name NZ分部所有用户SELECT user_code,display_name FROM scy_user WHERE ou_id=1627 AND is_deleted= ...

  5. 如何避免reblance

    reblance是什么? 什么时候会发生rebalnce? 如何尽量避免这些情况? 若不可避免的要发生reblance?怎么尽量减少影响? reblance是什么? Reblance是Kafka协调者 ...

  6. css 背景渐变

    1.渐变从左到右 background: linear-gradient(to right,#000,#fff); 2.渐变从上到下 background: linear-gradient(tobot ...

  7. linux 中的errno 和 strerror(errno)

    1. errno.h 中包含 errno 这个错误保存值 string.h 包含 strerror() 函数 ,它的原型 是 char *strerror(int errnum); 输入值应该是err ...

  8. Doris与mysql语法对照,差异篇

    ## SQL语法差异:### doris中不支持分组列再使用distinctMSYQL:```SQLselect DISTINCT mid from order_card_detail GROUP B ...

  9. kubectl使用方法及常用命令小结

    Kubectl 是一个命令行接口,用于对 Kubernetes 集群运行命令.kubectl 在 $HOME/.kube 目录中寻找一个名为 config 的文件. kubectl安装方法详见:htt ...

  10. Java Collection体系

    Collection 接口 宏观图 快速使用 import java.util.*; public class Demo { public static void main(String[] args ...