遗传算法与工程优化

JUMU实名认证 发表于 2026-06-26 07:52 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
遗传算法是一种模拟生物进化过程的优化算法,属于进化算法的一种。简单说就是模拟自然界的优胜劣汰、适者生存,通过选择、交叉、变异等操作,一代代进化,最终找到最优解。在工程优化中,很多问题都是复杂的非线性、多峰值、不连续的问题,传统的优化方法容易陷入局部最优,这时候遗传算法就派上用场了。在有限元分析中,遗传算法常用于结构优化、参数优化、可靠性优化等场景。本文将介绍遗传算法的基本概念、原理、操作步骤、应用场景和注意事项,帮助大家入门这门实用的智能优化技术。


一、遗传算法概述

什么是遗传算法:
- 是一种模拟生物进化过程的优化算法
- 属于进化计算、智能算法的一种
- 通过选择、交叉、变异等操作一代代进化
- 最终找到问题的最优解或近似最优解
- 英文是Genetic Algorithm,简称GA

为什么叫遗传算法:
- 因为模拟了生物的遗传和进化过程
- 用基因来表示解的编码
- 用选择、交叉、变异来模拟进化
- 所以叫遗传算法

遗传算法的起源:
- 上世纪60年代,美国的Holland教授提出
- 80年代开始广泛应用和发展
- 现在是最经典的智能优化算法之一
- 衍生出了很多变种和改进

遗传算法的基本思想:
- 把问题的解编码成染色体,也就是基因串
- 初始化一群解,叫做种群
- 评估每个解的好坏,也就是适应度
- 好的解有更大的概率被选中繁殖
- 通过交叉和变异产生新一代的解
- 一代代进化,越来越好
- 最后得到最优的解

遗传算法的特点:
- 直接对解的编码操作,不要求函数可导
- 从多个点同时搜索,不容易陷入局部最优
- 用概率转移规则,不是确定性的
- 通用性强,什么问题都能试试
- 特别适合复杂的、非线性的、多峰值的问题
- 但计算量一般比较大,收敛速度不一定快

应用领域:
- 工程优化设计
- 结构优化和拓扑优化
- 参数辨识和模型校准
- 调度和路径规划
- 机器学习和特征选择
- 组合优化
- 等等,应用非常广泛

二、遗传算法的基本原理

1. 编码方式
怎么把解表示成基因。

什么是编码:
- 就是把问题的解转换成遗传算法能处理的形式
- 就像生物的DNA一样
- 是遗传算法的第一步,也是很关键的一步

常见的编码方式:
- 二进制编码:最经典的,用0和1的串表示
- 实数编码:直接用实数表示,连续优化常用
- 整数编码:用整数表示,比如调度问题
- 排列编码:比如旅行商问题的路径
- 还有树编码、图编码等,根据问题来选

二进制编码:
- 最经典最传统的
- 每个基因位是0或1
- 简单直观,交叉变异好操作
- 但连续问题需要解码,有精度问题
- 现在连续优化用实数编码更多

实数编码:
- 每个基因位就是一个实数
- 直接表示问题的变量
- 不需要解码,方便
- 连续优化问题常用
- 交叉变异的方式和二进制不一样

编码的选择:
- 要根据问题的特点来选
- 离散问题适合二进制或整数
- 连续问题适合实数编码
- 排列问题适合排列编码
- 合适的编码很重要,影响算法的效果

2. 适应度函数
怎么评价解的好坏。

什么是适应度:
- 就是评价一个解好不好的指标
- 对应生物的适应能力
- 适应度越高,解越好
- 被选中繁殖的概率就越大

适应度函数怎么来:
- 一般是从目标函数转换来的
- 如果是求最大值,目标函数直接当适应度也行
- 如果是求最小值,就要转换一下,比如取倒数或者加负号
- 还要保证适应度是非负的
- 有时候还要做尺度变换,防止早熟或者进化慢

注意事项:
- 适应度函数要能正确反映解的好坏
- 计算要快,因为要算很多次
- 要避免适应度相差太大,容易早熟
- 也不能相差太小,选择压力不够
- 根据问题来调整

3. 选择操作
优胜劣汰。

