当前位置:   article > 正文

常用优化算法概览_stopping search: maximum iterations reached

stopping search: maximum iterations reached
  • 智能优化算法(启发式算法)

常用优化算法

经典优化算法

  • genetic algorithm 遗传算法(GA) 20世纪60年代
  • Simulated annealing algorithm 模拟退火算法(SA) 1975
  • Particle Swarm Optimization 粒子群算法(PSO)
  • Ant Colony Optimization 蚁群算法(ACO)
  • Tabu Search 禁忌搜索算法(TS)
  • Chaotic Optimization Algorithm 混沌优化算法(COA)

优化算法前沿

  • Dung Beetle Optimizer 蜣螂算法(DBO) 2022
  • Grey Wolf Optimizer 灰狼优化算法(GWO) 2014
  • Sparrow Search Algorithm 麻雀搜索算法(SSA)
  • ...
  • ...

  • 遗传算法与模拟退火算法都是非常常用的算法了,相关知识很容易得可以被检索到,本文不予赘述

粒子群算法

  • 无群体意识的飞鸟(指的是飞鸟不像borg)如何找到食物呢。
    • 假如所有的鸟都知道 
      • 自己与食物的距离
    • 假如鸟之间
      • 可以交换 自己与食物的距离 这一信息
    • 那么就可以找出一种办法,使得鸟群更趋近于食物

粒子群算法的基本思路

  • 用Python 3.11.4 编写“伪代码” (这玩意支持中文作为变量名,还是很不错的,这已经不是伪代码的范畴了)
  1. import random
  2. 鸟群初始化 = random.random()
  3. 鸟群 = 鸟群初始化
  4. def 个体发现的最优位置():
  5. return 1
  6. def 群体发现的最优位置():
  7. return 1
  8. class 鸟个体():
  9. def __init__(self, 鸟初始位置):
  10. self.鸟位置 = 鸟初始位置
  11. def 鸟个体位置更新(self, 群体最优位置, 个体最优位置):
  12. 个体学习因子 = 0.5
  13. 群体学习因子 = 0.5
  14. assert (个体学习因子+群体学习因子)==1,"学习因子设置错误!"
  15. ####
  16. self.鸟位置 = 鸟更新位置
  17. 群体迭代限制 = 100
  18. for 群体迭代次数 in range(群体迭代限制):
  19. 群体最优位置 = 群体发现的最优位置()
  20. for 鸟个体 in 鸟群:
  21. 个体最优位置 = 个体发现的最优位置()
  22. 鸟个体.鸟个体位置更新(群体最优位置, 个体最优位置)
  • 不一定要面向对象,我随手写得,觉得可以面向对象一下,上下也没有对应起来

pyswarm module

遗传算法与粒子群算法的Python实现 这篇博客里面有一个很棒的例子,我相信是可以用作参考的

  • 这里仔细得探讨一下这个module
  • 查看help

Help on package pyswarm:

NAME
    pyswarm

DESCRIPTION
   =========================================================================
    pyswarm: Particl swarm optimization (PSO) with constraint support   =========================================================================
    Author: Abraham Lee
    Copyright: 2013-2014

PACKAGE CONTENTS
    pso

VERSION
    0.6

AUTHOR
    Abraham Lee

FILE
 ....

  • 首先我们先向编写这个模块的人致敬
  • 当我们打开一个help 文档时(这些文档常常有着很统一的格式),我们特别需要注意PACKAGE CONTENTS。很多module 的DESCRIPTION 是很占位子的

  • 查看 help(pso)
  • Parameters
    • func : The function to be minimized
    • lb : The lower bounds
    • ub : The upper bounds
    • 强制要求设置上下界
    • 不需要给出导函数
    • 不需要猜测值
  • Optional
    • ieqcons
      • A list of functions of length n such that ieqcons[j](x,*args) >= 0.0
    • f_ieqcons
      • Returns a 1-D array in which each element must be greater or equal to 0.0 in a successfully optimized problem
      • 当该项被指定后,ieqcons 会被忽视
    • args and kwargs
      • 额外参数
    • swarmsize and maxiter
      • 粒子(鸟)的数目 默认为100
      • 种群最大迭代次数 默认为100
    • phip : 个体学习因子(Default: 0.5) and phig : 群体学习因子(Default: 0.5)
    • 简单得说,不支持等式约束,但是实际操作中可以使用 -abs(fun)>=0 作为替代
      • 但是建议添加一个 tol 
        • tol - abs(fun) >= 0 
      • 防止因为精度问题导致无法得到结果
    • 允许 修改 个体学习因子 与 群体学习因子 
      • 也就是说支持验证
      • 对优化算法做最优化了
  • 实战
  1. from pyswarm import pso
  2. import numpy as np
  3. import pyswarm
  4. def opt(x):
  5. x1 = x[0]
  6. x2 = x[1]
  7. x3 = x[2]
  8. x4 = x[3]
  9. return (x1 + 2)**2 +\
  10. (x2 - 3)**2 +\
  11. (x3 + 2)**2 +\
  12. x4
  13. def con(x):
  14. tol = 1e-4
  15. x1 = x[0]
  16. x2 = x[1]
  17. x3 = x[2]
  18. x4 = x[3]
  19. return [ x2 - x1 ,tol-(x4-3)**2]
  20. lb = [-5, -5, -5, -5]
  21. ub = [ 5, 5, 5, 5]
  22. xopt, fopt = pso(opt, lb, ub, f_ieqcons=con)
  23. print("xopt:", xopt)
  24. print("fopt:", fopt)

Stopping search: maximum iterations reached --> 100
xopt: [-2.04252256  2.86597889 -1.96153295  2.9900635 ]
fopt: 3.0113130416323957


  • 现在我们看看修改tol 之后的结果
tol(1e-n)1234567
opt(should be 3)2.682.902.983.436.8119.9113.89
  • 也就是说,这些约束并不能很好得被满足
    • 也就是说 PSO 还不够完善
    • 可信度并不是特别高

蚁群算法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/798307
推荐阅读
相关标签
  

闽ICP备14008679号