粒子群算法实验报告

时间:2024.3.15

 


          算法分析与设计      实验报告

专 业                  班 号           组 别     指导老师            

姓 名                  同 组 者                                       

实验日期        第十四周                             第      3      次实验

实验名称          基于粒子群算法的函数优化问题            

一、实验项目

基于粒子群算法的函数优化问题实验,在Windows下基于Matlab完成编程。

二、实验目的

       粒子群算法,也称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO,

 是近年来发展起来的一种新的进化算法((Evolu2tionary Algorithm - EA)。这种算

法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展

示了其优越性。为学习其算法思想,有必要掌握并实现基于粒子群算法的函数优化问题

实验。

      

三、实验原理

       粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由

Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。

PSO同遗传算法类似,是一种基于迭代的优化算法。系统初始化为一组随机解,通过

迭代搜寻最优值。但是它没有遗传算法用的交叉(crossover)以及变异(mutation),而是粒子

在解空间追随最优的粒子进行搜索。同遗传算法比较,PSO的优势在于简单容易实现并且

没有许多参数需要调整。目前已广泛应用于函数优化,神经网络训练,模糊系统控制以及

其他遗传算法的应用领域。

四、实验内容

1、首先编写通用代码

粒子群测试各个函数的主代码写出来,对于不同的测试函数,只需要调用相应的测试函数即可,将各个函数做成.m的文件。

matlab源代码程序如下:

clear all;

clc;

format long;

%------给定初始化条件----------------------------------------------

c1=1.4902;             %学习因子1

c2=1.4901;             %学习因子2

w=0.7281;              %惯性权重

MaxDT=1000;           %最大迭代次数

D=5;                   %搜索空间维数(未知数个数)

N=40;  

eps=10^(-6);           %设置精度(在已知最小值时候用)

%------初始化种群的个体(可以在这里限定位置和速度的范围)------------

fori=1:N

for j=1:D

        x(i,j)=randn;  %随机初始化位置

        v(i,j)=randn;  %随机初始化速度

end

end

%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------

fori=1:N

p(i)=function(x(i,:));

y(i,:)=x(i,:);

end

pg=x(1,:);             %Pg为全局最优

fori=2:N

if function(x(i,:))<function(pg)

pg=x(i,:);

end

%------进入主要循环,按照公式依次迭代,直到满足精度要求------------

for t=1:MaxDT

fori=1:N

        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));

x(i,:)=x(i,:)+v(i,:);

if function(x(i,:))<p(i)

p(i)=function(x(i,:));

y(i,:)=x(i,:);

end

if p(i)<function(pg)

pg=y(i,:);

end

end

Pbest(t)=function(pg);

end

%------最后给出计算结果

disp('*************************************************************')

disp('函数的全局最优位置为:')

Solution=pg'

plot(Solution)

disp('最后得到的优化极值为:')

Result=function(pg)

disp('*************************************************************')

2、对指定函数的优化

(1)Rastrigins.m文件代码如下,即Rastrigins测试函数;

function [out]=Rastrigin(x)

x=-5.12:0.01:5.12;                         

 cos_in = cos(2*pi*x);

 out= sum((x.^2-10*cos_in + 10), 2);

在matlab中运行结果如下:

函数的全局最优位置为:

Solution =

   0.576475699699576

  -0.860754225546370

   1.220565827682626

   1.420735482575301

   0.552791439208896

最后得到的优化极值为:

Result =

    1.899896389267265e+004

 


(2)函数2:使用粒子群算法对Griewank函数进行优化:                         

将下面代码保存成Griewank.m文件,代码如下:

Dx=length(in(1,:));

 tlenx=length(in(:,1));

 if isempty(D) | D~=Dx | tlen~=tlenx

  D=Dx; % dimension of prob

  tlen=tlenx; % how many separate states

   d=repmat([1:D],tlen,1);

   sqrtd=sqrt(d);

 end

dat1= sum([(in-100).^2],2)./4000;

dat2 = prod( (cos( (in-100)./sqrtd )) ,2);

 out = dat1 - dat2 + 1;

然后将主函数中的function替换成Griewank,然后在matlab中运行即可,运行结

果如下:

函数的全局最优位置为:

Solution =

  1.0e+002 *

   0.089393835024922

   1.355075075547163

   0.945667645113542

   1.188118773920475

   0.929927307049068

最后得到的优化极值为:

Result =

   2.497904795831135

 


(3)函数3:使用粒子群算法对Foxhole函数进行优化:

将下面代码保存成Foxhole.m文件,代码如下:

function [out]=Foxhole(in)

 %x=in(,1);

 %y=in(,2);

 term_sum=0;

 x=in(:,1);

 y=in(:,1);

  a{1} = [...

         -32 -16   0  16  32 ;...

         -32 -16   0  16  32 ;...

         -32 -16   0  16  32 ;...

         -32 -16   0  16  32 ;...

         -32 -16   0  16  32 ;...

        ];

 a{2} = [...

         -32 -32 -32 -32 -32 ;...

         -16 -16 -16 -16 -16 ;...

           0   0   0   0   0 ;...

          16  16  16  16  16 ;...                                        

32  32  32  32  32 ;...

        ];

