% 改进的快速粒子群优化算法 (APSO):

function apso

Lb=[6 50  0.032  0.040 0.007 0.08 300 ]; %下边界

Ub=[8 64  0.038  0.050 0.010 0.13 350]; %上边界

% 默认参数

para=[40 100 0.95]; %[粒子数,迭代次数,gama参数]

% APSO 优化求解函数

[gbest,fmin]=pso_mincon(@result,@constraint,Lb,Ub,para);

% 输出结果

Bestsolution=gbest % 全局最优个体

fmin

%% 目标函数

function f=result(x)

f=-((1.5*10^(-3)*sin(x(1)*pi()/180))/(((x(7)/((7.5398*10^8)*x(3)*x(5)*sin(pi()*x(1)/180)))*(99.591*x(3))*(1-exp(-3.9*10^(-3)/x(3)))*(sqrt(1+9*(x(6))^2))*(3*10^(-7)+1.2582*10^(-6)*(sin(pi()*x(1)/180)/x(7))^0.3 ))*(54.3914/(25.2340*x(7)*x(6)*x(3)/(sin(x(1)*pi()/180))+32.4657))))

% 非线性约束

function [g,geq]=constraint(x)

% 不等式限制条件

A=tan(x(2)*pi()/180);

B=x(4)*sin(x(1)*pi()/180)-0.1*x(6)*x(3);

C=0.1*x(4)*sin(x(1)*pi()/180)+x(6)*x(3);

D=sin(x(1)*pi()/180)*2*pi()*x(5)*x(3);

R=x(7)/D;

Q=tan(x(1)*pi()/180);

F=B/C

S=x(3)/x(5)

t=54.407/((x(7)*x(6)*x(3)*25.234/sin(x(1)*pi()/180))+32.4657)

g(1)=F-A;

g(2)=R-2.5;

g(3)=x(6)-Q;

g(4)=2.5-S;

g(5)=S-4;

g(6)=0.15-t;

g(7)=t-0.3;

g(8)=50-x(7);

g(9)=x(7)-350;

% 如果没有等式约束,则置geq=[];

geq=[];

%%  APSO Solver

function [gbest,fbest]=pso_mincon(fhandle,fnonlin,Lb,Ub,para)

if nargin<=7,      %用来判定输入变量的个数

para=[40 200 0.95];

end

n=para(1);% 粒子种群大小

time=para(2); %时间步长,迭代次数

gamma=para(3); %gama参数

scale=abs(Ub-Lb); %取值区间

% 验证约束条件是否合乎条件

if abs(length(Lb)-length(Ub))>0,

disp('Constraints must have equal size');

return

end

alpha=0.2; % alpha=[0,1]粒子随机衰减因子

beta=0.5;  % 收敛速度(0->1)=(slow->fast);

% 初始化粒子群

best=init_pso(n,Lb,Ub);

fbest=1.0e+100;

% 迭代开始

for t=1:time,

%寻找全局最优个体

for i=1:n,

fval=Fun(fhandle,fnonlin,best(i,:));

% 更新最有个体

if fval<=fbest,

gbest=best(i,:);

fbest=fval;

end

end

% 随机性衰减因子

alpha=newPara(alpha,gamma);

% 更新粒子位置

best=pso_move(best,gbest,alpha,beta,Lb,Ub);

% 结果显示

str=strcat('Best estimates: gbest=',num2str(gbest));

str=strcat(str,'  iteration='); str=strcat(str,num2str(t));

disp(str);

fitness1(t)=fbest;

plot(fitness1,'r','Linewidth',2)

grid on

hold on

title('适应度')

end

% 初始化粒子函数

function [guess]=init_pso(n,Lb,Ub)

ndim=length(Lb);

for i=1:n,

guess(i,1:ndim)=Lb+rand(1,ndim).*(Ub-Lb);

end

%更新所有的粒子 toward (xo,yo)

function ns=pso_move(best,gbest,alpha,beta,Lb,Ub)

% 增加粒子在上下边界区间内的随机性

n=size(best,1); ndim=size(best,2);

scale=(Ub-Lb);

for i=1:n,

ns(i,:)=best(i,:)+beta*(gbest-best(i,:))+alpha.*randn(1,ndim).*scale;

end

ns=findrange(ns,Lb,Ub);

% 边界函数

function ns=findrange(ns,Lb,Ub)

n=length(ns);

for i=1:n,

% 下边界约束

ns_tmp=ns(i,:);

I=ns_tmp

ns_tmp(I)=Lb(I);

% 上边界约束

J=ns_tmp>Ub;

ns_tmp(J)=Ub(J);

%更新粒子

ns(i,:)=ns_tmp;

end

% 随机性衰减因子

function alpha=newPara(alpha,gamma);

alpha=alpha*gamma;

% 带约束的d维目标函数的求解

function z=Fun(fhandle,fnonlin,u)

% 目标

z=fhandle(u);

z=z+getconstraints(fnonlin,u); % 非线性约束

function Z=getconstraints(fnonlin,u)

