广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python人工智能遗传算法示例解析
  • 555
分享到

python人工智能遗传算法示例解析

2024-04-02 19:04:59 555人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、实验目的二、实验原理三、实验条件四、实验内容五、实验结果一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解流程并测试主要参数对结果的

一、实验目的

熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解流程并测试主要参数对结果的影响。

二、实验原理

遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程。它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和个体组成的群体。后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程,群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解。

三、实验条件

python3,Anaconda3,PyCharm

四、实验内容

import matplotlib.pyplot as plt
import random
import math
#计算函数
def f(args):
    return f2(args)
def f1(args):
    return (3 - (math.sin(2*args[0]))**2 - (math.sin(2*args[1]))**2)
def f2(args):
    x = 1
    for i in range(len(args)):
        z = 0
        for j in range(5):
            z += (j+1) * math.cos(((j+1)+1)*args[i]+(j+1))
        x *= z
    return x
#适应函数
def s(x):
    return s2(x)
def s1(x):
    return math.exp(-abs(x-1))
def s2(x):
    return math.exp(-abs(x+187))
# 计算2进制序列代表的数值
'''
解码并计算值
group 染色体
chrom_length 染色体长度
max_value, min_value 上下限
div 分界点
'''
def b2d(b, chrom_length, max_value, min_value, div):
    rwno = []
    #因为染色体里面有多个变量,所以需要div来分割
    for i in range(len(div)):
        if i == 0:
            star = 0
            end = div[i]
        else:
            star = div[i-1] + 1
            end = div[i]
        t = 0
        for j in range(star, end): # 分隔参数[1,2,3||4,5,6]
            t += b[j] * (math.pow(2, j - star))
        t = t * max_value / (math.pow(2, end - star + 1) - 1) - min_value
        rwno.append(t)
    return rwno # 这是一个list
'''
计算当前函数值
group 染色体
chrom_length 染色体长度
max_value,min_value 最大最小值
divid 分割
'''
def calobjValue(group, chrom_length, max_value, min_value, divid):
    obj_value = []
    for i in range(len(group)):      
        x = b2d(group[i], chrom_length, max_value, min_value, divid)#这里面可能是多个变量
        obj_value.append(f(x))
    return obj_value
# 获取适应值
def calfitValue(obj_value):
    fit_value = []
    for i in range(len(obj_value)):
        temp =  s(obj_value[i]) # 调用适应函数计算
        fit_value.append(temp)
    return fit_value
#累计适应值方便计算平均
def sum_fit(fit_value):
    total = 0
    for i in range(len(fit_value)):
        total += fit_value[i]
    return total
# 转轮盘选择法
def selection(group, fit_value):
    newfit_value = [] #[ [[染色体], [锚点]],... ]
    newgroup = [] #[ [父], [母], [父], [母],....]
    # 适应度总和
    total_fit = sum_fit(fit_value)
    # 设置各个的锚点
    t = 0
    for i in range(len(group)):
        t += fit_value[i]/total_fit
        newfit_value.append([group[i], t])
    # 转轮盘选择法
    for i in range(len(newfit_value)):
        parents = len(newfit_value) # 初始化指针
        r = random.random() #指针
        for j in range(len(newfit_value)):#看看指针指到睡了
            if newfit_value[j][1] > r:
                parents = j
                break
        newgroup.append(newfit_value[parents][0])
    return newgroup
# 交配
def crossover(group, fit_value, pc):
    parents_group = selection(group, fit_value) #[ [[父], [母]],....]
    group_len = len(parents_group)
    for i in range(0, group_len, 2):
        if(random.random() < pc): # 看看是否要交配
            cpoint = random.randint(0, len(parents_group[0])) # 随机交叉点
            temp1 = []
            temp2 = []
            temp1.extend(parents_group[i][0:cpoint])
            temp1.extend(parents_group[i+1][cpoint:len(parents_group[i])])
            temp2.extend(parents_group[i+1][0:cpoint])
            temp2.extend(parents_group[i][cpoint:len(parents_group[i])])
            group[i] = temp1
            group[i+1] = temp2
# 基因突变
def mutation(group, pm):
    px = len(group)
    py = len(group[0])
    for i in range(px): # 遍历
        if(random.random() < pm):
            mpoint = random.randint(0, py-1) # 取要变异哪个
            if(group[i][mpoint] == 1):
                group[i][mpoint] = 0
            else:
                group[i][mpoint] = 1
