• 常用优化算法概览


    • 智能优化算法(启发式算法)

    常用优化算法

    经典优化算法

    • 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 还不够完善
      • 可信度并不是特别高

    蚁群算法

  • 相关阅读:
    如何将本地的项目上传到Git
    Aptos 域名服务 (ANS) 上线主网
    Docker 存储卷
    Spark面试问题总结
    修改了 node_modules 中的依赖,如何共享: `patch-package`
    WordPress(6)网站侧边栏倒计时进度小工具
    WebRTC[50] - WebRTC支持SVC时SDP信令的协商过程
    Redis的缓存问题(三)缓存穿透、缓存雪崩、缓存击穿
    语言大模型100K上下文窗口的秘诀
    化工行业升级进行时,数商云B2B商城系统询报价功能助力企业精确对接供求
  • 原文地址:https://blog.csdn.net/Chandler_river/article/details/133050643