遗传算法-附代码注释

遗传算法(Genetic Algorithm,GA)
模仿生物的遗传进化原理,通过选择(Selection)、交叉(Crossover)与变异(Mutation)等操作机制,使种群中个体的适应度(Fitness)不断提高。
核心思想:物竞天择,适者生存(“天”——适应度函数,Fitness Function)

个体:个体空间的元素称为个体,它是染色体带有特征的实体。
种群:称个体空间 S 中 N 个个体组成的一个子集(个体允许重复)称为一个种群,记为:
A = (A1,A2,…,An),其中Aj ( j=1,2,…,N ) ∈ S,N称为种群规模。
适应度:在研究自然界中生物的遗传和进化现象时,生物学家使用适应度这个术语来度量某个物种对于生存环境的适应程度。对生存环境适应程度较高的物种将获得更多的繁殖机会,而对生存环境适应程度较低的物种,其繁殖机会就会相对较少,甚至逐渐灭绝。在遗传算法中,一般通过适应度函数来衡量某一个体的适应度高低。目标函数。
编码:将一个待求解的问题的实际可行解从其解空间转换到遗传算法所能处理的搜索空间(即个体空间)的过程,就称为编码。
解码:解码是将遗传算法所搜索到的最优个体的染色体转换成待求解问题的实际最优解的过程,即编码的逆过程。
选择操作:根据各个个体的适应度,按照一定的规则,从第t代群体P(t)中选择出一些优良的个体遗传到下一代群体P(t+1)中。一般地,选择操作通过选择算子进行。
交叉操作:将群体P(t)内的各个个体随机搭配成对,对每一对个体,以某个概率(称为交叉概率,Crossover Rate)遵循某一种规则交换它们之间的部分染色体。
变异操作:对群体P(t)中的每一个个体,以某一概率(称为变异概率,Mutation Rate)改变某一个或某一些基因座上的基因值为其他的等位基因。

基本遗传算法的组成
1.编解码
2.适应度函数
3.遗传运算(选择、交叉和变异)

应用步骤

(1)确定决策变量及各种约束条件,即确定出个体的表现型X和问题的解空间。
(2)建立优化模型,确定出目标函数的类型及其数学描述形式或量化方法。
(3)确定表示可行解的染色体编码方法,即确定出个体的基因型X*,也是遗传算法的搜索空间。

编码是遗传算法解决问题的先决条件和关键步骤:
①不仅决定个体基因的排列形式(从而决定选择与繁殖等操作的作用方式),而且也决定从搜索空间的基因型到解空间的表现型的解码方式(从而决定对GA所获解的翻译与理解);
②决定GA搜索的困难度与复杂性;
③决定对问题的求解精度。
常用的遗传算法编码方法主要有:二进制编码、浮点数编码等。可以证明,二进制编码比浮点数编码搜索能力强,但浮点数编码比二进制编码在变异操作上能够保持更好的种群多样性。

标准遗传算法多采用二进制编码方法,将决策变量用二进制字符串表示,二进制编码串的长度由所求精度决定。然后将各决策变量的二进制编码串连接在一起,构成一个染色体。

例如:变量x的定义域为[-2,3],要求其精度为10-5,则需要将[-2, 3]分成至少500000个等长小区域,而每个小区域用一个二进制串表示。于是有,2 L = 500 000,即 log2 500000 = 18.93
向上取整,可得到 L = 19。即可用19位二进制串 a18a17…a0来表示。
(4)确定解码方法,即确定出由个体基因型X*,到个体表现型X的对应关系和转换方法。
(5)确定个体适应度的量化评价方法,就是确定出由目标函数值到个体适应度的转换规则。标准遗传算法的适应度函数常用一下三种:
1)直接以待求解的目标函数为适应度函数
若目标函数为最大值问题,则Fit(f(X)) = f(X)
若目标函数为最小值问题,则Fit(f(X)) = -f(X)
优点:简单直观;
缺点:其一,可能不满足非负的要求;其二,某些代求解的函数值分布相差很大,由此得到的平均适应度可能不利于体现种群的平均性能。
2)界限构造法
3)倒数法

