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

该博客介绍了一种使用遗传算法求解二元函数极值的方法。通过编码、解码、选择、交叉和变异操作,不断迭代优化,最终找到函数的局部最优解。在示例中,经过10轮迭代,算法逐渐逼近了目标函数的极值点。
摘要由CSDN通过智能技术生成

确定遗传

在元素个体,遗传得到的个体和变异个体中选取最好的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法是模拟生物进化过程的一种优化方法。在使用遗传算法解决函数极值问题时,首先需要定义适应度函数来评估每个个体的优劣程度。在matlab中,可以使用函数句柄来定义适应度函数。 接下来,需要确定遗传算法的参数,包括种群大小、迭代次数、交叉概率、变异概率等。这些参数的选择会影响遗传算法的性能。 然后,需要生成初始种群。可以使用随机数生成初始种群,确保每个个体的取值范围与函数解范围一致。 接下来,按照设定的迭代次数进行遗传操作。首先进行选择操作,选择操作是通过对适应度函数进行评估,选出适应度较高的个体,这些个体有更大的概率被选中进行交叉和变异操作。接着进行交叉操作,通过对选中的个体进行基因的交换,生成新的个体。最后进行变异操作,以一定的概率对选中的个体进行基因的变异,引入新的基因变化。 迭代过程中,根据适应度函数评估每个个体的优劣程度,可以选择保存适应度最高的个体作为最终的解,也可以保存每次迭代中适应度最高的个体。 最后,通过迭代次数的增加,逐步优化种群中个体的适应度,直到达到设定的迭代次数为止。最终得到的个体即为所函数极值。 总的来说,matlab遗传算法通过模拟生物进化过程,逐步优化种群中个体的适应度,解决函数极值问题。使用合适的适应度函数和参数设定,可以获得较好的优化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值