文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python遗传算法中适值函数的标定方法是什么

2023-06-03 02:59

关注

这篇“Python遗传算法中适值函数的标定方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python遗传算法中适值函数的标定方法是什么”文章吧。

适值函数的标定

适值函数的标定

一般情况下,直接拿目标函数作为适值函数十分的方便,但是很多情况下却不能这么做,例如对于求最小值问题,我们必须将目标函数取反才能作为适值函数(这是最简单的情况)。

当我们遗传算法中不同个体适值函数的值相对差别很小的时候,我们根据适应度值的大小进行个体选择的选择压力(Selective pressure)就会变小,选优的能力弱化,这个时候我们需要对原始的适值函数进行标定(Scaling)是的他们相对差别增大,进而增大选择压力,增强算法的选优能力。

几种不同的适值函数标定方法

对目标函数的标定方法一般有:线性标定、动态线性标定、幂律标定、对数标定等

cdn2.b0.upaiyun.com/2017/09/a50ee9ef74ba2b16547fb59e1c4e943b.png" alt="WX20170924-210412@2x" span="" h5="">求最大值

对于求目标函数的最大值的时候, 即 arg max f(x)

我们取a=1,b=?fmin+ξ, 其中ξ是一个较小的数,目的是使得种群中最差个体也有被选中的机会,不然自身减掉f?fmin=0, ξ的存在可以增加种群的多样性。

GAFT中添加对于目标函数的标定

由于适值函数标定并不针对某个目标函数,我便想通过装饰器的方式来方便给任何自定义的fitness函数进行标定。对于基本的线性标定,我在GAEngine中添加了个带参数的装饰器:

Python

def linear_scaling(self, target='max', ksi=0.5):

    '''

    A decorator constructor for fitness function linear scaling.

    :param target: The optimization target, maximization or minimization.

    :type target: str, 'max' or 'min'

    :param ksi: Selective pressure adjustment value.

    :type ksi: float

    Linear Scaling:

        1. arg max f(x), then f' = f - min{f(x)} + ksi;

        2. arg min f(x), then f' = max{f(x)} - f(x) + ksi;

    '''

    def _linear_scaling(fn):

        # For original fitness calculation.

        self.ori_fitness = fn

        @wraps(fn)

        def _fn_with_linear_scaling(indv):

            # Original fitness value.

            f = fn(indv)

            # Determine the value of a and b.

            if target == 'max':

                f_prime = f - self.ori_fmin + ksi

            elif target == 'min':

                f_prime = self.ori_fmax - f + ksi

            else:

                raise ValueError('Invalid target type({})'.format(target))

            return f_prime

        return _fn_with_linear_scaling

    return _linear_scaling

这个时候如果我们在定义了一个自己的目标函数以后,想对其进行线性标定便可以使用engine的这个装饰器对函数进行修饰即可, 像下面这样:

Python

# Create a GA engine...

# 先标定,后注册到引擎中

@engine.fitness_register

@engine.linear_scaling(target='min', ksi=0.5)

def fitness(indv):

    x, = indv.variants

    return x + 10*sin(5*x) + 7*cos(4*x)

其中装饰器中的参数分别为:

关于ξk

动态线性标定中的ξk作用同线性标定中的ξ为选择压力调节值, 它的存在使得种群中最坏的个体仍有被选中的机会,但是动态标定中的ξkξk的值会随着kk增大而减小。

ξkξk的取值: ξ0=M,ξk=ξk?1?r,r∈[0.9,0.999], 我们通过调节M和r来调节ξk

通过可以动态变化的ξk,我们可以使广域搜索范围宽保持种群的多样性,局部搜索保持收敛性,即,开始时希望选择小,迭代到后面希望选择压力逐渐变大.

6       

其他标定方法

对数标定
窗口技术

如何判断种群个体的集中程度

通常采取比较种群中所有个体的适应度值的平均值favg与最大值fmax的接近程度来判断,如果最大值与平均值越接近说明个体就越集中。

大变异操作的两个参数

  1. 密集因子α: 决定大变异操作在整个过程中所占的比重,其数值约接近0.5,大变异操作越频繁

  2. 大变异概率: 概率越大,大变异算法的稳定性就越好,但是收敛速度可能会降低,当大变异概率的数值为0.5的时候,大变异操作就近似退化为随机搜索

以上就是关于“Python遗传算法中适值函数的标定方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