栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

粒子群算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

粒子群算法

           设计八:粒子群算法优化求解

旅行商(TSP)问题,是数学领域中著名问题之一,被证明具有NPC计算复杂性。该问题假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。从TSP问题测试数据集中选择一组测试数据,选择一种改进的粒子群算法,编写Python程序,求解最优路径问题。设计能够进行人机交互的可视化界面,使用图形方式表达求解过程,统计并分析实验数据,给出相应的数据表格和图形。学生也可以选择其他复杂问题进行求解。

1、算法参考学习
https://finthon.com/python-pso/
https://www.omegaxyz.com/2018/01/12/python_pso/
https://blog.csdn.net/wang454592297/article/details/80367158
2、算法生物学背景

  粒子群算法属于群智能算法的一种,使用过模拟鸟群捕食行为设计的。假设区域里只有一块食物,鸟群的任务是找到这块食物。鸟群在整个搜寻过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时,也将最优解的信息传递给整个鸟群。

  最终,整个鸟群都能聚集在食物源周围,即找到了问题的最优解,即问题收敛。

3、PSO算法基本原理概述:
  从鸟群的视角:假设一个区域,所有的鸟都不知道食物的位置,但是它们知道当前位置离食物还有多远。

  从PSO算法的视角:每个解看作一只鸟,称为“粒子(particle)”,所有的粒子都有一个适应值,每个粒子都有一个速度决定它们的飞翔方向和距离,粒子们追随当前最优粒子在解空间中搜索。初始化一群随机粒子,通过迭代找到最优。每次迭代中,粒子通过跟踪“个体极值(pbest)”和“全局极值(gbest)”来更新自己的位置。

4、算法基本步骤:

1)初始化
	初始化粒子群(粒子群共有n个粒子):给每个粒子赋予随机的初始位置和速度。

2)计算适应值
	根据适应度函数,计算每个粒子的适应值。

3)求个体最佳适应值
	对每一个粒子,将其当前位置的适应值与其历史最佳位置(pbest)对应的适应值比较,
	如果当前位置的适应值更高,则用当前位置更新历史最佳位置。

4)求群体最佳适应值
	对每一个粒子,将其当前位置的适应值与其全局最佳位置(gbest)对应的适应值比较,
	如果当前位置的适应值更高,则用当前位置更新全局最佳位置。

5)更新粒子位置和速度
	根据公式更新每个粒子的速度与位置。

6)判断算法是否结束
	若未满足结束条件,则返回步骤2,若满足结束条件则算法结束,全局最佳位置(gbest)
	即全局最优解。

5、算法matlab代码

%TSPPSO.m
%% 1.清空环境变量
close all;
clear all;
clc;
tic;
%% 2.导入数据
% %%load citys_data.mat;          %数据集的变量名为citys
 citys=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
     2328 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
     2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
     3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
     3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
     2370 2975];

%citys=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535];
%% 3.计算城市间相互距离
n=size(citys,1);
D=zeros(n,n);

for i=1:n
    for j=i+1:n
        D(i,j)=sqrt(sum((citys(i,:)-citys(j,:)).^2));
        D(j,i)=D(i,j);
    end
end

%% 4.初始化参数
c1=0.1;                         %个体学习因子
c2=0.075;                       %社会学习因子
w=1;                            %惯性因子
m=500;                          %粒子数量
pop=zeros(m,n);                 %粒子位置
v=zeros(m,n);                   %粒子速度
gen=1;                          %迭代计数器
genmax=2000;                    %迭代次数
fitness=zeros(m,1);             %适应度函数值
Pbest=zeros(m,n);               %个体极值路径
Pbest_fitness=zeros(m,1);       %个体极值
Gbest=zeros(genmax,n);          %群体极值路径
Gbest_fitness=zeros(genmax,1);  %群体极值
Length_ave=zeros(genmax,1);     %各代路径的平均长度
ws=1;                           %惯性因子最大值
we=0.8;                         %惯性因子最小值
NC=1;
%% 5.产生初始粒子
% 5.1随机产生粒子初始位置和速度
for i=1:m
    pop(i,:)=randperm(n);
    v(i,:)=randperm(n);
end

% 5.2计算粒子适应度函数值
for i=1:m
    for j=1:n-1
        fitness(i)=fitness(i) + D(pop(i,j),pop(i,j+1));
    end
    fitness(i)=fitness(i) + D(pop(i,end),pop(i,1));
end

% 5.3计算个体极值和群体极值
Pbest_fitness=fitness;
Pbest=pop;
[Gbest_fitness(1),min_index]=min(fitness);
Gbest(1,:)=pop(min_index,:);
Length_ave(1)=mean(fitness);

%% 6.迭代寻优
% figure(1);
while gen 
%position_minus_position.m
function change=position_minus_position(best,pop)
%记录将pop变成best的交换序列
for i=1:size(best,1)
    for j=1:size(best,2)
        change(i,j)=find(pop(i,:)==best(i,j));
        temp=pop(i,j);
        pop(i,j)=pop(i,change(i,j));
        pop(i,change(i,j))=temp;
    end
end
end
%position_plus_velocity.m
function pop = position_plus_velocity(pop,v)
%利用速度记录的交换序列进行位置修正
for i=1:size(pop,1)
    for j=1:size(pop,2)
        if v(i,j)~=0
            temp=pop(i,j);
            pop(i,j)=pop(i,v(i,j));
            pop(i,v(i,j))=temp;
        end
    end
end
end
%constant_times_velocity.m
function change = constant_times_velocity(constant,change)
% 以一定概率保留交换序列
for i=1:size(change,1)
    for j=1:size(change,2)
        if rand>constant
            change(i,j)=0;
        end
    end
end
end
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/280429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号