变异算法之替换(replace, replace_if, replace_copy, replace_copy_if)

函数原型

 

replace replace_if replace_copy replace_copy_if

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import matplotlib.pyplot as plt import math import random import numpy as np pop_size = 50 # 种群数量 PC=0.6 # 交叉概率 PM=0.1 #变异概率 X_max=10 #最大值 X_min=0 #最小值 DNA_SIZE=10 #DNA长度与保留位数有关,2**10 当前保留3位小数点 N_GENERATIONS=100 """ 求解的目标表达式为: y = 10 * math.sin(5 * x) + 7 * math.cos(4 * x) x=[0,5] """ def aim(x):return 10*x#np.sin(5*x)+7*np.cos(4*x) def f1(pop): return pop.dot(2 ** np.arange(DNA_SIZE)[::-1]) *(X_max-X_min)/ float(2**DNA_SIZE-1) +X_min def f2(pred): return pred + 1e-3 - np.min(pred) def f3(pop, fitness): idx = np.random.choice(np.arange(pop_size), size=pop_size, replace=True,p=fitness/fitness.sum()) return pop[idx] def f4(parent, pop): if np.random.rand() < PC: i_ = np.random.randint(0, pop_size, size=1) cross_points = np.random.randint(0, 2, size=DNA_SIZE).astype(np.bool) parent[cross_points] = pop[i_, cross_points] return parent def f5(child,pm): for point in range(DNA_SIZE): if np.random.rand() < pm: child[point] = 1 if child[point] == 0 else 0 return child pop = np.random.randint(2, size=(pop_size, DNA_SIZE)) for i in range(N_GENERATIONS): #解码 X_value= ? #获取目标函数值 F_values = ? #获取适应值 fitness = ? if(i==0): max=np.max(F_values) max_DNA = pop[np.argmax(F_values), :] if(max<np.max(F_values)): max=np.max(F_values) max_DNA=pop[np.argmax(F_values), :] if (i % 10 == 0): print("Most fitted value and X: \n", np.max(F_values), decode(pop[np.argmax(F_values), :])) #选择 pop = ? pop_copy = pop.copy() #交叉 变异 for parent in pop: child = ? child = ? parent[:] = child print("目标函数最大值为:",max) print("其DNA值为:",max_DNA) print("其X值为:",decode(max_DNA))
最新发布
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值