常用优化算法概览

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

常用优化算法

经典优化算法

  • 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 编写“伪代码” (这玩意支持中文作为变量名,还是很不错的,这已经不是伪代码的范畴了)
import random
鸟群初始化 = random.random()
鸟群 = 鸟群初始化

def 个体发现的最优位置():
    return 1
def 群体发现的最优位置():
    return 1

class 鸟个体():
    def __init__(self, 鸟初始位置):
        self.鸟位置 = 鸟初始位置
        
    def 鸟个体位置更新(self, 群体最优位置, 个体最优位置):
        个体学习因子 = 0.5
        群体学习因子 = 0.5
        assert (个体学习因子+群体学习因子)==1,"学习因子设置错误!"
        ####
        self.鸟位置 = 鸟更新位置


群体迭代限制 = 100
for 群体迭代次数 in range(群体迭代限制):
    群体最优位置 = 群体发现的最优位置()
    for 鸟个体 in 鸟群:
        个体最优位置 = 个体发现的最优位置()
        鸟个体.鸟个体位置更新(群体最优位置, 个体最优位置)
  • 不一定要面向对象,我随手写得,觉得可以面向对象一下,上下也没有对应起来

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 
      • 防止因为精度问题导致无法得到结果
    • 允许 修改 个体学习因子 与 群体学习因子 
      • 也就是说支持验证
      • 对优化算法做最优化了
  • 实战
from pyswarm import pso
import numpy as np
import pyswarm

def opt(x):
    x1 = x[0]
    x2 = x[1]
    x3 = x[2]
    x4 = x[3]
 
    return (x1 + 2)**2 +\
           (x2 - 3)**2 +\
           (x3 + 2)**2 +\
           x4
 
def con(x):
    tol = 1e-4
    
    x1 = x[0]
    x2 = x[1]
    x3 = x[2]
    x4 = x[3]
 
    return [ x2 - x1 ,tol-(x4-3)**2]
 
lb = [-5, -5, -5, -5]
ub = [ 5,  5,  5,  5]
 
xopt, fopt = pso(opt, lb, ub, f_ieqcons=con)
print("xopt:", xopt)
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) 1 2 3 4 5 6 7
opt(should be 3) 2.68 2.90 2.98 3.43 6.81 19.91 13.89
  • 也就是说,这些约束并不能很好得被满足
    • 也就是说 PSO 还不够完善
    • 可信度并不是特别高

蚁群算法

你可能感兴趣的:(#,优化算法,算法,抽象代数,开发语言,python,数学建模)