欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python人工智能算法之差分進(jìn)化算法的實(shí)現(xiàn)

 更新時(shí)間:2023年08月11日 09:30:23   作者:微小冷  
DE基于GA,正如進(jìn)化基于遺傳,和遺傳算法相比,差分進(jìn)化引入了差分變異模式,相當(dāng)于開(kāi)辟了一條嶄新的進(jìn)化路徑,下面就來(lái)看看差分優(yōu)化算法是如何實(shí)現(xiàn)的吧

遺傳算法: 純Python實(shí)現(xiàn)遺傳算法

DE基于GA,正如進(jìn)化基于遺傳。和遺傳算法相比,差分進(jìn)化引入了差分變異模式,相當(dāng)于開(kāi)辟了一條嶄新的進(jìn)化路徑。

初始化

首先,初始種群隨機(jī)產(chǎn)生解空間(L,R)范圍的向量

(0)表示第0代。

變異

初始化后,進(jìn)行變異操作,其第t tt代變異向量為

vi?(t)=xr1??(t)+rand⋅(xr2??(t)−xr3??(t))

其中r1?,r2?,r3?為隨機(jī)挑選出的與i ii互不相同的序號(hào),相當(dāng)于隨機(jī)抽選三個(gè)值進(jìn)行基因突變。

交叉

接下來(lái),開(kāi)始種群繁衍,即種群交叉

其中,r為隨機(jī)數(shù),cr是預(yù)設(shè)的交叉概率因子;rj?為隨機(jī)生成的某個(gè)整數(shù),代表第rj?個(gè)分量必為突變分量。

選擇

最后,進(jìn)行下一代的選擇,就是在目標(biāo)個(gè)體和實(shí)驗(yàn)個(gè)體中,選擇最優(yōu)秀的那個(gè)。

xi?(t+1)=argmin(ui?(t),xi?(t))

Python實(shí)現(xiàn)

首先,做一個(gè)DE算法的迭代函數(shù)

import numpy as np
from random import sample, randint, random
def evolve(xs,cr,func):
    # 變異
    vs = []
    N = len(xs[0])
    for _ in range(len(xs)):
        x = xs.pop(0)
        r1, r2, r3 = sample(xs, 3)
        xs.append(x)
        vs.append(r1 + random()*(r2-r3))
    # 交叉
    us = []
    for i in range(len(xs)):
        us.append(vs[i] if random() < cr else xs[i])
        j = randint(0, N-1)
        us[i][j] = vs[i][j]
    # 選擇
    xNext = []
    for x,u in zip(xs, us):
        xNext.append(x if func(x)<func(u) else u)
    return xNext

其中,變異過(guò)程要求隨機(jī)則取三個(gè)不同的個(gè)體,并且這個(gè)個(gè)體不能是當(dāng)前個(gè)體,所以采取的方案是先彈出當(dāng)前個(gè)體,再?gòu)睦锩骐S機(jī)挑選三個(gè),最后再將當(dāng)前個(gè)體放回去。

交叉過(guò)程通過(guò)兩個(gè)隨機(jī)數(shù),來(lái)決定下一代的成分。首先是通過(guò)浮點(diǎn)型隨機(jī)數(shù)來(lái)決定是用原有的解還是用新解;然后用一個(gè)整型隨機(jī)數(shù),來(lái)判定采取變異解的元素序號(hào)。

然后寫出主循環(huán)

# N為個(gè)體數(shù);nDim為解維度;nIter為迭代次數(shù)
def de(N, nDim, xRange, cr, func, nIter):
    xs = [uniRand(*xRange, nDim) for _ in range(N)]
    for _ in range(nIter):
        xs = evolve(xs, cr, func)
    fs = [func(x) for x in xs]
    xBest = xs[np.argmin(fs)]
    msg = f"當(dāng)前最優(yōu)結(jié)果為{np.min(fs)},參數(shù)為"
    msg += ", ".join([f"{x:.4f}" for x in xBest])
    print(msg)

測(cè)試

最后寫個(gè)函數(shù)測(cè)試一下

def test(xs):
    _sum = 0.0
    for i in range(len(xs)):
        _sum = _sum + np.cos((xs[i]*i)/5)*(i+1)
    return _sum
