中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python遺傳算法中適值函數的標定方法是什么

發布時間:2022-01-18 15:48:35 來源:億速云 閱讀:175 作者:iii 欄目:編程語言

這篇“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)

其中裝飾器中的參數分別為:

  • target: 優化目標函數到最小值還是最大值,值可以是:'max'或者'min'

  • ksi: 即公式中ξξ

關于ξk

動態線性標定中的ξk作用同線性標定中的ξ選擇壓力調節值, 它的存在使得種群中最壞的個體仍有被選中的機會,但是動態標定中的ξkξk的值會隨著kk增大而減小。

ξkξk的取值: ξ0=M,ξk=ξk?1?r,r[0.9,0.999], 我們通過調節Mr來調節ξk

通過可以動態變化的ξk,我們可以使廣域搜索范圍寬保持種群的多樣性,局部搜索保持收斂性,即,開始時希望選擇小,迭代到后面希望選擇壓力逐漸變大.


6       

其他標定方法

對數標定
  • 函數表達式: f=aLnf+b

  • 作用: 縮小目標函數之間的差別

窗口技術
  • 函數表達式: f=af?fw

  • fw為前W代中的目標函數最小值,他考慮了各代fmin的波動,這樣fw具有記憶性

如何判斷種群個體的集中程度

通常采取比較種群中所有個體的適應度值的平均值favg與最大值fmax的接近程度來判斷,如果最大值與平均值越接近說明個體就越集中。

大變異操作的兩個參數

  1. 密集因子α: 決定大變異操作在整個過程中所占的比重,其數值約接近0.5,大變異操作越頻繁

  2. 大變異概率: 概率越大,大變異算法的穩定性就越好,但是收斂速度可能會降低,當大變異概率的數值為0.5的時候,大變異操作就近似退化為隨機搜索

以上就是關于“Python遺傳算法中適值函數的標定方法是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐业县| 罗平县| 高密市| 沙雅县| 达拉特旗| 阿城市| 如东县| 大厂| 栾川县| 灵寿县| 萨迦县| 筠连县| 峨山| 高唐县| 泽库县| 永州市| 福海县| 社旗县| 项城市| 长宁县| 阿克苏市| 调兵山市| 正安县| 华阴市| 饶河县| 宁德市| 屯昌县| 乐东| 亚东县| 达州市| 乐陵市| 乾安县| 藁城市| 宝兴县| 溧水县| 大埔区| 湘阴县| 营口市| 犍为县| 黑龙江省| 绿春县|