遗传算法具体步骤

1、选择编码策略,把参数集合(可行解集合)转换染色体结构空间;
2、定义适应度函数,便于计算适应值;
3、确定遗传策略,包括选择群体大小,选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数;
4、随机产生初始化群体;
5、计算群体中的个体或染色体解码后的适应值;
6、按照遗传策略,运用选择、交叉和变异算子作用于群体,形成下一代群体;
7、判断群体性能是否满足某一指标,或者已完成预定的迭代次数,不满足则返回第五步,或者修改遗传策略再返回第六步。
在这里插入图片描述
待更新!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一、目标与适应函数的简单对比 目标函数就是你希望得到的优化结果,比如函数最大值或者最小值。而适应度函数是为了计算个体的适配值。 适配值是非负的,而且要求适配值越大则该个体越优越。而目标函数则有正有负,它们之间关系多种多样,比如求最小值时,目标函数最小,则适配值越大,求最大值时目标值越大,适配值越大。 目标函数Object function和适应度函数Fitness function是不一样的概念,有时为了方便后续计算在适应度函数中做些 拉伸,取反,什么的。 目标函数是你求解的优化变量的函数形式;而适应度函数是你求解的优化变量的一种度量,是一种更为广义的概念。可以这么理解,目标函数只是适应度函数的一种,也可以有其他的表达形式。 对于目标函数,为了得到好的搜索性能,经过一些变化就可以得到适应度函数。另外就是这些变化可以不唯一的。 二、适应度函数 适应度函数跟 想要实现什么功能有关,把粒子对应成你问题的候选解,适应度函数用来评价给出的这个候选解(粒子)的好坏(好坏的评价标准需要一个量化指标,也就是,粒子的适应度值) 适应度用于评价个体的优劣程度,适应度越大个体越好,反之适应度越小则个体越差;根据适应度的大小对个体进行选择,以保证适应性能好的个体有更多的机会繁殖后代,使优良特性得以遗传。因此,遗传算法要求适应度函数值必须是非负数,而在许多实际问题中,求解的目标通常是费用最小,而不是效益最大,因此需要将求最小的目标根据适应度函数非负原则转换为求最大目标的形式
量子遗传算法是一种结合了量子计算和遗传算法的优化算。它利用了量子计算的特性,如叠加态和纠缠态,以及遗传算法的进化和选择机制,来解决复杂的优化问题。 在Python中,可以使用一些库来实现量子遗传算法。其中,Qiskit是一个开源的量子计算库,提供了丰富的量子计算工具和算。Qiskit中的qiskit.aqua包含了一些量子优化算,包括量子遗传算法。 下面是一个简单的示例代码,演示了如何使用Qiskit实现量子遗传算法: ```python from qiskit import Aer from qiskit.aqua import QuantumInstance from qiskit.aqua.algorithms import VQE, QAOA from qiskit.aqua.components.optimizers import COBYLA # 定义优化问题的目标函数 def objective_function(x): return x[0]**2 + x[1]**2 # 创建量子优化实例 optimizer = COBYLA(maxiter=100) qasm_simulator = Aer.get_backend('qasm_simulator') quantum_instance = QuantumInstance(backend=qasm_simulator, shots=1024) # 使用VQE算求解优化问题 vqe = VQE(optimizer=optimizer, quantum_instance=quantum_instance) result = vqe.compute_minimum_eigenvalue(operator, aux_operators=None) # 使用QAOA算求解优化问题 qaoa = QAOA(optimizer=optimizer, quantum_instance=quantum_instance) result = qaoa.compute_minimum_eigenvalue(operator, aux_operators=None) # 输出结果 print(result) ``` 以上代码中,我们首先定义了一个简单的目标函数,然后选择了COBYLA作为优化器。接下来,我们使用VQE算和QAOA算分别求解优化问题,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风落_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值