最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python人工智能遺傳算法示例解析

 更新時(shí)間:2022年05月23日 09:17:19   作者:今年的浙江省狀元  
這篇文章主要為大家介紹了python人工智能遺傳算法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、實(shí)驗(yàn)?zāi)康?/h2>

熟悉和掌握遺傳算法的原理、流程和編碼策略,并利用遺傳求解函數(shù)優(yōu)化問題,理解求解流程并測試主要參數(shù)對結(jié)果的影響。

二、實(shí)驗(yàn)原理

遺傳算法的基本思想正是基于模仿生物界遺傳學(xué)的遺傳過程。它把問題的參數(shù)用基因代表,把問題的解用染色體代表(在計(jì)算機(jī)里用二進(jìn)制碼表示),從而得到一個(gè)由具有不同染色體的個(gè)體組成的群體。這個(gè)群體在問題特定的環(huán)境里生存競爭,適者有最好的機(jī)會生存和個(gè)體組成的群體。后代隨機(jī)化地繼承了父代的最好特征,并也在生存環(huán)境的控制支配下繼續(xù)這一過程,群體的染色體都將逐漸適應(yīng)環(huán)境,不斷進(jìn)化,最后收斂到一族最適應(yīng)環(huán)境的類似個(gè)體,即得到問題最優(yōu)的解。

三、實(shí)驗(yàn)條件

Python3,Anaconda3,PyCharm

四、實(shí)驗(yàn)內(nèi)容

import matplotlib.pyplot as plt
import random
import math
#計(jì)算函數(shù)
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
#適應(yīng)函數(shù)
def s(x):
    return s2(x)
def s1(x):
    return math.exp(-abs(x-1))
def s2(x):
    return math.exp(-abs(x+187))
# 計(jì)算2進(jìn)制序列代表的數(shù)值
'''
解碼并計(jì)算值
group 染色體
chrom_length 染色體長度
max_value, min_value 上下限
div 分界點(diǎn)
'''
def b2d(b, chrom_length, max_value, min_value, div):
    rwno = []
    #因?yàn)槿旧w里面有多個(gè)變量,所以需要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): # 分隔參數(shù)[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 # 這是一個(gè)list
'''
計(jì)算當(dāng)前函數(shù)值
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)#這里面可能是多個(gè)變量
        obj_value.append(f(x))
    return obj_value
# 獲取適應(yīng)值
def calfitValue(obj_value):
    fit_value = []
    for i in range(len(obj_value)):
        temp =  s(obj_value[i]) # 調(diào)用適應(yīng)函數(shù)計(jì)算
        fit_value.append(temp)
    return fit_value
#累計(jì)適應(yīng)值方便計(jì)算平均
def sum_fit(fit_value):
    total = 0
    for i in range(len(fit_value)):
        total += fit_value[i]
    return total
# 轉(zhuǎn)輪盤選擇法
def selection(group, fit_value):
    newfit_value = [] #[ [[染色體], [錨點(diǎn)]],... ]
    newgroup = [] #[ [父], [母], [父], [母],....]
    # 適應(yīng)度總和
    total_fit = sum_fit(fit_value)
    # 設(shè)置各個(gè)的錨點(diǎn)
    t = 0
    for i in range(len(group)):
        t += fit_value[i]/total_fit
        newfit_value.append([group[i], t])
    # 轉(zhuǎn)輪盤選擇法
    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])) # 隨機(jī)交叉點(diǎn)
            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) # 取要變異哪個(gè)
            if(group[i][mpoint] == 1):
                group[i][mpoint] = 0
            else:
                group[i][mpoint] = 1
'''
找出最優(yōu)解和最優(yōu)解的基因編碼
group 種群染色去
fit_value 種群適應(yīng)
'''
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]
'''
創(chuàng)建初代種群
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  # 繁衍代數(shù)(數(shù)量越小,出結(jié)果膾,迭代次數(shù)越少)
group_size = 400     # 染色體數(shù)量,偶數(shù)
max_value = 20       # 范圍
min_value = 10       # 偏移修正
chrom_length = 800   # 染色體長度
divid = [399, chrom_length-1]    # 輸入值分界點(diǎn), 最后一位必須是染色體長度
pc = 0.7            # 交配概率
pm = 0.1            # 變異概率
results = []        # 存儲每一代的最優(yōu)解
fit_value = []      # 個(gè)體適應(yīng)度
points = [] #多個(gè)最優(yōu)解
#生成初代
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)   # 個(gè)體評價(jià)
    fit_value = calfitValue(obj_value)  # 獲取群體適應(yīng)值
    best_individual, best_fit = best(group, fit_value)  # 返回最優(yōu)基因, 最優(yōu)適應(yīng)值
    xx = b2d(best_individual, chrom_length, max_value, min_value, divid)
    if( abs(f(xx)+186.730909) < 0.000001):#找到最優(yōu)解
        flag = False
        for p in points:
            if( (abs(xx[0]-p[0]) < 0.1) and (abs(xx[1]-p[1]) < 0.1) ):#剔除重復(fù)解
                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])  #加進(jìn)坐標(biāo)里
    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)
