数学建模第五章 进化计算与群体智能
看到这个标题时候我有点疑惑,但很快想起来三体里面的魏成曾经讲过的进化算法,核心就是优胜劣汰那这在算法中如何实现是本节需要认真学习的内容
遗传算法
遗传算法简言以概之就是
思想本质上还是一个搜索。从一堆可行解里面搜索最优解,没有方向漫无目的的检索叫暴力搜索,有方向的才叫启发式搜索。遗传算法的方向就是进化
这里用到求函数极值作为例子
F ( x , y ) = 100 ( y − x 2 ) 2 + ( 1 − x ) 2 F(x, y) = 100(y - x^2)^2 + (1 - x)^2 F(x,y)=100(y−x2)2+(1−x)2
这里代码部分较长,分为以下部分
导入部分
- 导入了
numpy
用于数学计算,matplotlib
和mpl_toolkits.mplot3d
用于3D图形绘制。 - 定义了问题规模相关的常量,如DNA编码长度(DNA_SIZE),种群数量(POP_SIZE),交叉率(CROSSOVER_RATE),变异率(MUTATION_RATE),迭代代数(N_GENERATIONS),以及搜索空间边界(X_BOUND, Y_BOUND)。
目标函数和辅助函数
F(x, y)
定义了目标优化函数,即香蕉函数。plot_3d(ax)
用于绘制目标函数的3D表面图。get_fitness(pop)
计算种群中每个个体的适应度,这里是目标函数值。translateDNA(pop)
将二进制编码的DNA转换为实际的解空间坐标(x, y)。crossover_and_mutation(pop, CROSSOVER_RATE)
执行种群中的交叉和变异操作,生成新一代种群。mutation(child, MUTATION_RATE)
单独处理单个个体的变异。select(pop, fitness)
根据适应度进行选择,实现自然选择的过程。
主程序流程
1.初始化种群pop,随机生成二进制编码的个体。
2.使用plot_3d(ax)首次绘制目标函数的3D图。
3.进行多代迭代:
- 解码种群得到当前代的x, y坐标,并实时在3D图上显示种群分布。
- 应用交叉和变异操作生成新种群。
- 计算新种群的适应度并进行选择,保留适应度更高的个体。
- 迭代结束后,输出最优个体的信息,并再次绘制目标函数图以展示最终结果。
粒子群算法
原理大致是每个“粒子”代表问题空间中的一个候选解,通过跟踪自己的历史最佳位置和整个群体的最佳位置来调整自己的位置
例题
求下面这个函数的极值:
F ( x , y ) = 3 cos ( x y ) + x + y 2 F(x, y) = 3\cos(x y) + x + y^2 F(x,y)=3cos(xy)+x+y2
求解步骤
1.初始化设置
定义了种群的规模(N)、搜索空间维度(D)、最大迭代次数(T)、学习因子(c1, c2)、速度和位置的上下限、以及权重系数的范围。
初始化种群的位置(x)和速度(v),以及个体§和全局(g_best)最优解。
2.适应度函数
定义了目标优化函数func(x)
,本例中为一个包含两个变量的复杂函数。
3.粒子群优化循环
对于每一代(i)中的每个粒子(j),执行以下步骤:
计算个体适应度,更新个体最优解(p_best)
。
根据个体最优和全局最优解更新粒子的速度和位置。
应用边界条件确保速度和位置不超出设定范围。
动态调整惯性权重(w),从w_max线性衰减至w_min,以平衡全局探索和局部开发。
记录每一代的全局最优解,并在循环结束时打印最终的最优解及其对应的适应度值。
绘制迭代次数与最佳适应度值的变化曲线,展示算法的收敛过程。
蚁群算法
蚂蚁通过留下一种叫做信息素的物质来互相通信,信息素的强度指导蚂蚁选择路径,路径越短信息素越强。
- 信息素更新:根据蚂蚁的路径长度更新信息素的强度。
- 路径选择:蚂蚁根据信息素强度和其他启发信息选择路径
退火算法
模拟退火算法灵感来源于金属冶炼中的退火过程。算法在求解过程中允许接受一些较差的解以跳出局部最优,随着迭代的进行,逐渐提高接受标准,最终收敛到全局最优解。
- 接受准则:根据当前解与新解之间的质量和温度决定是否接受新解。
- 冷却计划:随着迭代的进行,逐渐降低温度,减少接受较差解的可能性。
简单做个对比
搜索方式 | 适用问题 | 性能和收敛速度 | |
---|---|---|---|
进化算法 | 通过遗传操作进行全局搜索 | 适用于多种优化问题,特别是当问题复杂或难以建模时 | 通常需要较多的迭代才能收敛,但能处理非常复杂的问题 |
粒子群算法 | 通过粒子间的信息共享进行全局搜索 | 适用于连续优化问题,也可以用于离散问题 | 快速收敛,但在处理复杂问题时可能不如进化算法鲁棒 |
蚁群算法 | 通过信息素进行路径构造,适合组合优化问题 | 特别适合于组合优化问题,如旅行商问题 | 对于特定类型的问题非常有效,但可能需要较长时间来构建信息素 |
模拟退火算法 | 通过温度控制进行全局和局部搜索的平衡 | 适用于求解包含大量局部最优解的问题 | 在适当的参数设置下可以快速找到全局最优解,但参数调整较困难 |