Hello Mat

 找回密码
 立即注册
查看: 21404|回复: 7

零基础学习Python--粒子群算法PSO函数寻优-4

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2019-8-22 22:57:29 | 显示全部楼层 |阅读模式
零基础学习Python--粒子群算法PSO函数寻优-4:

链接:https://pan.baidu.com/s/1yECy3SICh_8a1QZzmtu5ww 提取码:n4ip
采用 np.argmax替代minIndex函数:
  1. # -*- coding: utf-8 -*-
  2. """
  3. Spyder Editor

  4. This is a temporary script file.
  5. """

  6. from PIL import Image
  7. from pylab import *
  8. import matplotlib.pyplot as plt  
  9. import numpy as np
  10. from random import *
  11. #import fun

  12. def funfitness(x1,x2):
  13.     y = (x1-0.5)**2+(x2-0.6)**2;
  14.     return y;

  15. # 采用 np.argmax替代
  16. #    def minIndex(fitness, fitnesszbest):
  17. #        for i in range(len(fitness)):
  18. #            if(fitness[i] == fitnesszbest):
  19. #                break;
  20. #        return i;

  21. if __name__=="__main__":
  22.     c1 = 1.49445;
  23.     c2 = 1.49445;
  24.     maxg=200;  
  25.     sizepop=20;
  26.     Vmax=1;
  27.     Vmin=-1;
  28.     popmax=5;
  29.     popmin=-5;
  30.     nVar = 2;
  31.     #print random.random()
  32.     # PSO algorithm parameters
  33.     pop = [[0 for x in range(nVar)] for y in range(sizepop)]
  34.     gbest = [[0 for x in range(nVar)] for y in range(sizepop)]
  35.     fitness = [0 for x in range(sizepop)]
  36.     fitnessgbest = [0 for x in range(sizepop)]
  37.     zbest = [0 for x in range(nVar)]
  38.     V = [[0 for x in range(nVar)] for y in range(sizepop)]
  39.    
  40.     # init pop
  41.     for i in range(sizepop):
  42.         pop[i][0] = popmin + (popmax-popmin)*random();
  43.         pop[i][1] = popmin + (popmax-popmin)*random();
  44.         fitness[i] = funfitness(pop[i][0],pop[i][1]);
  45.         gbest[i][0] = pop[i][0]
  46.         gbest[i][1] = pop[i][1]
  47.         fitnessgbest[i] = fitness[i]
  48.         print(fitness[i])
  49.     fitnesszbest = min(fitness);
  50. #    index = fun.minIndex(fitness, fitnesszbest);
  51.     index = np.argmin( fitness )
  52.     zbest[0] = pop[index][0]
  53.     zbest[1] = pop[index][1]
  54.     print(zbest)
  55.     #plot(range(sizepop), fitness,'r*-')
  56.     #plot( fitness,'r*-')
  57.     #show()
  58.    
  59.     fitness_iter = [0 for x in range(maxg)]
  60.     # main loop
  61.     for i in range(maxg):
  62.         for j in range(sizepop):
  63.             # update vel
  64.             r1 = random();
  65.             r2 = random();
  66.             V[j][0] = V[j][0] + c1*r1*(gbest[j][0]-pop[j][0])+c2*r2*(zbest[0]-pop[j][0]);
  67.             V[j][1] = V[j][1] + c1*r1*(gbest[j][1]-pop[j][1])+c2*r2*(zbest[1]-pop[j][1]);
  68.             if (V[j][0]>Vmax):
  69.                 V[j][0] = Vmax;
  70.             elif (V[j][0]<Vmin):
  71.                 V[j][0] = Vmin;
  72.             if (V[j][1]>Vmax):
  73.                 V[j][1] = Vmax;
  74.             elif (V[j][1]<Vmin):
  75.                 V[j][1] = Vmin;
  76.             # update position
  77.             pop[j][0] = pop[j][0] + 0.5*V[j][0];
  78.             pop[j][1] = pop[j][1] + 0.5*V[j][1];
  79.             if (pop[j][0]>popmax):
  80.                 pop[j][0] = popmax;
  81.             elif (pop[j][0]<popmin):
  82.                 pop[j][0] = popmin;
  83.             if (pop[j][1]>popmax):
  84.                 pop[j][1] = popmax;
  85.             elif (pop[j][1]<popmin):
  86.                 pop[j][1] = popmin;
  87.             
  88.             fitness[j] = funfitness(pop[j][0],pop[j][1]);
  89.             if (fitness[j]<fitnessgbest[j]):
  90.                 fitnessgbest[j] = fitness[j]
  91.                 gbest[j][0] = pop[j][0];
  92.                 gbest[j][1] = pop[j][1];
  93.             if (fitness[j]<fitnesszbest):
  94.                 fitnesszbest= fitness[j];
  95.                 zbest[0] = pop[j][0];
  96.                 zbest[1] = pop[j][1];
  97.         fitness_iter[i] = fitnesszbest;
  98.    
  99.     print("最优解:")
  100.     print(zbest)
  101.     plot( fitness_iter,'b-' )
  102.     plt.show()

复制代码








算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

15

帖子

1

金钱

新手上路

Rank: 1

积分
13
发表于 2020-2-15 16:27:24 | 显示全部楼层
好棒一起学习
回复 支持 反对

使用道具 举报

0

主题

13

帖子

36

金钱

新手上路

Rank: 1

积分
49
发表于 2020-2-17 10:53:03 | 显示全部楼层
很好 的资源 谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

18

帖子

1

金钱

新手上路

Rank: 1

积分
19
发表于 2020-4-29 17:53:33 | 显示全部楼层

很好 的资源 谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

15

帖子

1

金钱

注册会员

Rank: 2

积分
58
发表于 2020-6-15 16:19:51 | 显示全部楼层
感谢分享  感谢分享  感谢分享  
回复 支持 反对

使用道具 举报

0

主题

16

帖子

1

金钱

新手上路

Rank: 1

积分
8
发表于 2020-8-21 22:20:10 | 显示全部楼层
很好的资源谢谢楼主啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 16:24 , Processed in 0.215518 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表