#最終結(jié)果
print("f(x) = " , f(x) , "x = " , x , " 染色體 = ", rank[-1][3], "  適應(yīng)值 = ", rank[-1][1], "代數(shù):", rank[-1][0])
#輸出適應(yīng)圖
X = []
Y = []
for i in range(generation):
    X.append(i)
    Y.append(results[i][1])
plt.plot(X, Y)
plt.show()

五、實(shí)驗(yàn)結(jié)果

以上就是python人工智能遺傳算法示例解析的詳細(xì)內(nèi)容,更多關(guān)于python人工智能遺傳算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python基于TCP實(shí)現(xiàn)的文件下載器功能案例

    python基于TCP實(shí)現(xiàn)的文件下載器功能案例

    這篇文章主要介紹了python基于TCP實(shí)現(xiàn)的文件下載器功能,結(jié)合具體實(shí)例形式分析了Python使用socket模塊實(shí)現(xiàn)的tcp協(xié)議下載功能客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • Python中常見的導(dǎo)入方式總結(jié)

    Python中常見的導(dǎo)入方式總結(jié)

    這篇文章主要介紹了Python中常見的導(dǎo)入方式總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • python 網(wǎng)頁解析器掌握第三方 lxml 擴(kuò)展庫與 xpath 的使用方法

    python 網(wǎng)頁解析器掌握第三方 lxml 擴(kuò)展庫與 xpath 的使用方法

    這篇文章主要介紹了python 網(wǎng)頁解析器掌握第三方 lxml 擴(kuò)展庫與 xpath 的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python logging模塊原理解析及應(yīng)用

    Python logging模塊原理解析及應(yīng)用

    這篇文章主要介紹了Python logging模塊原理解析及應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python實(shí)現(xiàn)檢測服務(wù)器是否可以ping通的2種方法

    Python實(shí)現(xiàn)檢測服務(wù)器是否可以ping通的2種方法

    這篇文章主要介紹了Python實(shí)現(xiàn)檢測服務(wù)器是否可以ping通的2種方法,本文分別講解了使用ping和fping命令檢測服務(wù)器是否可以ping通,需要的朋友可以參考下
    2015-01-01
  • python解析中國天氣網(wǎng)的天氣數(shù)據(jù)

    python解析中國天氣網(wǎng)的天氣數(shù)據(jù)

    最近學(xué)習(xí)python 感覺這門腳本語言十分靈活 而且功能十分強(qiáng)大 尤其是他re庫用于正則匹配十分強(qiáng)大,寫了個(gè)例子解析中國天氣網(wǎng)
    2014-03-03
  • python 類相關(guān)概念理解

    python 類相關(guān)概念理解

    這篇文章主要介紹了簡單了解python類概念,具有一定借鑒價(jià)值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 詳解Python中字典的增刪改查

    詳解Python中字典的增刪改查

    這篇文章主要為大家介紹了?Python字典的增刪改查,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python堆排序的實(shí)現(xiàn)示例

    Python堆排序的實(shí)現(xiàn)示例

    堆排序是一種基于二叉堆數(shù)據(jù)結(jié)構(gòu)的排序算法,本文主要介紹了Python堆排序的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Python+OpenCV進(jìn)行人臉面部表情識別

    Python+OpenCV進(jìn)行人臉面部表情識別

    這篇文章主要介紹了通過Python OpenCV實(shí)現(xiàn)對人臉面部表情識別,判斷人是否為笑臉,文中的示例代碼非常詳細(xì),需要的朋友可以參考一下
    2021-12-12

最新評論

海城市| 永德县| 望城县| 石渠县| 东港市| 西乌珠穆沁旗| 随州市| 黎平县| 衡水市| 墨竹工卡县| 竹山县| 彭泽县| 资溪县| 岱山县| 集贤县| 彰化县| 余庆县| 洮南市| 台中县| 茶陵县| 贵州省| 三明市| 乃东县| 星座| 兴宁市| 九台市| 兴山县| 小金县| 库车县| 竹北市| 台安县| 平谷区| 固阳县| 遂川县| 平南县| 宕昌县| 金塔县| 奇台县| 湘潭县| 金华市| 凤山市|