'''
找出最优解和最优解的基因编码
group 种群染色去
fit_value 种群适应
'''
def best(group, fit_value):
    px = len(group)
    best_in = group[0]
    best_fit = fit_value[0]
    for i in range(1, px):
        if(fit_value[i] > best_fit):
            best_fit = fit_value[i]
            best_in = group[i]
    #print(best_in)
    return [best_in, best_fit]
'''
创建初代种群
group_size 种群大小
chrom_length 染色体长度
'''
def getFisrtGroup(group_size, chrom_length):
    #print('初代种群:')
    group = []
    for i in range(group_size):
        temp = []
        for j in range(chrom_length):
            temp.append(random.randint(0, 1))
        group.append(temp)
    #print(group)
    return group
generation = 50  # 繁衍代数(数量越小,出结果脍,迭代次数越少)
group_size = 400     # 染色体数量,偶数
max_value = 20       # 范围
min_value = 10       # 偏移修正
chrom_length = 800   # 染色体长度
divid = [399, chrom_length-1]    # 输入值分界点, 最后一位必须是染色体长度
pc = 0.7            # 交配概率
pm = 0.1            # 变异概率
results = []        # 存储每一代的最优解
fit_value = []      # 个体适应度
points = [] #多个最优解
#生成初代
group = getFisrtGroup(group_size, chrom_length)
for i in range(generation):
    if i > 100:
        pm = 0.01
    if i > 1000:
        pm = 0.001
    obj_value = calobjValue(group, chrom_length, max_value, min_value, divid)   # 个体评价
    fit_value = calfitValue(obj_value)  # 获取群体适应值
    best_individual, best_fit = best(group, fit_value)  # 返回最优基因, 最优适应值
    xx = b2d(best_individual, chrom_length, max_value, min_value, divid)
    if( abs(f(xx)+186.730909) < 0.000001):#找到最优解
        flag = False
        for p in points:
            if( (abs(xx[0]-p[0]) < 0.1) and (abs(xx[1]-p[1]) < 0.1) ):#剔除重复解
                flag = True
                break
        if flag == False:
            print(xx)
            points.append(xx)
    results.append([i, best_fit, b2d(best_individual, chrom_length, max_value, min_value, divid), best_individual])  #加进坐标里
    crossover(group, fit_value, pc) # 交配
    mutation(group, pm) # 变异
#results.sort(key=lambda x:x[1])
rank = sorted(results, key=lambda x:x[1])
#print('\n', rank[-1])
#print(results)
x = b2d(rank[-1][3], chrom_length, max_value, min_value, divid)
#最终结果
print("f(x) = " , f(x) , "x = " , x , " 染色体 = ", rank[-1][3], "  适应值 = ", rank[-1][1], "代数:", rank[-1][0])
#输出适应图
X = []
Y = []
for i in range(generation):
    X.append(i)
    Y.append(results[i][1])
plt.plot(X, Y)
plt.show()

五、实验结果

以上就是python人工智能遗传算法示例解析的详细内容,更多关于Python人工智能遗传算法的资料请关注编程网其它相关文章!

--结束END--

本文标题: python人工智能遗传算法示例解析

