遗传算法(三)——适应度与选择

article/2025/10/17 6:06:26

适应度(fitness)

含义:
个体的适应度(fitness)指的是个体在种群生存的优势程度度量,用于区分个体的“好与坏”。适应度使用适应度函数(fitness function)来进行计算。适应度函数也叫评价函数,主要是通过个体特征从而判断个体的适应度。

评价一个个体的适应度的一般过程:

  1. 对个体编码串进行解码处理后,可得到个体的表现型。
  2. 由个体的表现型可计算出对应个体的目标函数值。
  3. 根据最优化问题的类型,由目标函数值按一定的转换规则求出个体的适应度。

设计要求:
单值、连续、非负、最大化、合理、一致性、计算量尽可能小、通用新尽可能强等。

注:下面例子都是针对单目标优化问题,并且三种设计都是 F i t ( x ) Fit(x) Fit(x)越大证明个体越好

举例1:

  • 对于 m a x f ( x ) maxf(x) maxf(x),取 F i t ( x ) = f ( x ) Fit(x)=f(x) Fit(x)=f(x)
  • 对于 m i n f ( x ) minf(x) minf(x),取 F i t ( x ) = − f ( x ) Fit(x)=-f(x) Fit(x)=f(x)

举例2:

  • 对于 m a x f ( x ) maxf(x) maxf(x)
    F i t ( x ) = f ( x ) − f m i n Fit(x)=f(x)-f_{min} Fit(x)=f(x)fmin,其中, f m i n f_{min} fmin f ( x ) f(x) f(x)的下界(最小值)
  • 对于 m i n f ( x ) minf(x) minf(x)
    F i t ( x ) = f m a x − f ( x ) Fit(x)=f_{max}-f(x) Fit(x)=fmaxf(x),其中, f m a x f_{max} fmax f ( x ) f(x) f(x)的上界(最大值)

进一步地,如果提高效率,当 F i t ( x ) < 0 Fit(x)<0 Fit(x)<0时,令 F i t ( x ) = 0 Fit(x)=0 Fit(x)=0

举例3:

  • 对于 m a x f ( x ) maxf(x) maxf(x)
    F i t ( x ) = 1 1 + c + f ( x ) Fit(x)=\frac{1}{1+c+f(x)} Fit(x)=1+c+f(x)1,其中, c ≥ 0 c≥0 c0 c + f ( x ) ≥ 0 c+f(x)≥0 c+f(x)0
  • 对于 m i n f ( x ) minf(x) minf(x)
    F i t ( x ) = 1 1 + c − f ( x ) Fit(x)=\frac{1}{1+c-f(x)} Fit(x)=1+cf(x)1,其中, c ≥ 0 c≥0 c0 c − f ( x ) ≥ 0 c-f(x)≥0 cf(x)0

这个方法与举例2有点类似,但是可以通过 c c c F i t ( x ) Fit(x) Fit(x)的范围进行控制。

适应度函数的尺度变换:
为了防止适应度计算的过程中适应度的值分布不合理或者难以体现个体的特性,可以进行适应度的尺度变换调整,变换的方法包括线性变换、幂函数变换、指数变换(类似于模拟退火)、Goldberg线性拉伸变换。
具体的变换过程推荐看这个文档。

重要性:
适应度函数的设计需要得当,不然很容易使得遗传算法出现欺骗现象(早熟现象,陷入局部),具体表现在:

  • 进化初期,个别超常适应度的个体直接控制了选择的过程;
  • 进化后期,个体差异太小,多样性受到破坏,陷入局部峰值。

选择(Select)

选择操作就是用来确定如何从父代群体中按某种方法选取哪些个体作为父母,然后进行交配(重组/交叉)操作,生成新的个体的过程。

在自然界中,一个种群中并不是所有个体都能“有幸地”成为父母然后顺利“传宗接代”的,足够强大的个体会有更高的概率生成下一代。因此,选择其实也是存在概率的,选择概率由该个体的适应度来决定。

个体选择概率的两种分配方法:

  • 按比例的适应度选择(proportional fitness assignment):完全由适应度大小来决定选择概率:

某个个体 i i i,其适应度为 f i f_i fi,则其被选中的概率 P i P_i Pi为:
P i = f i ∑ i = 1 n f i P_i=\frac{f_i}{\sum_{i=1}^n f_i} Pi=i=1nfifi

  • 按排序的适应度选择(Rank-based fitness assignment):选择过程考虑了个体在种群中的排序位置,意思是如果按上面的三种例子所示的计算方法得到的适应度虽然值很低,但是你在种群中排前五,证明这个个体还是很好的。

线性排序(by Baker):
P i = 1 μ [ η m a x − ( η m a x − η m i n ) ⋅ i − 1 μ − 1 ] , 1 ≤ η m a x ≤ 2 , η m i n = 2 − η m a x P_i=\frac{1}{\mu}[\eta_{max}-(\eta_{max}-\eta_{min})\cdot \frac{i-1}{\mu-1}], 1\leq\eta_{max}\leq2, \eta_{min}=2-\eta_{max} Pi=μ1[ηmax(ηmaxηmin)μ1i1],1ηmax2,ηmin=2ηmax
其中, η \eta η为种群大小, i i i为个体序号, η m a x \eta_{max} ηmax代表选择压力
非线性排序(by Michalewicz):
P i = c ( 1 − c ) i − 1 P_i=c(1-c)^{i-1} Pi=c(1c)i1
其中, i i i为个体序号, c c c为排序第一的个体的选择概率

