日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

遗传算法求二元函数极值怎么编码_用遗传算法求复杂函数的极值点

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 遗传算法求二元函数极值怎么编码_用遗传算法求复杂函数的极值点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

確定遺傳

在元素個體,遺傳得到的個體和變異個體中選取最好的30個個體(對應的函數值最大的30個個體)作為下一次迭代的父樣本。

from random import randint

from numpy import sin

def decode(g):

return [((g&0xfff) - 2048) * 0.001, ((g>>12) - 2048) * 0.001]

def function_g(g):

x = decode(g)

return function(x[0], x[1])

def function(x, y):

return 100 * (sin(x) ** 2 - sin(y)) ** 2 + (1 - sin(x)) ** 2

def cmp(g1, g2):

key = function_g(g1) - function_g(g2)

if key > 0: return 1

elif key < 0: return -1

else: return 0

def GA(num = 30, round = 10):

gene = [randint(0, (1<<24) - 1) for i in range(num)]

rnd = 0

while rnd < round:

rnd += 1

gene_c = [g ^ (1<

gene_h = []

for g1 in gene:

for g2 in gene:

mask = (1<

gene_h.append(g2 & ~mask | g1 & mask)

gene_h.append(g1 & ~mask | g2 & mask)

gene_tot = gene + gene_h + gene_c

gene_tot.sort(cmp = cmp, reverse = True)

gene = gene_tot[:num]

print "round", rnd, ":", decode(gene[0]), function_g(gene[0])

return decode(gene[0]) + [function_g(gene[0])]

if __name__ == '__main__':

print GA(30, 10),

結果

經過10得到如下結果, 每一行的三個數字分別對應x, y, f(x, y)

round 1 : [1.571, -1.464] 397.724305554

round 2 : [1.571, -1.539] 399.797824716

round 3 : [-1.605, -1.548] 403.426161017

round 4 : [-1.605, -1.556] 403.486264841

round 5 : [-1.541, -1.591] 403.561685598

round 6 : [-1.541, -1.575] 403.639747518

round 7 : [-1.573, -1.579] 403.984587994

round 8 : [-1.573, -1.571] 403.998039526

round 9 : [-1.569, -1.571] 403.998694536

round 10 : [-1.569, -1.571] 403.998694536

總結

以上是生活随笔為你收集整理的遗传算法求二元函数极值怎么编码_用遗传算法求复杂函数的极值点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。