• 遗传算法与粒子群算法的Python实现


    • 遗传算法本文应用的是 python geatpy module
    • 粒子群算法本文应用的是 python pyswarm module

    遗传算法 

    • 它的不等约束是...<=0
    1. import geatpy as ea
    2. import numpy as np
    3. @ea.Problem.single
    4. def evalVars(Vars):
    5. x1 = Vars[0]
    6. x2 = Vars[1]
    7. x3 = Vars[2]
    8. x4 = Vars[3]
    9. f = (x1 + 2)**2 +\
    10. (x2 - 3)**2 +\
    11. (x3 + 2)**2 +\
    12. x4
    13. CV = np.array([ - x2 + x1 ,
    14. -0.001 + (x4-3)**2])
    15. return f, CV
    16. problem = ea.Problem(name='test',
    17. M=1,
    18. maxormins=[1],
    19. Dim=4,
    20. varTypes=[0, 0, 0, 0],
    21. lb=[-5, -5, -5, -5],
    22. ub=[ 5, 5, 5, 5],
    23. evalVars=evalVars)
    24. algorithm = ea.soea_SEGA_templet(problem,
    25. ea.Population(Encoding='RI', NIND=20),
    26. MAXGEN=500,
    27. logTras=1,
    28. trappedValue=1e-8,
    29. maxTrappedCount=10)
    30. res = ea.optimize(algorithm, seed=1, verbose=True, \
    31. drawing=1, outputMsg=True, drawLog=True, \
    32. saveFlag=True, dirName='result')
    1. ==================================================================================
    2. gen| eval | f_opt | f_max | f_avg | f_min | f_std
    3. ----------------------------------------------------------------------------------
    4. 34| 700 | 1.02093E+01 | 1.02093E+01 | 1.02093E+01 | 1.02093E+01 | 0.00000E+00
    5. 35| 720 | 1.02093E+01 | 1.02093E+01 | 1.02093E+01 | 1.02093E+01 | 0.00000E+00
    6. 36| 740 | 1.01760E+01 | 2.07075E+01 | 1.15175E+01 | 1.01760E+01 | 3.47351E+00
    7. 37| 760 | 1.01760E+01 | 2.07636E+01 | 1.24590E+01 | 1.01760E+01 | 3.94129E+00
    8. 38| 780 | 3.07598E+00 | 1.02096E+01 | 9.84393E+00 | 3.07598E+00 | 1.55274E+00
    9. 39| 800 | 3.07497E+00 | 1.02093E+01 | 8.79644E+00 | 3.07497E+00 | 2.70962E+00
    10. 40| 820 | 3.07497E+00 | 1.01723E+01 | 6.33722E+00 | 3.07497E+00 | 3.20984E+00
    11. 41| 840 | 3.05616E+00 | 3.72432E+00 | 3.30975E+00 | 3.05616E+00 | 2.94966E-01
    12. 42| 860 | 3.03355E+00 | 3.07598E+00 | 3.07030E+00 | 3.03355E+00 | 1.05715E-02
    13. 43| 880 | 3.03355E+00 | 3.07497E+00 | 3.06473E+00 | 3.03355E+00 | 1.05250E-02
    14. 44| 900 | 3.03354E+00 | 3.06010E+00 | 3.05215E+00 | 3.03354E+00 | 9.52747E-03
    15. 45| 920 | 3.03236E+00 | 3.05616E+00 | 3.04503E+00 | 3.03236E+00 | 1.05466E-02
    16. 46| 940 | 3.03236E+00 | 3.05163E+00 | 3.03547E+00 | 3.03236E+00 | 5.48001E-03
    17. 47| 960 | 3.03078E+00 | 3.03355E+00 | 3.03308E+00 | 3.03078E+00 | 7.69107E-04
    18. 48| 980 | 3.03078E+00 | 3.03354E+00 | 3.03243E+00 | 3.03078E+00 | 8.50674E-04
    19. 49| 1000 | 3.03060E+00 | 3.03236E+00 | 3.03177E+00 | 3.03060E+00 | 6.64341E-04
    20. 50| 1020 | 3.03060E+00 | 3.03187E+00 | 3.03109E+00 | 3.03060E+00 | 5.18200E-04
    21. 51| 1040 | 3.03034E+00 | 3.03080E+00 | 3.03069E+00 | 3.03034E+00 | 1.24733E-04
    22. 52| 1060 | 3.02960E+00 | 3.03074E+00 | 3.03050E+00 | 3.02960E+00 | 3.41333E-04
    23. 53| 1080 | 3.02931E+00 | 3.03060E+00 | 3.03028E+00 | 3.02931E+00 | 4.18144E-04
    24. 54| 1100 | 3.02931E+00 | 3.03056E+00 | 3.02998E+00 | 3.02931E+00 | 4.08041E-04
    25. 55| 1120 | 3.02931E+00 | 3.03001E+00 | 3.02960E+00 | 3.02931E+00 | 2.06836E-04
    26. 56| 1140 | 3.02910E+00 | 3.02960E+00 | 3.02942E+00 | 3.02910E+00 | 1.40018E-04
    27. 57| 1160 | 3.00978E+00 | 3.02951E+00 | 3.02829E+00 | 3.00978E+00 | 4.24883E-03
    28. 58| 1180 | 3.00978E+00 | 3.02931E+00 | 3.02719E+00 | 3.00978E+00 | 5.80743E-03
    29. 59| 1200 | 3.00978E+00 | 3.02910E+00 | 3.02684E+00 | 3.00978E+00 | 5.71712E-03
    30. 60| 1220 | 3.00977E+00 | 3.02876E+00 | 3.02437E+00 | 3.00977E+00 | 7.36375E-03
    31. 61| 1240 | 3.00913E+00 | 3.02828E+00 | 3.01725E+00 | 3.00913E+00 | 8.26062E-03
    32. 62| 1260 | 3.00913E+00 | 3.01029E+00 | 3.00973E+00 | 3.00913E+00 | 2.63957E-04
    33. Execution time: 0.03466796875 s
    34. Evaluation number: 1260
    35. The best objective value is: 3.009134825271758
    36. The best variables are:
    37. -1.9990825653076172 3.0016613006591797 -2.030458450317383 3.0082035064697266

    粒子群算法

    • 它的不等约束是...>=0
    1. from pyswarm import pso
    2. import numpy as np
    3. def opt(x):
    4. x1 = x[0]
    5. x2 = x[1]
    6. x3 = x[2]
    7. x4 = x[3]
    8. return (x1 + 2)**2 +\
    9. (x2 - 3)**2 +\
    10. (x3 + 2)**2 +\
    11. x4
    12. def con(x):
    13. x1 = x[0]
    14. x2 = x[1]
    15. x3 = x[2]
    16. x4 = x[3]
    17. return [ x2 - x1 ,0.001-(x4-3)**2]
    18. lb = [-5, -5, -5, -5]
    19. ub = [ 5, 5, 5, 5]
    20. xopt, fopt = pso(opt, lb, ub, f_ieqcons=con)
    21. print("xopt:", xopt)
    22. print("fopt:", fopt)
    1. Stopping search: Swarm best objective change less than 1e-08
    2. xopt: [-2.00094176 3.00064191 -1.99431492 2.96837868]
    3. fopt: 2.9684122988614785

  • 相关阅读:
    puzzle(019.3)Colors United、染色棋盘
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的记账app[包运行成功]Android毕业设计Java项目源码论文
    Redis哨兵模式
    OpenCV入门(C++/Python)- 使用OpenCV读取、显示和写入图像(一)
    27. 移除元素、Leetcode的Python实现
    ZooKeeper 概述
    多线程中ThreadPoolExecutor.map()中传递多个参数
    高阶数据结构(2)-----红黑树(未完成)
    已解决ERROR: No matching distribution found for cv2
    算法D38 | 动态规划1 | 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
  • 原文地址:https://blog.csdn.net/Chandler_river/article/details/132925388