什么是选择:
- 就是从当前种群里选一些好的个体
- 作为父代来繁殖下一代
- 好的个体被选中的概率大
- 差的个体被选中的概率小
- 模拟适者生存

常用的选择方法:
- 轮盘赌选择:也叫比例选择,适应度越高概率越大,最经典
- 锦标赛选择:随机选几个,里面挑最好的,简单常用
- 排序选择:按适应度排序,按排名给概率
- 精英保留:最好的几个直接保留到下一代
- 还有很多其他的选择方法

轮盘赌选择:
- 最经典的选择方法
- 每个个体被选中的概率和适应度成正比
- 就像轮盘赌一样,面积大的概率大
- 简单直观
- 但适应度差很多的时候容易早熟

锦标赛选择:
- 随机选k个个体,一般k=2或3
- 里面选适应度最好的那个
- 简单容易实现
- 选择压力可以调
- 现在用得很多

精英保留:
- 最好的几个个体直接保留到下一代
- 不参与交叉变异
- 保证好的解不会丢掉
- 能提高稳定性
- 一般和其他选择方法配合用

4. 交叉操作
基因重组。

什么是交叉:
- 两个父代个体交换部分基因
- 产生新的子代个体
- 模拟生物的基因重组
- 是遗传算法产生新解的主要方式

常用的交叉方法:
- 单点交叉:随机选一个点,后面的交换
- 两点交叉:选两个点,中间的交换
- 均匀交叉:每个位都按概率交换
- 算术交叉:实数编码用的,两个数加权平均
- 还有很多其他的交叉方式

单点交叉:
- 最简单最经典的
- 随机选一个交叉点
- 两个个体在交叉点后面的部分交换
- 简单容易实现
- 二进制编码常用

均匀交叉:
- 每个基因位都按一定概率交换
- 一般是50%的概率
- 比单点交叉更灵活
- 能产生更多样的后代
- 也比较常用

算术交叉:
- 实数编码常用
- 两个父代的基因加权平均
- 比如子代 = α*父代1 + (1-α)*父代2
- 产生的后代在两个父代之间
- 适合连续优化

交叉概率:
- 就是发生交叉的概率
- 一般取0.6到0.9左右
- 概率太高容易破坏好的解
- 概率太低进化太慢
- 根据问题来调

5. 变异操作
基因突变。

什么是变异:
- 个体的某些基因位发生变化
- 模拟生物的基因突变
- 主要作用是保持种群的多样性
- 防止早熟收敛

常用的变异方法:
- 位翻转变异:二进制用的,0变1,1变0
- 均匀变异:实数编码用的,在范围内随机取一个
- 高斯变异:加一个高斯噪声
- 还有很多其他的变异方式

位翻转变异:
- 二进制编码最常用
- 每个基因位按一定概率翻转
- 0变成1,1变成0
- 简单容易实现

高斯变异:
- 实数编码常用
- 在原来的数上加一个高斯噪声
- 符合正态分布
- 小范围的调整
- 比较符合实际的变异

变异概率:
- 就是每个基因位发生变异的概率
- 一般比较小,比如0.001到0.1
- 概率太高就变成随机搜索了
- 概率太低多样性不够,容易早熟
- 一般比交叉概率小很多

三、遗传算法的基本步骤

1. 编码和初始化
第一步。

怎么做:
- 确定编码方式
- 确定种群大小
- 随机生成初始种群
- 种群里的每个个体都是一个解

注意事项:
- 编码要合适,要能表示问题的解
- 种群大小要合适,太小容易早熟,太大计算慢
- 初始种群要尽量多样,覆盖搜索空间
- 一般是随机初始化
- 也可以用一些启发式方法生成更好的初始解

2. 适应度计算
评价每个个体。

怎么做:
- 把每个个体解码成实际的解
- 计算目标函数值
- 转换成适应度
- 每个个体都算一遍

注意事项:
- 适应度计算要准确
- 计算要快,因为要算很多次
- 适应度函数要合理
- 注意处理约束条件

3. 选择操作
选父代。

怎么做:
- 根据适应度选择一些个体
- 作为繁殖下一代的父代
- 好的个体被选中的概率大
- 一般选的数量和种群大小一样

注意事项:
- 选择压力要合适
- 太大容易早熟,太小进化慢
- 可以用精英保留策略
- 选择方法有很多,选合适的

