pso.zip

  • lyuconlei
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2020-10-14 21:13
    上传日期
使用matlab实现PSO算法,并通过一个简单的优化函数说明使用方法
pso.zip
  • pso.m
    3.8KB
  • func.m
    611B
内容介绍
%% clear; clc; %% x = 1:0.01:2; y = sin(10 * pi * x) ./ x; figure; plot(x, y); hold on; %% c1 = 1.49445; c2 = 1.49445; maxgen = 50; sizepop = 10; Vmax = 0.5; Vmin = -0.5; popmax = 2; popmin = 1; %% for i = 1 : sizepop pop(i, :) = (rands(1) + 1) / 2 + 1; V(i, :) = 0.5 * rands(1); fitness(i) = fun(pop(i, :)); end %% [bestfitness, bestindex] = max(fitness); zbest = pop(bestindex); gbest = pop; fitnessgbest = fitness; fitnesszbest = bestfitness; %% for i = 1 : maxgen for j = 1 : sizepop V(j, :) = V(j, :) + c1 * rand * (gbest(j, :) - pop(j, :)) + c2 * rand * (zbest - pop(j, :)); V(j, find(V(j, :) > Vmax)) = Vmax; V(j, find(V(j, :) < Vmin)) = Vmin; pop(j, :) = pop(j, :) + V(j, :); pop(j, find(pop(j, :) > popmax)) = popmax; pop(j, find(pop(j, :) < popmin)) = popmin; fitness(j) = fun(pop(j, :)); end for j = 1 : sizepop if fitness(j) > fitnessgbest(j) gbest(j, :) = pop(j, :); fitnessgbest(j) = fitness(j); end if fitness(j) > fitnesszbest zbest = pop(j, :); fitnesszbest = fitness(j); end end yy(i) = fitnesszbest; end %% [fitnesszbest zbest] plot(zbest, fitnesszbest, 'r*') figure; plot(yy) %% X = 0 : 0.001 : pi / 2; Y = cos(X); plot(X, Y) hold on; plot(X, 1-X) %% beta_2 = rand(2, 5); output = beta_2 * h1; %% alpha = 0.2; C_N = 0.9; N = 100; % 粒子个数 D = 10; % 粒子维数 T = 200; % 迭代次数 c1 = 1.4945; % 学习因子1 c2 = 1.4945; % 学习因子2 w = 0.8; % 惯性权重 x_max = 1; % 位置最大值 x_min = -1; % 位置最小值 v_max = 1; % 速度最大值 v_min = -1; % 速度最小值 % 初始化种群个体,限定位置和速度 x = rand(N, D) * (x_max - x_min) + x_min; v = rand(N, D) * (v_max - v_min) + v_min; % 初始化个体最优位置和最优值 p = x; pbest = ones(N, 1); for i = 1 : N % [p_c, w_r] = func(x(i, :), h_1, power); % pbest(i) = alpha * w_r + (1 - alpha) * max(cos(pi * p_c / (2 * C_N)), 0); % pbest(i) = alpha * w_r + (1 - alpha) * max(C_N - p_c, 0); pbest(i) = func1(x(i,:)); end % 初始化全局最优位置和最优值 g = ones(1, D); gbest = inf; for i = 1 : N if (pbest(i) < gbest) g = p(i, :); gbest = pbest(i); end end gb = ones(1, T); % 迭代直到满足精度或者迭代次数 for i = 1 : T for j = 1 : N % 更新个体最优位置和最优值 % [p_c, w_r] = func(x(j, :), h_1, power); % object_value = alpha * w_r + (1 - alpha) * max(cos(pi * p_c / (2 * C_N)), 0); % object_value = alpha * w_r + (1 - alpha) * max(C_N - p_c, 0); object_value = func1(x(j,:)); if object_value < pbest(j) p(j, :) = x(j, :); pbest(j) = object_value; end % 更新全局最优位置和最优值 if (pbest(j) < gbest) g = p(j, :); gbest = pbest(j); end % 更新位置和速度 v(j, :) = w * v(j, :) + c1 * rand * (p(j, :) - x(j, :)) + c2 * rand * (g - x(j, :)); x(j, :) = x(j, : ) + v(j, :); % 边界条件处理 for ii = 1 : D if (v(j,ii) > v_max) || (v(j,ii) < v_min) v(j,ii)=rand * (v_max - v_min) + v_min; end if (x(j,ii) > x_max) || (x(j,ii) < x_min) x(j,ii)=rand * (x_max - x_min) + x_min; end end end % 记录历代全局最优值 gb(i) = gbest; end g; % 最优个体 gb(end); % 最优值 figure; plot(gb); xlabel('迭代次数'); ylabel('适应度值'); title('适应度进化曲线');
评论
    相关推荐
    • PSO.rar
      标准PSO 测试函数需要自行输入 一共1+4个m文件
    • PSO.rar
      source code PSO algorithm
    • pso.rar
      运用PSO寻求全局最优解,得到更快更好的结果
    • PSO.zip
      计算函数的最小值,x的取值和y的取值范围确定,该函数是一个多个局部极值的函数。
    • PSO优化SVM
      PSO-SVR预测,求解误差参数MSE作为适应度函数
    • PSO.rar
      pso-粒子蚁群算法,一种适者生存的算法筛选过程
    • PSO.zip
      粒子群优化算法的原理及算例,适合初学者。。。。。。。。。。。。
    • PSO.zip
      实现了简单的粒子群算法,其参数(如维度、实验样本、轮次、w)可调
    • PSO.rar
      i)初始化一群微粒(群体规模为m),包括随机的位置和速度; ??ii)评价每个微粒的适应度; ??iii)对每个微粒,将它的适应值和它经历过的最好位置pbest的作比较,如果较好,则将其作为当前的最好位置pbest;...
    • matlabcnhelp.rar
      matlab中文帮助很难找的,快速下载