头歌——人工智能(遗传算法)

第1关:遗传算法求解函数最值

编程要求
在右侧编辑器补充代码,实现遗传算法。并求解函数f(x)在区间[0,5]上的最大值:

f(x)=xsin(10x)+xcos(2x)

函数图像如下:
在这里插入图片描述
测试说明
平台会调用你实现的方法,求解函数最优解,若你求得最优解与正确答案绝对值小于0.1则视为通关,否则输出你求得的最优解。

开始你的任务吧,祝你成功!
在这里插入图片描述

#encoding=utf8
import numpy as np

DNA_SIZE = 10  # 染色体大小
POP_SIZE = 100  # 种群大小
CROSS_RATE = 0.8  # 交叉概率
MUTATION_RATE = 0.003  # 变异概率
N_GENERATIONS = 1000  # 进化次数
X_BOUND = [0, 5]  # 变量范围

# 获取染色体适应度
def get_fitness(pred): 
    return pred + 1e-3 - np.min(pred)

# 解码
def translateDNA(pop): 
    return pop.dot(2 ** np.arange(DNA_SIZE)[::-1]) / float(2**DNA_SIZE - 1) * X_BOUND[1]

# 选择适应度高的染色体
def select(pop, fitness):    
    idx = np.random.choice(np.arange(POP_SIZE), size=POP_SIZE, replace=True,
                           p=fitness / fitness.sum())
    return pop[idx]

# 交叉
def crossover(parent, pop):     
    if np.random.rand() < CROSS_RATE:
        i_ = np.random.randint(0, POP_SIZE, size=1)                             
        cross_points = np
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaixin_啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值