4. 交叉操作
产生新个体。

怎么做:
- 从选中的父代里两两配对
- 按交叉概率进行交叉
- 产生子代个体
- 组成新的种群

注意事项:
- 交叉概率要合适
- 交叉方式要和编码匹配
- 要保证后代的合法性,比如排列编码不能有重复
- 交叉是产生新解的主要方式

5. 变异操作
基因突变。

怎么做:
- 每个个体的每个基因位
- 按变异概率发生变异
- 产生变异后的个体
- 得到新一代的种群

注意事项:
- 变异概率一般比较小
- 主要作用是保持多样性
- 变异方式要和编码匹配
- 不要让变异概率太大

6. 终止条件判断
什么时候停。

常用的终止条件:
- 达到最大迭代次数
- 适应度达到了目标值
- 连续多少代没有改进
- 计算时间到了
- 等等

注意事项:
- 迭代次数太少可能没收敛
- 太多了浪费计算
- 可以多个条件结合
- 根据问题来定

7. 结果输出
最后得到结果。

怎么做:
- 找到种群里最好的个体
- 解码成实际的解
- 就是找到的最优解
- 输出结果

注意事项:
- 遗传算法是随机的,每次结果可能不一样
- 可以多跑几次取最好的
- 结果可能是近似最优,不一定是全局最优
- 要验证结果的合理性

四、遗传算法的优缺点

1. 优点
遗传算法的好处。

优点总结:
- 通用性强,什么优化问题都能试试
- 不要求目标函数可导、连续
- 从多点同时搜索,不容易陷入局部最优
- 适合全局优化
- 可以处理离散、连续、组合等各种问题
- 并行性好,容易并行计算
- 原理相对简单,容易理解和实现

2. 缺点
遗传算法的问题。

缺点总结:
- 计算量比较大,要算很多次适应度
- 收敛速度不一定快
- 参数比较多,要调的参数不少
- 有一定的随机性,结果不稳定
- 容易早熟收敛,也就是提前卡住
- 不一定能找到全局最优
- 简单的问题可能不如传统方法高效

3. 早熟收敛
常见的问题。

什么是早熟:
- 就是还没找到最优解就收敛了
- 种群都差不多,没有多样性了
- 卡在局部最优出不来
- 是遗传算法常见的问题

为什么会早熟:
- 选择压力太大,好的个体复制太多
- 种群多样性不够
- 变异概率太小
- 问题本身多峰值
- 等等

怎么防止早熟:
- 调整选择压力,不要太大
- 提高变异概率
- 用适应度尺度变换
- 保持种群多样性
- 用多种群或者自适应参数
- 重新初始化部分个体
- 等等,很多方法

五、遗传算法在有限元中的应用

1. 结构尺寸优化
最常见的应用。

怎么用:
- 把结构的尺寸参数作为设计变量
- 比如板厚、截面尺寸等
- 目标是最小化重量或者成本
- 约束是应力、位移、频率等
- 用遗传算法来找最优的参数组合

为什么用遗传算法:
- 优化问题可能是非线性的
- 可能有很多局部最优
- 传统优化方法容易卡住
- 遗传算法全局搜索能力强
- 可以处理各种约束

注意事项:
- 每次适应度计算都要跑一次有限元
- 计算量会很大
- 种群不能太大,迭代不能太多
- 经常要配合代理模型来加速
- 或者用并行计算

2. 形状优化和拓扑优化
更高级的优化。

形状优化:
- 优化结构的形状
- 比如圆角的大小、曲线的形状
- 用控制点或者参数化的形状
- 遗传算法来优化这些参数
- 目标是降低应力集中之类的

拓扑优化:
- 优化材料的分布
- 哪里放材料哪里不放
- 可以得到全新的结构形式
- 遗传算法也可以用来做拓扑优化
- 但计算量更大

3. 参数辨识和模型校准
反问题。

怎么用:
- 有试验数据
- 要校准有限元模型的参数
- 比如材料参数、边界条件参数
- 让模拟结果和试验结果尽量吻合
- 用遗传算法来优化这些参数

为什么用遗传算法:
- 参数辨识问题经常是病态的
- 可能有很多局部最优
- 传统方法容易卡住
- 遗传算法全局搜索好一些
- 可以处理多参数的情况