term_sum=0;  

 for j=1 :numel((a{1}))

    ax=a{1} (j);

    ay=a{2} (j);

    term_sum = (x - ax).^6 + (y - ay).^6;

    term_sum=term_sum+ 1.0/(j+term_sum);              

 end

 out = .002 + term_sum;

运行结果如下:

函数的全局最优位置为:

Solution =

  31.999503320926419

   6.742047876319869

  -4.288120783678205

  14.918070142918513

  13.732644871242318

最后得到的优化极值为:

Result =

   0.042000000000000


第二篇:蚁群算法人工智能实验报告


人工智能实验报告

姓名:

学号:

班级:

实验时间:

                        蚁群算法

实验原理:

   蚂蚁在觅食过程中可以找出巢穴到食物源的最短路径,为什么?

              (1)信息素(pheromone)

              (2)正反馈现象:某一路径上走过的蚂蚁越多,则后来者选择该路径的概率就越大。

     (3)挥发现象:路径上的信息素浓度会随着时间推进而逐渐衰减。

蚁群算法的缺点:

1)收敛速度慢

2)易于陷入局部最优

改进:

1)采用局部优化,设计了三种优化算子。

2)采用蚁群优化算法。

3)其它优化算法

实验内容:

旅行商问题(TSP,traveling salesman problem):

            一商人去n个城市销货,所有城市走一遍再回到起点,使所走路程最短。

实验步骤:

算法代码:

%%蚁群算法的优化计算——旅行商问题(TSP)优化

%% 清空环境变量

clear all

clc

%% 导入数据

load citys_data.mat

%% 计算城市间相互距离

n = size(citys,1);

D = zeros(n,n);

for i = 1:n

    for j = 1:n

        if i ~= j

            D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));

        else

            D(i,j) = 1e-4;     

        end

    end   

end

%% 初始化参数

m = 50;                              % 蚂蚁数量

alpha = 1;                           % 信息素重要程度因子

beta = 5;                            % 启发函数重要程度因子

rho = 0.1;                           % 信息素挥发因子

Q = 1;                               % 常系数

Eta = 1./D;                          % 启发函数

Tau = ones(n,n);                     % 信息素矩阵

Table = zeros(m,n);                  % 路径记录表

iter = 1;                            % 迭代次数初值

iter_max = 200;                      % 最大迭代次数

Route_best = zeros(iter_max,n);      % 各代最佳路径      

Length_best = zeros(iter_max,1);     % 各代最佳路径的长度 

Length_ave = zeros(iter_max,1);      % 各代路径的平均长度 

%% 迭代寻找最佳路径

while iter <= iter_max

    % 随机产生各个蚂蚁的起点城市

      start = zeros(m,1);

      for i = 1:m

          temp = randperm(n);  %返回n个[0, n]间的随机元素向量

          start(i) = temp(1);

      end

      Table(:,1) = start;

      % 构建解空间

      citys_index = 1:n;   %访问1~n这n个城市

      % 逐个蚂蚁路径选择

      for i = 1:m

          % 逐个城市路径选择

         for j = 2:n   %各个蚂蚁都需要访问n-1个城市

             tabu = Table(i,1:(j - 1));           % 已访问的城市集合(禁忌表)

             allow_index = ~ismember(citys_index,tabu);  %判断citys_index中元素有没有在tabu中出现,出现用1表示,否则用0表示。

             allow = citys_index(allow_index);  % 待访问的城市集合

             P = allow;

             % 计算城市间转移概率

             for k = 1:length(allow)

                 P(k) = Tau(tabu(end),allow(k))^alpha * Eta(tabu(end),allow(k))^beta;

             end

             P = P/sum(P);   

             % 轮盘赌法选择下一个访问城市

             Pc = cumsum(P);     %返回矩阵不同维数的累加

            target_index = find(Pc >= rand);  %选择下一个访问城市,往往转移概率大的城市被选中的概率也更大。

            target = allow(target_index(1));

            Table(i,j) = target;   %已选定的下一个待访问城市

         end

      end

      % 计算各个蚂蚁的路径距离

      Length = zeros(m,1);

      for i = 1:m

          Route = Table(i,:);

          for j = 1:(n - 1)

              Length(i) = Length(i) + D(Route(j),Route(j + 1));

          end

          Length(i) = Length(i) + D(Route(n),Route(1));   %构成环

      end

      % 计算最短路径距离及平均距离

      if iter == 1

          [min_Length,min_index] = min(Length);

          Length_best(iter) = min_Length; 

          Length_ave(iter) = mean(Length);

          Route_best(iter,:) = Table(min_index,:);    %Table,访问城市列表,也就是路径记录表

      else

          [min_Length,min_index] = min(Length);

          Length_best(iter) = min(Length_best(iter - 1),min_Length);

          Length_ave(iter) = mean(Length);

          if Length_best(iter) == min_Length

              Route_best(iter,:) = Table(min_index,:);

          else

              Route_best(iter,:) = Route_best((iter-1),:);

          end

      end

      % 更新信息素

      Delta_Tau = zeros(n,n);

      % 逐个蚂蚁计算

      for i = 1:m

          % 逐个城市计算

          for j = 1:(n - 1)

              Delta_Tau(Table(i,j),Table(i,j+1)) = Delta_Tau(Table(i,j),Table(i,j+1)) + Q/Length(i);

          end

          Delta_Tau(Table(i,n),Table(i,1)) = Delta_Tau(Table(i,n),Table(i,1)) + Q/Length(i);

      end

      Tau = (1-rho) * Tau + Delta_Tau;    %所有蚂蚁在各连接路径上的信息素浓度,不同迭代层间有关联

    % 迭代次数加1,清空路径记录表

    iter = iter + 1;

    Table = zeros(m,n);