???????if __name__ == "__main__":
    de(20, 5, (-5,5), 0.5, test, 100)

最終效果為

>python de.py
當(dāng)前最優(yōu)結(jié)果為-12.864706361994342,參數(shù)為6.2566, 15.7407, 148.7103, 193.4160, 3.9136

到此這篇關(guān)于python人工智能算法之差分進(jìn)化算法的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python差分進(jìn)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python-pip配置國(guó)內(nèi)鏡像源的安裝方式

    Python-pip配置國(guó)內(nèi)鏡像源的安裝方式

    本文給大家分享Python-pip配置國(guó)內(nèi)鏡像源的安裝方式,分為windows平臺(tái)安裝方式和linux平臺(tái)安裝方式,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • python里反向傳播算法詳解

    python里反向傳播算法詳解

    在本篇文章了小編給大家整理的是一篇關(guān)于python里反向傳播算法詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-11-11
  • 解決Python3中的中文字符編碼的問(wèn)題

    解決Python3中的中文字符編碼的問(wèn)題

    Unicode是一32位編碼格式,不適合用來(lái)傳輸和存儲(chǔ),所以必須轉(zhuǎn)換成utf-8,gbk等等。這篇文章主要介紹了Python3中的解決中文字符編碼的問(wèn)題,需要的朋友可以參考下
    2018-07-07
  • 利用python打印出菱形、三角形以及矩形的方法實(shí)例

    利用python打印出菱形、三角形以及矩形的方法實(shí)例

    最近在開(kāi)發(fā)中遇到一個(gè)問(wèn)題,需要利用python實(shí)現(xiàn)菱形、三角形以及矩形等形狀,發(fā)現(xiàn)網(wǎng)上這方面的資料較少,所以總結(jié)分享下,這篇文章主要給大家介紹了關(guān)于利用python打印出菱形、三角形以及矩形的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • [項(xiàng)目布局配置]Nosql與PythonWeb-Flask框架組合

    [項(xiàng)目布局配置]Nosql與PythonWeb-Flask框架組合

    本文主要描述了怎樣使用輕量級(jí)NoSQL數(shù)據(jù)庫(kù)與PythonWeb-Flask框架組合來(lái)進(jìn)行項(xiàng)目布局及應(yīng)用配置,需要的同學(xué)可以參考下,希望可以對(duì)大家有所進(jìn)益
    2021-08-08
  • Flask登錄注冊(cè)項(xiàng)目的簡(jiǎn)單實(shí)現(xiàn)

    Flask登錄注冊(cè)項(xiàng)目的簡(jiǎn)單實(shí)現(xiàn)

    一個(gè)簡(jiǎn)單的用戶注冊(cè)和登錄的頁(yè)面,涉及到驗(yàn)證,數(shù)據(jù)庫(kù)存儲(chǔ)等等,本文主要介紹了Flask登錄注冊(cè)項(xiàng)目的簡(jiǎn)單實(shí)現(xiàn),從目錄結(jié)構(gòu)開(kāi)始,感興趣的可以了解一下
    2021-05-05
  • Python安裝第三方庫(kù)的3種方法

    Python安裝第三方庫(kù)的3種方法

    這篇文章主要介紹了Python安裝第三方庫(kù)的3種方法,本文講解了通過(guò)setuptools來(lái)安裝python模塊、通過(guò)pip來(lái)安裝python模塊、直接從網(wǎng)上下載下可執(zhí)行文件來(lái)安裝三種方法,需要的朋友可以參考下
    2015-06-06
  • python中for in的用法詳解

    python中for in的用法詳解

    這篇文章主要介紹了python中for in的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python OpenCV 使用滑動(dòng)條來(lái)調(diào)整函數(shù)參數(shù)的方法

    Python OpenCV 使用滑動(dòng)條來(lái)調(diào)整函數(shù)參數(shù)的方法

    這篇文章主要介紹了Python OpenCV 使用滑動(dòng)條來(lái)調(diào)整函數(shù)參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖

    一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖

    一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖,本文涵蓋了Python編程的核心知識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評(píng)論