4. 可靠性优化
考虑不确定性的优化。

怎么用:
- 优化的时候考虑参数的不确定性
- 既要性能好,又要可靠性高
- 也就是可靠性优化设计
- 每次算可靠度都要很多次有限元
- 配合遗传算法的话计算量很大

挑战:
- 计算量特别大
- 两层优化,外层遗传算法,内层可靠度计算
- 一般都要用代理模型
- 或者用更高效的可靠度方法
- 比如FORM、SORM等

5. 其他应用
还有很多其他应用。

比如:
- 复合材料铺层优化
- 传感器布置优化
- 试验设计优化
- 损伤识别
- 路径规划
- 等等,很多

六、遗传算法的改进和变种

1. 自适应遗传算法
参数自己调。

什么是自适应:
- 交叉概率和变异概率不是固定的
- 根据种群的情况自动调整
- 比如适应度好的交叉变异概率小
- 适应度差的交叉变异概率大
- 或者根据进化的代数调整

优点:
- 不用手动调参数
- 进化过程更合理
- 前期探索,后期收敛
- 效果一般比固定参数好

2. 多种群遗传算法
多个种群一起进化。

什么是多种群:
- 不止一个种群
- 有好几个种群同时进化
- 种群之间偶尔有个体迁移
- 模拟不同的生态环境

优点:
- 更容易保持多样性
- 不容易早熟
- 可以并行计算
- 效果一般比单种群好

3. 混合遗传算法
和其他方法结合。

什么是混合:
- 遗传算法和其他优化方法结合
- 比如遗传算法+局部搜索
- 全局用遗传算法,局部用梯度法
- 各取所长

优点:
- 全局搜索和局部搜索结合
- 精度更高,收敛更快
- 比纯遗传算法效率高
- 是现在常用的思路

4. 其他进化算法
类似的算法。

比如:
- 进化策略ES
- 进化规划EP
- 遗传编程GP
- 差分进化DE
- 等等,都是进化计算的分支

还有群智能算法:
- 粒子群优化PSO
- 蚁群算法ACO
- 人工蜂群算法ABC
- 等等,也是智能优化算法

这些算法各有各的特点,适用不同的问题。

七、总结

遗传算法是一种经典的智能优化算法,模拟生物进化过程,通过选择、交叉、变异等操作来搜索最优解。它通用性强,不需要目标函数可导,适合全局优化,在工程优化、参数辨识、可靠性分析等方面都有广泛的应用。但遗传算法也有计算量大、容易早熟、参数难调等问题,实际应用中经常需要和代理模型、并行计算等技术结合,或者用改进的变种。

遗传算法的要点总结:
- 模拟生物进化,通过选择、交叉、变异一代代进化找最优解
- 基本要素:编码、适应度函数、选择、交叉、变异
- 基本步骤:初始化、计算适应度、选择、交叉、变异、判断终止、输出结果
- 优点是通用性强、全局搜索、不要求可导;缺点是计算量大、容易早熟、参数多
- 在有限元中用于尺寸优化、形状优化、参数辨识、可靠性优化等
- 有很多改进和变种,比如自适应、多种群、混合遗传算法等

给初学者的建议:
- 先理解基本原理,知道遗传算法是怎么工作的
- 从简单的问题开始,比如函数优化,先练手
- 先实现一个简单的版本,有个直观认识
- 参数调节很重要,多试试不同的参数
- 不要盲目用遗传算法,简单的问题用传统方法更高效
- 计算量是大问题,有限元结合的话一般要配合代理模型
- 早熟收敛是常见问题,要注意保持种群多样性
- 遗传算法是随机的,多跑几次取最好的
- 可以试试各种改进的版本,看哪个效果好
- 多做实际案例,在实践中积累经验

遗传算法是一个很强大也很灵活的优化工具,掌握了之后可以解决很多传统优化方法解决不了的问题。虽然有一定的学习曲线,但基本原理并不复杂,入门还是比较容易的。希望本文能帮助大家入门遗传算法。如果有遗传算法相关的经验或者问题,欢迎在评论区交流讨论。

  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- JMCAD苏ICP备18040927号-1

©2017-2026 常州居居米智能技术有限公司 苏公网安备32041102000587号