end

%% 结果显示

[Shortest_Length,index] = min(Length_best);

Shortest_Route = Route_best(index,:);

disp(['最短距离:' num2str(Shortest_Length)]);

disp(['最短路径:' num2str([Shortest_Route Shortest_Route(1)])]);

%% 绘图

figure(1)

plot([citys(Shortest_Route,1);citys(Shortest_Route(1),1)],...

     [citys(Shortest_Route,2);citys(Shortest_Route(1),2)],'o-');

grid on

for i = 1:size(citys,1)

    text(citys(i,1),citys(i,2),['   ' num2str(i)]);

end

text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),'       起点');

text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),'       终点');

xlabel('城市位置横坐标')

ylabel('城市位置纵坐标')

title(['蚁群算法优化路径(最短距离:' num2str(Shortest_Length) ')'])

figure(2)

plot(1:iter_max,Length_best,'b',1:iter_max,Length_ave,'r:')

legend('最短距离','平均距离')

xlabel('迭代次数')

ylabel('距离')

title('各代最短距离与平均距离对比')

实验结果:

更多相关推荐:
算法实验报告

算法设计与分析实验报告班级姓名学号年月日目录实验一二分查找程序实现03页实验二棋盘覆盖问题分治法08页实验三01背包问题的动态规划算法设计11页实验四背包问题的贪心算法14页实验五最小重量机器设计问题回溯法17...

算法设计实验报告

算法设计课程报告课题名称算法设计与实现课题负责人名学号张樱紫0743111317同组成员名单角色无指导教师左劼评阅成绩评阅意见提交报告时间20xx年12月23日课程名称算法设计学生姓名张樱紫学生学号074311...

中南大学--算法实验报告

中南大学--算法实验报告,内容附图。

遗传算法实验报告

遗传算法实验报告姓名:**学号:**一、实验目的:熟悉和掌握遗传算法的运行机制和求解的基本方法。遗传算法是一种基于空间搜索的算法,它通过自然选择、遗传、变异等操作以及达尔文的适者生存的理论,模拟自然进化过程来寻…

算法设计实验报告

1hanoi塔packagesyyimportjavautilpublicclassHanoipublicstaticvoidmoveintnintaintbSystemoutprintlnquot把第quot...

算法实验报告

算法导论实验报告实验一快速排序1问题描述实现对数组的普通快速排序与随机快速排序2算法原理设要排序的数组是A0AN1首先选取一个数据普通快排选择的是最后一个元素随记快排是随机选择一个元素作为关键数据然后将所有比它...

算法分析与设计实验报告

排序问题求解实验日志实验题目排序问题求解实验目的1以排序分类问题为例掌握分治法的基本设计策略2熟练掌握一般插入排序算法的实现3熟练掌握快速排序算法的实现4理解常见的算法经验分析方法实验要求1生成实验数据要求编写...

算法设计与分析实验报告三

贵州师范大学数学与计算机科学学院实验报告课程名称算法设计与分析班级13计本实验日期学号115703020xx2姓名吴道镁指导教师熊祥光成绩一实验名称贪心算法最优装载问题二实验目的及要求1掌握贪心算法的基本思想2...

算法设计与分析实验报告

算法设计实验报告课程设计报告题目计算机算法基础实验报告课程名称专业班级学号姓名指导教师报告日期117算法设计实验报告计算机科学与技术学院目录一实验目的3二实验题目3三设计分析31生成最短路径问题设计分析32最优...

算法设计与分析 综合设计性实验报告

01背包问题的多种算法设计与分析一实验内容和要求01背包问题是一例典型的组合优化的NP完全问题问题可以描述为给定一组共n个物品每种物品都有自己的重量wii1n和价值vii1n在限定的总重量背包的容量C内如何选择...

算法设计与分析实验报告

算法设计与分析实专业班级学生姓名号验报告学一实验目的与要求1熟悉CC语言的集成开发环境2通过本实验加深对递归过程的理解二实验内容掌握递归算法的概念和基本思想分析并掌握整数划分问题的递归算法三实验题任意输入一个整...

shiweijie《算法分析与设计》实验指导与报告书

常熟理工学院算法分析与设计实验指导与报告书学年第学期专业软件工程服务外包学号Y12309218姓名施伟杰实验地点N6113指导教师刘在德计算机科学与工程学院20xx02实验目录实验1求最大公约数2实验2斐波那契...

算法实验报告(32篇)