% 罚常数 >> 1

PEN=10^15;

lam=PEN; lameq=PEN;

Z=0;

% 非线性约束

[g,geq]=fnonlin(u);

%通过不等式约束建立罚函数

for k=1:length(g),

Z=Z+ lam*g(k)^2*getH(g(k));

end

% 等式条件约束

for k=1:length(geq),

Z=Z+lameq*geq(k)^2*geteqH(geq(k));

end

% Test if inequalities

function H=getH(g)

if g<=0,

H=0;

else

H=1;

end

% Test if equalities hold

function H=geteqH(g)

if g==0,

H=0;

else

H=1;

end

apso matlab,APSO算法指导相关推荐

  1. 《MATLAB智能算法30个案例》:第17章 基于PSO工具箱的函数寻优算法

    <MATLAB智能算法30个案例>:第17章 基于PSO工具箱的函数寻优算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...

  2. 视频教程-深入学习matlab免疫算法7讲-Matlab

    深入学习matlab免疫算法7讲 图像和算法等领域有多年研究和项目经验:指导发表科技核心期刊经验丰富:多次指导数学建模爱好者参赛. 宋星星 ¥20.00 立即订阅 扫码下载「CSDN程序员学院APP」 ...

  3. 【锂电池容量预测】基于matlab灰狼算法优化LSTM神经网络锂电池容量预测【含Matlab源码 2004期】

    一.灰狼算法简介 1 前言: 灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法.该算法受到了灰狼 ...

  4. 【路径规划】基于matlab DWA算法机器人局部避障路径规划【含Matlab源码 890期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[路径规划]基于matlab DWA算法机器人局部避障路径规划[含Matlab源码 890期] 获取代码方式2: 通过订阅紫极神光博客付费 ...

  5. 漫画:小白为了面试如何刷题?(呕心沥血算法指导篇)

    来自:小浩算法 三年高考,五年刷题.leetcode不算从其他各处收录的题目,单就自己的题库,总共有1600+,如果按照每天刷一道的话,总共需要5年.那我们真的需要把这些题目全部刷完吗?如果不是,刷多 ...

  6. matlab bs2rv.m,Matlab智能算法之遗传算法(一)

    Matlab智能算法之遗传算法(1) 以往写过的一篇文章了,旧了 1)Sheffield遗传算法工具箱的安装 我共享了下修改过文件名和后缀名的原版工具箱,地址为:http://pan.baidu.co ...

  7. matlab中存档算法代码,MATLAB 智能算法超级学习手册中程序代码

    [实例简介] MATLAB 智能算法超级学习手册中程序代码 [实例截图] [核心代码] dc90ef43-7920-434e-bdb8-0636c31c0b44 └── MATLAB 智能算法超级学习 ...

  8. MATLAB常用算法与应用实例分享来袭!

    小天从大学开始接触数学建模,便开启资料收集功能.经过近几年的积累和沉淀,再加上对数学建模领域的深入研究,收集整理了丰富的数学建模资料,内容涵盖"MATLAB常用算法"," ...

  9. 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...

    归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...

最新文章

  1. [转]Introduction of iSCSI Target in Windows Server 2012
  2. 电气设计 | 图说电气成套柜的布线安装
  3. 翻转句子中单词的顺序
  4. ToString() 格式化字符串总结
  5. 每日一题(17)—— 关键字volatile的作用和三个不同的应用场合
  6. C++基础17-纯虚函数和抽象类
  7. 如何设置几个循环出来的span其中一个宽度_css几个概念
  8. untiy3d坐标系以及向量运算
  9. Landsat系列卫星
  10. SEM和TEM的相同点和不同点
  11. 【防火墙QOS 基于策略的带宽控制】
  12. 什么原因可能会造成Android手机卡顿?
  13. 如何在网站中添加音乐
  14. 独立产品灵感周刊 DecoHack #029 - 随便逛逛谷歌街景
  15. 我来告诉你哪个银行的信用卡最好用!
  16. 关于计算机研究生报考方向的简要介绍
  17. python 爬虫登陆学校教务系统
  18. 10000内的回文数c语言,回文数
  19. java 截取mp3/aac
  20. Ubuntu 安装有线网卡驱动

热门文章

  1. Php二叉树对称,PHP如何实现判断二叉树是否对称
  2. scp复制linux系统的文件文件到本机(windows)以及本机文件复制到远程的命令
  3. java撤销上一步_CAD快速入门技巧:CAD软件中撤销操作的方法汇总
  4. 三角形周长最短问题_2019年中考数学压轴题分析——最短路径问题8:造桥选址...
  5. vb 通过php连接mysql数据库连接_php连接mysql数据库
  6. mysql数据库访问组件_mysql数据库访问组件
  7. 不显示样式 引用bootstrap_Bootstrap的引用样式
  8. 实现机器学习的循序渐进指南V——支持向量机
  9. python 帮助 autocad_python 使用pyautocad操作AutoCAD
  10. php矢量瓦片,矢量瓦片 - SegmentFault 思否