在学习莫烦老师的遗传算法---找曲线最高点的例子的时候,读代码的时候发现有个布尔型索引。
全部代码注释笔记如下:
"""
Visualize Genetic Algorithm to find a maximum point in a function.
可视化遗传算法去找到一个函数的最高点
"""
import numpy as np
import matplotlib.pyplot as plt
DNA_SIZE = 10 # DNA length
POP_SIZE = 100 # population size,种群中个体数目
CROSS_RATE = 0.8 # mating probability (DNA crossover),0.8的概率进行交叉配对
MUTATION_RATE = 0.003 # mutation probability,变异强度
N_GENERATIONS = 200 #迭代次数
X_BOUND = [0, 5] # x upper and lower bounds,指定x的取值范围
def F(x):
return np.sin(10*x)*x + np.cos(2*x)*x # to find the maximum of this function
# find non-zero fitness for selection
#我们都需要一个评估好坏的方程, 这个方程通常被称为 fitness适应度.
#为了找到下面这个曲线当中的最高点. 那么这个 fitness 方程可以定义为高度, 越高的点, fitness 越高.
def get_fitness(pred):
return pred + 1e-3 - np.min(pred)#因为如果直接返回pred可能是负值,而我们在计算概率的时候不能为负值。
#要进行处理,np.min表示取最小,为最大的负数,可以使全部只变成正的;1e-3为了让float进行相除防止小数点后的数被省略
# convert binary DNA to decimal and normalize it to a range(0, 5)
#对基因的翻译,如这里函数,x轴是实数,这里解释了如何将遗传0、1序列翻译成