几个概念:

  • 选择压力(selection pressure):最佳个体选中的概率与平均个体选中概率的比值
  • 偏差(bias):个体正规化适应度与其期望再生概率的绝对差值
  • 个体扩展(spread):单个个体子代个数的范围
  • 多样化损失(loss of diversity):选择阶段未选择的个体数目比例
  • 选择强度(selection intensity):将正规高斯分布应用于选择方法,期望平均适应度
  • 选择方差(selection variance):将正规高斯分布应用于选择方法,期望种群适应度的方差

常用的选择方法:

  1. 轮盘赌选择法(roulette wheel selection)
    出发点是适应度值越好的个体被选择的概率越大。
    如,在求解最大化问题时,可以直接用适应度/总适应度来计算个体的选择概率,然后直接通过概率对个体进行选择。如果是求解最小化问题,那么就要对适应度函数进行转换,转化为最大化问题。
    如下图所示,可以在选择时生成一个[0,1]区间内的随机数,若该随机数小于或等于个体的累积概率(累计概率就是个体列表该个体前面的所有个体概率之和)且大于个体1的累积概率,选择个体进入子代种群。
    在这里插入图片描述
  2. 随机遍历抽样法(stochastic universal sampling)
    像轮盘赌一样计算选择概率,只是在随机遍历选择法中等距离的选择体,设npoint为需要选择的个体数目,等距离的选择个体,选择指针的距离是1/npoint,第一个指针的位置由[0,1/npoint]的均匀随机数决定。
    在这里插入图片描述
  3. 锦标赛选择法(tournament selection)
    锦标赛方法选择策略每次从种群中取出一定数量个体(成为竞赛规模),然后选择其中最好的一个进入子代种群。重复该操作,直到新的种群规模达到原来的种群规模。

另外提一提

一般来说,锦标赛选择策略会比轮盘赌选择策略有更好的通用性,而且性能更优。

当然还有一些其他的选择策略,比如随机竞争选择(Stochastic Tournament)、无妨会随机选择/期望值选择(Excepted Value Selection)、确定式选择、局部选择法(Local Selection)、截断选择法(Truncation Selection)等等。

基本遗传算法达到收敛的代数(number of generations)和选择强度(selection intensity)成反比,选择强度越高,那就收敛越慢,一般来说较高的选择强度是很好的选择方法,但是太高又会导致收敛过快(早熟,陷入局部最优)。


http://chatgpt.dhexx.cn/article/ocqnmn6q.shtml

相关文章

遗传算法适应度函数的计算原理

遗传算法&#xff1a; 适应度函数&#xff1a; FitnVranking(ObjV) ranking函数分两步操作&#xff1a; &#xff08;1&#xff09;对个体的目标值ObjV进行由小到大的排序 &#xff08;2&#xff09;按照排序的值&#xff0c;利用计算公式 其中&#xff1a;Position是第一步…

SQL 分组统计去重有条件的过滤

见字如面&#xff0c;如标题拆分&#xff1a; 分组 GROUP BY field_name统计 COUNT(field_name)去重 DISTINCT field_name条件过滤 CASE WHEN age > 18 THEN age END 示例&#xff1a; 前序&#xff1a; 表结构 CREATE TABLE data_table_name (id int(11) …

mysql sql 分组求和函数_SQL分组函数group by和聚合函数(COUNT、MAX、MIN、AVG、SUM)的几点说明...

1 分组聚合的原因 SQL中分组函数和聚合函数之前的文章已经介绍过,单说这两个函数有可能比较好理解,分组函数就是group by,聚合函数就是COUNT、MAX、MIN、AVG、SUM。 拿上图中的数据进行解释,假设按照product_type这个字段进行分组,分组之后结果如下图。 SELECT product_ty…

SQL分组取最大值的方法

一、业务需求 1.1.数据表展示 1.2.查询要求 要求查询所有字段&#xff0c;并按iceName,orderPath,exceptionType分组&#xff0c;在分组时取systemTime值最大的那条数据 注&#xff1a;本文适用于查询多字段的查询&#xff0c;单纯的 select MAX(字段A) 或select B,MAX(字段…

SQL分组后将不存在的组记为0

说明 最近遇到这么一个需求&#xff1a;统计区间在0-2000,2000-3000,3000-4000,4000-5000,5000工资的人数。 快速开始 数据如下&#xff1a; 开始看到这个问题&#xff0c;想都没想就开始写了下面的代码&#xff1a; SELECT casewhen salary < 2000 then [0, 2000)when …

SQL 分组条件深入剖析