本文链接: https://www.lsjlt.com/news/118284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python人工智能遗传算法示例解析
    目录一、实验目的二、实验原理三、实验条件四、实验内容五、实验结果一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解流程并测试主要参数对结果的...
    99+
    2022-11-11
  • AI与Python人工智能遗传算法
    目录什么是遗传算法?如何使用GA进行优化问题?GA机制优化过程的阶段安装必要的软件包使用遗传算法实现解决方案生成位模式符号回归问题本章详细讨论了人工智能的遗传算法。 什么是遗传算法?...
    99+
    2022-11-11
  • python人工智能算法之决策树流程示例详解
    目录决策树总结决策树 是一种将数据集通过分割成小的、易于处理的子集来进行分类或回归的算法。其中每个节点代表一个用于划分数据的特征,每个叶子节点代表一个类别或一个预测值。构建决策树时...
    99+
    2023-03-21
    python人工智能算法决策树 python人工智能
  • pytorch人工智能之torch.gather算子用法示例
    目录一、用法:二、代码示例:一、用法: torch.gather 算子用于返回给定索引/下标的 Tensor 元素,在 pytorch 官网文档中的定义如下: torch.gathe...
    99+
    2022-11-11
  • Matlab实现遗传算法的示例详解
    目录1算法讲解1.1何为遗传算法1.2遗传算法流程描述1.3关于为什么要用二进制码表示个体信息1.4目标函数值与适应值区别1.5关于如何将二进制码转化为变量数值1.6关于代码改进2M...
    99+
    2022-11-13
  • python人工智能算法之线性回归实例
    目录线性回归使用场景分析:总结:线性回归 是一种常见的机器学习算法,也是人工智能中常用的算法。它是一种用于预测数值型输出变量与一个或多个自变量之间线性关系的方法。例如,你可以使用线...
    99+
    2023-03-21
    python 线性回归算法 python 人工智能
  • 如何用Python理解人工智能优化算法
    这篇文章给大家介绍如何用Python理解人工智能优化算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 概述梯度下降是神经网络中流行的优化算法之一。一般来说,我们想要找到最小化误差函数的权重和偏差。梯度下降算...
    99+
    2023-06-16
  • Python人工智能学习PyTorch实现WGAN示例详解
    目录1.GAN简述2.生成器模块3.判别器模块4.数据生成模块5.判别器训练6.生成器训练7.结果可视化1.GAN简述 在GAN中,有两个模型,一个是生成模型,用于生成样本,一个是判...
    99+
    2022-11-12
  • Python人工智能构建简单聊天机器人示例详解
    目录引言什么是聊天机器人?准备工作创建聊天机器人导入必要的库定义响应集合创建聊天机器人运行聊天机器人完整代码结论展望引言 人工智能是计算机科学中一个非常热门的领域,近年来得到了越来...
    99+
    2023-03-21
    Python构建聊天机器人 Python 人工智能
  • 怎么用python实现人工智能算法
    要使用Python实现人工智能算法,你可以按照以下步骤进行操作:1. 确定算法类型:首先,你需要确定你想要实现的人工智能算法类型,比...
    99+
    2023-10-11
    python 人工智能
  • python人工智能深度学习算法优化
    目录1.SGD2.SGDM3.Adam4.Adagrad5.RMSProp6.NAG1.SGD 随机梯度下降 随机梯度下降和其他的梯度下降主要区别,在于SGD每次只使用一个数据样本,...
    99+
    2022-11-12
  • python人工智能算法之随机森林流程详解
    目录随机森林优缺点总结随机森林 (Random Forest)是一种基于决策树(前文有所讲解)的集成学习算法,它能够处理分类和回归两类问题。 随机森林的基本思想是通过随机选择样本和...
    99+
    2023-03-21
    python 人工智能算法随机森林 python 人工智能
  • python人工智能算法之人工神经网络怎么使用
    本篇内容介绍了“python人工智能算法之人工神经网络怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!人工神经网络(Artificia...
    99+
    2023-07-05
  • TensorFlow人工智能学习创建数据的示例分析
    这篇文章将为大家详细讲解有关TensorFlow人工智能学习创建数据的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、数据创建1.tf.constant()创建自定义类型,自定义形状的数据,但不...
    99+
    2023-06-25
  • Python 人工智能老照片修复算法学习
    目录前言项目环境搭建conda虚拟环境创建 激活环境Pytorch安装Synchronized-BatchNorm-PyTorch repository安装Global目录...
    99+
    2022-11-12
  • python人工智能tensorflow优化器Optimizer算法汇总
    目录前言tensorflow常见的Optimizer1 梯度下降法2 Adagrad下降法3 动量优化法4 RMSProp算法5 Adam算法例子1 梯度下降法2 Adagrad下降...
    99+
    2022-11-10
  • 人工智能——K-Means聚类算法及Python实现
    目录1 概述1.1 无监督学习1.2 聚类1.3 K-Mean均值算法2 K-Mean均值算法 2.1 引入2.2 针对大样本集的改进算法:Mini Batch K-Mea...
    99+
    2022-11-12
  • python人工智能使用RepVgg实现图像分类示例详解
    目录摘要安装包安装timm数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集摘要 RepVgg通过结构重参数化让VGG再次伟大。 所谓“VGG式...
    99+
    2022-11-11
  • 人工智能TextGeneration文本生成原理示例详解
    目录承上启下原理选取预测的下一个字符的三种方式训练总结案例承上启下 上一篇文章我们介绍了 RNN 相关的基础知识,现在我们介绍文本生成的基本原理,主要是为了能够灵活运用 RNN 的...
    99+
    2023-01-05
    人工智能Text Generation Text Generation文本生成
  • 从零开始:Python人工智能库全面解析
    从零开始:Python人工智能库全面解析导语:随着人工智能的迅速发展,Python作为一种灵活且易于学习的编程语言,成为了众多人工智能开发者的首选。Python拥有丰富的人工智能库,这些库提供了各种功能强大的工具和算法,帮助开发者实现各种复...
    99+
    2023-12-23
    Python 人工智能库 解析
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作