【人工智能】遗传算法(一)

简介: 【人工智能】遗传算法

知识导图:感觉写的好的话,求收藏,没动力了快,一篇写下来累死累活的。


fa95962e78394d6da8b810b95e26a826_80d86381f3284fc4b9dd845bec31baee.png

全文围绕其简单题目:


8d54769b5a44728dd6d274f9f7ba8527_aac45e3a8f5e4830996f7c0dc36b66d9.png


遗传算法(概念)


可以把遗传算法类比成一个游戏,我们需要通过这个游戏来找到最佳的解决方案。


  • 首先,我们需要创建一些角色(也就是种群),每个角色有自己的装备和技能(染色体),但是我们并不知道哪个角色更加强大。
  • 然后,我们让这些角色相互竞争,通过升级、打怪等方式来获得经验值(适应度值)。经验值越高的角色,就拥有了更多胜利的可能性。
  • 接着,我们会将经验值高的角色进行复制,将装备/技能进行升级,继承属性(对应其交叉操作),而一些随机变异的角色也会加入其中。这些新的角色代表了我们在寻找答案的过程中的探索。如果它们的表现好于之前的角色,那么我们就可以用它们来代替原来的角色。
  • 最后,通过这样的迭代过程,我们会逐渐找到最强大的角色,也就是最优解。
  • 总之,遗传算法通过不断地试错,从而找到最优解决方案,就像在玩游戏一样。


具体来说,遗传算法的流程包括以下几个步骤:


  • 初始化种群:通过随机方式生成一组初始解,称为种群。
  • 适应度函数:根据问题要求,设计一个适应度函数,用于评价每个个体的好坏程度。
  • 选择操作:按照适应度函数的评价结果,从当前种群中选择一些优秀的个体作为父代,并使用复制、交叉等方法产生下一代种群。
  • 变异操作:在新产生的个体中进行随机变异的操作,增加搜索的多样性。
  • 终止条件:根据预设的停止条件(如迭代次数、达到最优解等)决定算法何时结束。


遗传算法通过不断地试错,在种群中选择、交叉和变异来生成新的个体,并计算它们的适应度值。然后,根据设定的适应度函数来选择出适应度值高的个体作为下一代的父母,再进行交叉和变异操作,生成新的个体。通过这样的迭代过程,逐渐找到最优解决方案


步骤:


1.初始化种群


初始化种群是指在遗传算法中,初始阶段按照其规定的编码方式随机生成一组个体,并将其作为遗传算法的起点。

这些个体构成了一个种群,每个个体都代表了问题的一个可能解。通过对这些个体进行交叉、变异等操作,不断迭代,从而逐步逼近问题的最优解。因此,初始化种群的质量和数量对于遗传算法的性能有很大影响。


基础篇,理解并学会使用以下三种编码方式方法:

  • 二进制
  • 整数(没学,有机会的话,放到进阶篇写)
  • 浮点数(没学,有机会的话,放到进阶篇写)


1.1二进制编码与解码


顾名思义,就是将10进制数编码成二进制数


以下是我总结的常用方式和其代码:


假设需要解决一个最小化函数f(x)(适应函数f),其中变量x是取值范围出现以下情况:


1. 当x是取值范围为[a,b]之间的实数。

image.png

:c⑩是随机生成的一个二进制串的10进制值


例如:10101的c⑩为21,


:n就是我们选取的二进制位数

image.png

例如:例子来源

c57b0c6b2e2cbfec23971a04d614d8a3_1e89a78d36f54b7d84447aeb61a3c1dc.png


例如:假设需要解决一个最小化函数f(x),其中变量x是取值范围为[0,10]之间的实数。可以将c表示为一个长度为n的二进制串。例如,当n=5时,可将二进制串c:10101带入公式image.pngimage.png


下面是最初题目的一些示例代码(主要工作就是初始化种群*100 二进制串---->c⑩)

代码:

import math
import random
# 求n(已知精度p,x的取值范围[a,b])
def calculate_n(p, a, b):
    power = math.log2((b - a) * 10 ** p)
    n = math.ceil(power)
    return n
# 随机生成n位二进制数
def generate_binary_number(n):
    binary = ""
    for i in range(n):
        bit = random.randint(0, 1)
        binary += str(bit)
    return binary
# 初始化种群(二进制版)
def initialize_population(population_size, n):
    population = []
    for i in range(population_size):
        individual = generate_binary_number(n)
        population.append(list(map(int,individual)))
    return population
# 二进制编码 n位二进制的选择
n = calculate_n(1, -5, 5)
print("n:", n)
# 初始化种群
population_2 = initialize_population(100, n)
print("初始化种群", population_2)


输出:

e0cfbb603a72698ac0d162e346ce05b8_8493d94ef5904b1697fbfcdfe2f28309.png


一般遗传题目中的变量是多维的(或者说多个变量),那么我们采用的一般都是将其转化为1维的二进制串,当然,这不属于我的基础篇内容,可以了解下以下内容:

6210534ec98ae8085ab66fc23073bce0_ff9717516a6a43168386b402bae2fc13.png


2.选择操作


 根据第一步初始化的种群,对其每个个体进行评价,选出适应度最高的个体作为下一代的父代。

 所谓个体评价可以被视为对该个体在特定问题上表现优劣的度量。将个体带入适应度函数得到的适应度值作为判别依据。适应度函数是用来衡量每个个体相对于解决问题的能力或者质量的函数。评价指标通常越高,表示个体在当前环境下的适应度越好。通过比较不同个体的适应度,可以选出适应度最高的个体作为下一代的父代。