问题 在 stackoverflow 网站上看到这样一个 SQL 分组条件的需求&#xff0c;需求看似挺简单&#xff0c;但能把 SQL 写正确对于新手来说也不容易&#xff0c;我们拿过来深入剖析一下&#xff0c;数据如下&#xff1a; 需求是查找只有Ready 状态的设备。 解答 自然思路&#xff…

SQL分组排序函数(组内分别排序)

建表并插入数据 -- 部门表 create table dept( deptno int primary key auto_increment, -- 部门编号 dname varchar(14) , -- 部门名字 loc varchar(13) -- 地址 ) ; -- 员工表 create table emp( empno int primary key auto_increment,-- 员工编号 …

sql 分组 行列转换

sql 分组 & 行列转换 文章目录 sql 分组 & 行列转换1、groupby&#xff08;配合组合函数使用&#xff09;2、Sql的行列转换 - 纵横表1&#xff09;纵表转横表2&#xff09;横表转纵表 sql语句教程参考W3C School - SQL 教程 就够了 1、groupby&#xff08;配合组合函数…

SQL:分组数据

分组数据&#xff1a; A. SQL Server Group By语句 Group By 从字面意义上理解就是根据“By”指定的规则对数据进行分组&#xff0c;所谓的分组就是将一个“数据集” 划分成若干个“小区域”&#xff0c;然后针对若干个“小区域”进行数据处理。 以下是 GROUP BY 子句的语…

SQL语言中的分组数据

&#xff08;1&#xff09;group by子句 group by 根据by指定的规则对数据进行分组。 分组&#xff1a;即将一个“数据集”划分成若干个“小区域”&#xff0c;再对若干个“小区域”进行数据处理。 语法&#xff1a; group by 子句为列中的每个值组合生成一个组。 group by子…

SQL分组指南

目录 什么是SQL分组&#xff1f; SQL GROUP BY和Sum 排序分组结果 HAVING和GROUP BY 包含多个表的GROUP BY 按SUM()排序 带有表达式的GROUP BY SQL GROUP BY与DISTINCT 结论 什么是SQL分组&#xff1f; 在SQL中&#xff0c;分组是唯一的列值组合。当查询具有GROUP BY…

单例模式的使用和应用场景

1.概念 标题单例模式&#xff1a;单例指的是单实例&#xff0c;一个类中有且仅有创建一个实例 单例模式的应用场景&#xff1a;windows的任务管理器(不可打开两次吧)、回收站等 单例模式应用一般发现在以下条件下&#xff1a; servlet单例、struts2多例、springmvc单例 &…

单例模式实战应用

理论 什么是单例模式 保证整个系统中一个类只有一个对象的实例&#xff0c;实现这种功能的方式就叫单例模式 常用的 service 和 dao 层的对象通常都是单例的&#xff0c;而多例则指每个请求用一个新的对象来处理&#xff0c;比如 action spring 中的 bean 和 spring mvc 中…

单例模式php应用场景,php单例模式 使用场景和使用方法

一个类只有一个对象实例 1、含义 作为对象的创建模式&#xff0c;单例模式确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本&#xff0c;而是会向单例类内部存储的实例返回一个引用。 2、单例模式的三个要点&#xff1a…

Java设计模式及应用场景之《单例模式》

文章目录 一、单例模式定义二、单例模式的结构和说明三、懒汉式和饿汉式的实现1、懒汉式2、饿汉式 四、懒汉式和饿汉式的优缺点五、双重检查加锁方式的实现六、类级内部类方式的实现七、枚举方式的实现 (最佳方式)八、单例模式的应用场景 一、单例模式定义 保证一个类只能有一个…

一文带你了解 Java 五种单例模式的实现方式以及应用场景

单例模式 什么是单例模式 类的单例设计模式&#xff0c;就是采取一定的方法保证在整个软件系统中&#xff0c;某个类只能存在一个对象实例&#xff0c;并且这个类会提供一个获取对象实例的方法。 思路&#xff1a;如果让一个类在一个虚拟机里面只能产生一个对象&#xff0c;就…

js设计模式之 单例模式与应用场景

1.介绍 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个…

单例模式的理解?单例模式如何实现?单例模式应用场景

说说你对单例模式的理解&#xff1f;如何实现&#xff1f; 一、是什么 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;创建型模式&#xff0c;提供了一种创建对象的最佳方式&#xff0c;这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&…

设计模式之单例模式应用场景篇

应用场景 我们为什么要使用单例模式呢&#xff1f;它有什么好处&#xff1f; &#xff08;一&#xff09;单例模式可以让我们只创建一个对象从而避免了频繁创建对象导致的内存消耗和垃圾回收。 Servlet是单例模式&#xff0c;我们只需要创建一个Servlet&#xff0c;然后接收请求…

关于getText()的小问题

由一个作业开始的,整完广度优先小作业的时候开始是在代码中指定值进行寻找路径,后面想想还是弄两文本框输入起点和终点更灵活一点好了。谁知道这个JTextField真的让我崩溃了 怎么说应该是我对Java的基础知识没有进行深入了解吧,好吧,我是在今天才知道getText()是在监听事件…