一个例子理清楚遗传算法

2024-04-20 02:38
文章标签 例子 清楚 遗传算法

本文主要是介绍一个例子理清楚遗传算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 遗传算法的三个主要操作

1、选择
2、交配
3、变异

遗传算法广泛的应用于最优化问题求解之中!

简单遗传算法SGA的实现步骤:
1、编码
2、评价
3、适应函数
4、交配规则
5、停止条件

二、选择采用的算法

采用确定性算法:

这里写图片描述

交配规则:

这里写图片描述

变异:
就是将随机指定某个位进行变异,0变成1,1变成0!目的是近亲繁殖的时候出来的数据变化不大,需要变异新的基因以跳出局部最优解。

例题

这里写图片描述

1、编码:采用二进制形式编码,由于变量的最大值31,固采用5个位即可表达全部的值。

由于x的定义域是[0, 31]间的整数,刚好可以用5位二进制数表示,因此可以用5位二进制数表示该问题的解,即染色体。如00000表示x=0,10101表示x=21,11111表示x=31等。 

2、适应函数,这里可以直接采用f(x)上面的函数作为适应函数。
假设群体的规模N=4,交配概率Pc=100%,变异概率Pm=1%。
设随机生成的初始群体为:
01101,11000,01000,10011
这里选择的算法采用上面的确定算法:得到第0代如下
这里写图片描述

配对进行交配,其中交配位是随机选择的rand(5):位的话是从左边往右边数。

这里写图片描述

交配的结果得到第一代的情况表:

这里写图片描述

继续交配:

这里写图片描述

由第1代和第0代的结果可知交配结果变化不是很大,因而需要选择变异!
变异位也是随机。

这里写图片描述

得到第二代的情况表:

这里写图片描述

交配结果:

这里写图片描述

看到下面的图,平均值已经趋近于平缓,因此可以停止交配,关于停止交配的终止条件可以是:1、到达设置的迭代次数,2、输出结果日渐平缓
这里写图片描述

最后得到的问题最优解为:
x:11111
对应的整数是x=31

这篇关于一个例子理清楚遗传算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919088

相关文章

[vivado]例子中的glbl文件

答疑帖:https://www.xilinx.com/support/answers/6537.html

工厂方法模式--结合具体例子学习工厂方法模式

在学习工厂方法模式之前,可以先学习一下简单工厂模式,网址是http://blog.csdn.net/u012116457/article/details/21650421,这里仍以水果的实例讲解。   先来说说简单工厂模式的特点,简单工厂模式将具体类的创建交给了工厂,使客户端不再直接依赖于产品,但是其违背了OCP原则,当对系统进行扩展时,仍然需要去修改原有的工厂类的代码。 而工厂方法模式则解

JS奇偶数判断例子

JS奇偶数判断例子

利用一个正则表达式的一个例子来讲解Java中的两种for循环。

package 正则表达式;public class Rudolph {public static void main(String[] args) {// TODO Auto-generated method stubString[] str = new String[]{"Rudolph","[rR]udolph","[rR][aeiou][a-z]ol.*","R.*"};for(Strin

java:spring-security的简单例子

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version></dependency><dependency><groupId>org.springframewo

【python例子】 python 计算1000以内的水仙花数

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。   例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数 求1000以内的水仙花数(3位数)  网上这样的例子很多,总结3种常用的方法: 代码实现: #coding:utf-8#5**3 B表示5的3次方#整除后取余数 1001%100# 方法一:for bai in range(1,1

编写android程序调用jni本地方法的实现(详细例子)

在写android程序的时候会用到jni,接下来的代码讲诉C实现,环境配置请看我其他的博客,不多说,直接上代码,代码上几乎每一句都会解释,绝对易懂 MainActivity中的代码: package com.ndk.test;import java.io.UnsupportedEncodingException;import com.example.testndk.R;import an

【Rust日报】 2019-05-30:使用最新的 async/await 的一些例子

一个说明借用/Move细节的鲜活例子 如下面例子,直接传一个元组进去,不行。索引里面的元素,直接传,可以。为什么? fn f(input: (usize, &mut usize)) {unimplemented!()}fn call_f_a_bunch_of_times(input: (usize, &mut usize)) {for _ in 0..10 {// f(input); //

使用faiss存储HuggingFaceBgeEmbeddings向量化处理数据及反序列化加载使用的例子

周末宅在家里无所事事,实验了一下如何使用bge对word文档进行向量化处理后并存储到faiss里面供后续反序列化加载使用,下面是具体实现代码。 一,加载word数据并读取内容进行向量化存储 import osimport docxfrom tqdm import tqdmfrom langchain.docstore.document import Documentfrom langc