选择操作是一种基于适应度的算法,通过使用某些技术从当前群体中选出适应性较高的个体作为下一代的父代。这种方法可以反复迭代,以提高整个群体的适应度水平。


2.1 拿到个体适应度


image.png

函数代码:

# 得到相应区间的x值
def binary_to_x(binary_list, a, b, n):
    x_list = []
    range_value = b - a
    for binary in binary_list:
        decimal = int("".join(map(str, binary)), 2)
        ratio = decimal / (2 ** n - 1)
        x = ratio * range_value + a
        x_list.append(x)
    return x_list    
# 求x
x = binary_to_x(population_2, -5, 5, n)
x = [round(num, 1) for num in x]
print("x", x)


输出:

4d8168037a193e3de5d584aa4c8ca6f5_759eead7ea0044bb90547e5f58bfdb76.png

image.png

def fitness(x):
    return round(x ** 2 - 3 * x + 4, 1)
# 求适应度
fitness_values = [fitness(x) for x in x]
print("适应度", fitness_values)

输出:

97c6bbe7ea33bc82fab825b50fd07720_f3f9068aae8d4c869c41bffcdc2cf624.png


2.2 轮盘赌选择


e852eb911c4edf458b474b44fb1c96e5_3fb381a2934c48e2957a5da17df20597.png



轮盘赌选择是一种常用的遗传算法选择方法,也被称为比例选择。

轮盘赌选择法(roulette wheel selection)是最简单也是最常用的选择方法,在该方法中,各个个体的选择概率和其适应度值成比例,适应度越大,选中概率也越大。

但实际在进行轮盘赌选择时个体的选择往往不是依据个体的选择概率,而是根据“累积概率”来进行选择。


解析:知乎轮盘赌选择

image.png

上式中的累积概率表示每个个体之前所有个体的选择概率之和,它相当于在转盘上的“跨度”,“跨度”越大越容易选到,就相当于概率论中的概率分布函数F(x)。轮盘赌选择法的过程如下:


(1)计算每个个体的被选中概率p(xi)


(2)计算每个部分的累积概率q(xi)


(3)随机生成一个数组m,数组中的元素取值范围在0和1之间,并将其按从小到大的方式进行排序。若累积概率q(xi)大于数组中的元素m[i],则个体x(i)被选中,若小于m[i],则比较下一个个体x(i+1)直至选出一个个体为止。


(4)若需要转中N个个体,则将步骤(3)重复N次即可.


image.png


相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
131 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
17天前
|
机器学习/深度学习 人工智能 算法
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
52 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
|
2天前
|
人工智能 自然语言处理 算法
【人工智能】TF-IDF算法概述
TF-IDF算法,全称Term Frequency-Inverse Document Frequency(词频-逆文档频率),是一种在信息检索和文本挖掘领域广泛应用的加权技术。它通过评估一个词语在文档中的重要程度,来挖掘文章中的关键词,进而用于文本分析、搜索引擎优化等场景。其核心思想是:如果某个词或短语在一篇文章中出现的频率高(TF高),且在其他文章中很少出现(IDF也高),则认为这个词或短语具有很好的类别区分能力,适合用来代表这篇文章的内容。 具体而言,TF-IDF由两部分组成,即词频(TF)和逆文档频率(IDF)。词频(TF)指的是某一个给定的词在该文件中出现的频率。这个数值通常会被归一化
6 3
|
2天前
|
机器学习/深度学习 人工智能 算法
【人工智能】线性回归模型:数据结构、算法详解与人工智能应用,附代码实现
线性回归是一种预测性建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种关系可以表示为一个线性方程,其中因变量是自变量的线性组合。
9 2
|
2天前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
8 2
|
28天前
|
机器学习/深度学习 人工智能 监控
人工智能 - 目标检测算法详解及实战
目标检测需识别目标类别与位置,核心挑战为复杂背景下的多目标精准快速检测。算法分两步:目标提取(滑动窗口或区域提议)和分类(常用CNN)。IoU衡量预测与真实框重叠度,越接近1,检测越准。主流算法包括R-CNN系列(R-CNN, Fast R-CNN, Faster R-CNN),YOLO系列,SSD,各具特色,如Faster R-CNN高效候选区生成与检测,YOLO适用于实时应用。应用场景丰富,如自动驾驶行人车辆检测,安防监控,智能零售商品识别等。实现涉及数据准备、模型训练(示例YOLOv3)、评估(Precision, Recall, mAP)及测试。
61 5
|
1月前
|
机器学习/深度学习 人工智能 算法
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
服装识别系统,本系统作为图像识别方面的一个典型应用,使用Python作为主要编程语言,并通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对18种不同的服装('黑色连衣裙', '黑色衬衫', '黑色鞋子', '黑色短裤', '蓝色连衣裙', '蓝色衬衫', '蓝色鞋子', '蓝色短裤', '棕色鞋子', '棕色短裤', '绿色衬衫', '绿色鞋子', '绿色短裤', '红色连衣裙', '红色鞋子', '白色连衣裙', '白色鞋子', '白色短裤')数据集进行训练,最后得到一个识别精度较高的H5格式模型文件,然后基于Django搭建Web网页端可视化操作界面,实现用户在界面中
60 1
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
|
2月前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
212 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
2月前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
132 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理

热门文章

最新文章