遗传算法之: One Max Problem

OMP问题是一个最大化一个0,1比特串中1的数量的简单问题.

简单描述为: X→={x1,x2,x3,...xN}\overrightarrow{X} = \{x_1, x_2, x_3, ... x_N\}X={x1​,x2​,x3​,...xN​}, 且xi∈{0,1}x_i \in \{0, 1\}xi​∈{0,1},目标是使下面等式最大化:
F(X→)=∑i=1NxiF(\overrightarrow{X}) = \sum_{i=1}^{N} x_iF(X)=i=1∑N​xi​

这个例子中,N=100N = 100N=100

进化策略1:

  1. 随机生成父比特串
  2. 计算适应度
  3. 随机突变
  4. 计算突变生成子串的适应度
  5. 比较当前子串是否是当前最优
    • 是,继续在此基础上进行突变
    • 否,从父串突变
  6. 直到F(X→)F(\overrightarrow{X})F(X) = 100结束

进化策略2:

  1. 随机生成父群
  2. 计算适应度,挑选父群中top n
  3. top n父群进行交叉变异
  4. 计算适应度,选择top n
  5. 循环3, 4
  6. 直到有子串满足结束条件F(X→)=100F(\overrightarrow{X}) = 100F(X)=100

进化策略3:

  1. 在策略2的基础上,交叉后增加,随机突变,丰富交叉样本的多样性

1. 随机突变

import random
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
def generate_sigle_parent(length, geneSet):parentGene = np.array([np.random.choice(geneSet) for i in range(length)])return parentGene
def get_fitness(gene):return np.sum(gene)
def display(gene):geneStr = ''.join(map(str, gene))fitness = get_fitness(gene)print('gene: %s, fitness: %d'%(geneStr, fitness))
def unisexual_mutate(parentGene, geneSet):childGene = parentGene.copy()index = random.randrange(0, len(parentGene))newGene, alternate = random.sample(geneSet, 2)if childGene[index] != newGene:childGene[index] = newGeneelse:childGene[index] = alternatereturn childGene
def evolution_v1(geneSet, target=100):gene_list, fitness_list = [], []bestGene = generate_sigle_parent(target,geneSet)bestFitness = get_fitness(bestGene)gene_list.append(bestGene)fitness_list.append(bestFitness)display(bestGene)print('--------first generation---------')if bestFitness >= target:return bestGenewhile True:childGene = unisexual_mutate(bestGene, geneSet)fitness = get_fitness(childGene)gene_list.append(childGene) # collectfitness_list.append(fitness) # collectif fitness <= bestFitness:continuedisplay(childGene)if fitness >= target:return childGene, gene_list, fitness_listbestGene = childGenebestFitness = fitness

单性遗传(随机突变)

best_gene, gene_log1, fitness_log1 = evolution_v1(geneSet=[0, 1], target=100)
gene: 1100011100001110000011011110110100001100100101100001111010011111100001101100001011000001111110000110, fitness: 49
--------first generation---------
gene: 1100011100001110000011011110110100001100100101100001111010011111100001101100001011010001111110000110, fitness: 50
gene: 1100011100001110000011011110110100001100100101101001111010011111100001101100001011010001111110000110, fitness: 51
gene: 1100011100001110000011011110110100001100100101101001111010011111110001101100001011010001111110000110, fitness: 52
gene: 1100011100001110000011011110110100001100100101101001111010011111110001101100001011010001111110100110, fitness: 53
gene: 1100011100001110000011011110110100001100100101101001111010011111110001101110001011010001111110100110, fitness: 54
gene: 1100011100001110000011011110110100001100100101101001111010011111110001101110101011010001111110100110, fitness: 55
gene: 1100011100001110010011011110110100001100100101101001111010011111110001101110101011010001111110100110, fitness: 56
gene: 1100011110001110010011011110110100001100100101101001111010011111110001101110101011010001111110100110, fitness: 57
gene: 1100011110001110110011011110110100001100100101101001111010011111110001101110101011010001111110100110, fitness: 58
gene: 1100011110001110110011011110110101001100100101101001111010011111110001101110101011010001111110100110, fitness: 59
gene: 1100011110001110110011011110110101001100100101101001111010011111110001101110101011010001111110100111, fitness: 60
gene: 1100011110011110110011011110110101001100100101101001111010011111110001101110101011010001111110100111, fitness: 61
gene: 1100011110011110110011011110111101001100100101101001111010011111110001101110101011010001111110100111, fitness: 62
gene: 1100011110011110111011011110111101001100100101101001111010011111110001101110101011010001111110100111, fitness: 63
gene: 1100011110011110111011011110111111001100100101101001111010011111110001101110101011010001111110100111, fitness: 64
gene: 1100011110011110111011011110111111001100100101101001111010011111110001111110101011010001111110100111, fitness: 65
gene: 1100011110011110111011011110111111011100100101101001111010011111110001111110101011010001111110100111, fitness: 66
gene: 1100011110011110111011111110111111011100100101101001111010011111110001111110101011010001111110100111, fitness: 67
gene: 1100011110011110111011111110111111011101100101101001111010011111110001111110101011010001111110100111, fitness: 68
gene: 1100011110011110111011111110111111011101100101111001111010011111110001111110101011010001111110100111, fitness: 69
gene: 1100011110011110111011111110111111011101110101111001111010011111110001111110101011010001111110100111, fitness: 70
gene: 1100011110011110111011111110111111011101111101111001111010011111110001111110101011010001111110100111, fitness: 71
gene: 1100011110011110111011111110111111011101111101111001111010011111110101111110101011010001111110100111, fitness: 72
gene: 1100011110011110111111111110111111011101111101111001111010011111110101111110101011010001111110100111, fitness: 73
gene: 1100011110011110111111111110111111011101111101111001111010011111110101111110101011010001111110101111, fitness: 74
gene: 1100011110011110111111111110111111011101111101111001111010011111110101111110101011010011111110101111, fitness: 75
gene: 1100011110011110111111111110111111011101111101111001111010011111110101111110101111010011111110101111, fitness: 76
gene: 1100011110011110111111111110111111111101111101111001111010011111110101111110101111010011111110101111, fitness: 77
gene: 1100011110011110111111111110111111111101111101111001111010011111111101111110101111010011111110101111, fitness: 78
gene: 1100011110011111111111111110111111111101111101111001111010011111111101111110101111010011111110101111, fitness: 79
gene: 1100011110011111111111111110111111111101111101111001111010011111111101111110101111010011111110111111, fitness: 80
gene: 1100111110011111111111111110111111111101111101111001111010011111111101111110101111010011111110111111, fitness: 81
gene: 1100111110011111111111111110111111111101111101111001111010011111111101111110101111010111111110111111, fitness: 82
gene: 1100111110011111111111111110111111111101111101111001111010011111111101111110101111110111111110111111, fitness: 83
gene: 1101111110011111111111111110111111111101111101111001111010011111111101111110101111110111111110111111, fitness: 84
gene: 1101111110011111111111111110111111111101111111111001111010011111111101111110101111110111111110111111, fitness: 85
gene: 1101111110011111111111111110111111111101111111111001111010011111111101111110111111110111111110111111, fitness: 86
gene: 1101111110011111111111111110111111111101111111111001111010011111111111111110111111110111111110111111, fitness: 87
gene: 1101111110011111111111111110111111111101111111111001111011011111111111111110111111110111111110111111, fitness: 88
gene: 1101111110011111111111111110111111111101111111111001111011111111111111111110111111110111111110111111, fitness: 89
gene: 1111111110011111111111111110111111111101111111111001111011111111111111111110111111110111111110111111, fitness: 90
gene: 1111111110011111111111111110111111111101111111111011111011111111111111111110111111110111111110111111, fitness: 91
gene: 1111111110011111111111111110111111111101111111111011111111111111111111111110111111110111111110111111, fitness: 92
gene: 1111111110011111111111111110111111111111111111111011111111111111111111111110111111110111111110111111, fitness: 93
gene: 1111111110011111111111111110111111111111111111111011111111111111111111111110111111110111111111111111, fitness: 94
gene: 1111111111011111111111111110111111111111111111111011111111111111111111111110111111110111111111111111, fitness: 95
gene: 1111111111011111111111111110111111111111111111111011111111111111111111111110111111111111111111111111, fitness: 96
gene: 1111111111011111111111111110111111111111111111111011111111111111111111111111111111111111111111111111, fitness: 97
gene: 1111111111111111111111111110111111111111111111111011111111111111111111111111111111111111111111111111, fitness: 98
gene: 1111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111, fitness: 99
gene: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111, fitness: 100

进化过程

2.随机交叉

def generate_parents_group(length, geneSet, group_size=10):parentGeneGroup = [np.array([np.random.choice(geneSet) for i in range(length)]) for i in range(group_size)]return parentGeneGroup

贪心选择

def select_topN_gene(GeneGroup, topn=5):fitness_list =[-1*get_fitness(gene) for gene in GeneGroup]sorted_index = np.argsort(fitness_list)selected_Gene = [GeneGroup[i] for i in sorted_index[:topn]]return selected_Gene
import itertools
def bisexual_mutate(GeneGroup, alpha=0.3):   childGenes = []for couple in itertools.combinations(GeneGroup, 2):childGene = couple[0].copy()length = len(childGene)random_location = random.sample(list(np.arange(length)), int(length*alpha))childGene[random_location] = couple[1][random_location] # 交叉childGenes.append(childGene)return childGenes
def evolution_v2(geneSet, target=100, group_size=10, topN=5, alpha=0.5):gene_list = []mean_fitness = []max_fitness = []ParentGeneGroup = generate_parents_group(target, geneSet,group_size)#ParentGeneGroup = bisexual_mutate(ParentGeneGroup,alpha=0.2)selectedPGroup = select_topN_gene(ParentGeneGroup, topN)for gene in selectedPGroup:display(gene)print('Selected Gene Group')first_fitness = [get_fitness(gene) for gene in selectedPGroup]gene_list.append(selectedPGroup)mean_fitness.append(np.mean(first_fitness))max_fitness.append(np.max(first_fitness))# for fitness in first_fitness:if fitness >= target:return selected_group#while True:for i in range(500):# 生成下一代childGeneGroup = bisexual_mutate(selectedPGroup,alpha=alpha)# 筛选selectedCGroup = select_topN_gene(childGeneGroup)gene_list.append(selectedCGroup) # collect# 上一代和下一代平均适应度进行比较mean_c_fitness = np.mean([get_fitness(gene) for gene in selectedCGroup])mean_p_fitness = np.mean([get_fitness(gene) for gene in selectedPGroup])max_c_fitness = np.max([get_fitness(gene) for gene in selectedCGroup])mean_fitness.append(mean_c_fitness)max_fitness.append(max_c_fitness)if mean_c_fitness <= mean_p_fitness:continueprint('Selected Gene Mean Fitness :%f'%mean_c_fitness)if max_c_fitness >= target:return selectedCGroup, gene_list, mean_fitnessselectedPGroup = selectedCGroupreturn selectedCGroup, gene_list, mean_fitness
#bestGroup, GeneGroup_list, Avg_fitness = evolution_v2(geneSet, alpha=0.1)  # alpha 交叉系数
result_1 = evolution_v2(geneSet, alpha=0.1)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :57.400000
Selected Gene Mean Fitness :59.600000
Selected Gene Mean Fitness :60.800000
Selected Gene Mean Fitness :62.600000
Selected Gene Mean Fitness :64.400000
Selected Gene Mean Fitness :67.000000
Selected Gene Mean Fitness :68.000000
Selected Gene Mean Fitness :68.400000
Selected Gene Mean Fitness :69.000000
Selected Gene Mean Fitness :69.200000
Selected Gene Mean Fitness :69.800000
Selected Gene Mean Fitness :70.000000
result_2 = evolution_v2(geneSet, alpha=0.2)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :56.000000
Selected Gene Mean Fitness :59.000000
Selected Gene Mean Fitness :62.400000
Selected Gene Mean Fitness :66.400000
Selected Gene Mean Fitness :69.400000
Selected Gene Mean Fitness :70.400000
Selected Gene Mean Fitness :71.000000
Selected Gene Mean Fitness :71.200000
Selected Gene Mean Fitness :71.800000
Selected Gene Mean Fitness :72.000000
result_3 = evolution_v2(geneSet, alpha=0.3)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :58.400000
Selected Gene Mean Fitness :62.600000
Selected Gene Mean Fitness :65.200000
Selected Gene Mean Fitness :67.200000
Selected Gene Mean Fitness :70.200000
Selected Gene Mean Fitness :71.000000
Selected Gene Mean Fitness :72.600000
Selected Gene Mean Fitness :73.000000
Selected Gene Mean Fitness :73.800000
Selected Gene Mean Fitness :74.000000
result_4 = evolution_v2(geneSet, alpha=0.4)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :55.600000
Selected Gene Mean Fitness :58.000000
Selected Gene Mean Fitness :59.200000
Selected Gene Mean Fitness :61.400000
Selected Gene Mean Fitness :65.400000
Selected Gene Mean Fitness :67.400000
Selected Gene Mean Fitness :69.800000
Selected Gene Mean Fitness :70.800000
Selected Gene Mean Fitness :71.200000
Selected Gene Mean Fitness :71.600000
Selected Gene Mean Fitness :72.000000
result_5 = evolution_v2(geneSet, alpha=0.5)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :54.600000
Selected Gene Mean Fitness :55.200000
Selected Gene Mean Fitness :58.600000
Selected Gene Mean Fitness :60.200000
Selected Gene Mean Fitness :61.600000
Selected Gene Mean Fitness :64.800000
Selected Gene Mean Fitness :65.600000
Selected Gene Mean Fitness :66.600000
Selected Gene Mean Fitness :66.800000
Selected Gene Mean Fitness :67.800000
Selected Gene Mean Fitness :68.400000
Selected Gene Mean Fitness :69.000000
Selected Gene Mean Fitness :69.200000
Selected Gene Mean Fitness :70.600000
Selected Gene Mean Fitness :70.800000
Selected Gene Mean Fitness :71.000000
Selected Gene Mean Fitness :71.200000
Selected Gene Mean Fitness :71.600000
Selected Gene Mean Fitness :72.000000
result_6 = evolution_v2(geneSet, alpha=0.6)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :56.000000
Selected Gene Mean Fitness :57.800000
Selected Gene Mean Fitness :59.400000
Selected Gene Mean Fitness :60.800000
Selected Gene Mean Fitness :62.000000
Selected Gene Mean Fitness :64.800000
Selected Gene Mean Fitness :66.000000
Selected Gene Mean Fitness :67.600000
Selected Gene Mean Fitness :69.200000
Selected Gene Mean Fitness :69.600000
Selected Gene Mean Fitness :71.000000
Selected Gene Mean Fitness :72.600000
Selected Gene Mean Fitness :72.800000
Selected Gene Mean Fitness :73.400000
Selected Gene Mean Fitness :73.800000
Selected Gene Mean Fitness :74.000000
result_7 = evolution_v2(geneSet, alpha=0.7)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :55.000000
Selected Gene Mean Fitness :57.600000
Selected Gene Mean Fitness :58.600000
Selected Gene Mean Fitness :59.600000
Selected Gene Mean Fitness :61.200000
Selected Gene Mean Fitness :63.600000
Selected Gene Mean Fitness :64.800000
Selected Gene Mean Fitness :66.600000
Selected Gene Mean Fitness :67.400000
Selected Gene Mean Fitness :68.400000
Selected Gene Mean Fitness :68.600000
Selected Gene Mean Fitness :69.000000
Selected Gene Mean Fitness :70.200000
Selected Gene Mean Fitness :71.200000
Selected Gene Mean Fitness :71.600000
Selected Gene Mean Fitness :72.200000
Selected Gene Mean Fitness :72.400000
Selected Gene Mean Fitness :72.800000
Selected Gene Mean Fitness :73.000000
result_8 = evolution_v2(geneSet, alpha=0.8)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :52.400000
Selected Gene Mean Fitness :54.600000
Selected Gene Mean Fitness :55.400000
Selected Gene Mean Fitness :56.200000
Selected Gene Mean Fitness :57.200000
Selected Gene Mean Fitness :58.800000
Selected Gene Mean Fitness :59.200000
Selected Gene Mean Fitness :59.400000
Selected Gene Mean Fitness :60.200000
Selected Gene Mean Fitness :61.200000
Selected Gene Mean Fitness :61.600000
Selected Gene Mean Fitness :62.400000
Selected Gene Mean Fitness :63.200000
Selected Gene Mean Fitness :63.600000
Selected Gene Mean Fitness :64.000000
Selected Gene Mean Fitness :64.200000
Selected Gene Mean Fitness :64.400000
Selected Gene Mean Fitness :64.800000
Selected Gene Mean Fitness :65.200000
Selected Gene Mean Fitness :65.600000
Selected Gene Mean Fitness :66.000000
Selected Gene Mean Fitness :66.200000
Selected Gene Mean Fitness :66.400000
Selected Gene Mean Fitness :66.600000
Selected Gene Mean Fitness :67.000000
result_9 = evolution_v2(geneSet, alpha=0.9)  # alpha 交叉系数
Selected Gene Group
Selected Gene Mean Fitness :52.200000
Selected Gene Mean Fitness :53.400000
Selected Gene Mean Fitness :54.400000
Selected Gene Mean Fitness :54.800000
Selected Gene Mean Fitness :56.200000
Selected Gene Mean Fitness :57.000000
Selected Gene Mean Fitness :57.400000
Selected Gene Mean Fitness :58.200000
Selected Gene Mean Fitness :59.000000
Selected Gene Mean Fitness :59.800000
Selected Gene Mean Fitness :60.000000
Selected Gene Mean Fitness :61.000000
Selected Gene Mean Fitness :62.400000
Selected Gene Mean Fitness :62.800000
Selected Gene Mean Fitness :63.800000
Selected Gene Mean Fitness :64.200000
Selected Gene Mean Fitness :64.400000
Selected Gene Mean Fitness :64.600000
Selected Gene Mean Fitness :64.800000
Selected Gene Mean Fitness :65.000000
Selected Gene Mean Fitness :65.200000
Selected Gene Mean Fitness :65.400000
Selected Gene Mean Fitness :65.600000
Selected Gene Mean Fitness :65.800000
Selected Gene Mean Fitness :66.400000
Selected Gene Mean Fitness :66.800000
Selected Gene Mean Fitness :67.000000

进化过程

从上图可以看出,进化过程陷入了局部最优,尽管尝试的不同的交叉比例,仍是没有改善,下面是经过选择后的TopN Gene图谱

这个图也说明,在单纯的交叉变异下,经过几轮进化后,父辈的基因基本趋于一致了,所以继续交叉下去是徒劳,很难到达最优.为了克服这个问题,继续尝试策略3,在交叉后进行突变.

3.交叉+突变

def cross_mutate(GeneGroup,alpha=0.3):childGenes = []for couple in itertools.combinations(GeneGroup, 2):childGene = couple[0].copy()length = len(childGene)random_location = random.sample(list(np.arange(length)), int(length*alpha))childGene[random_location] = couple[1][random_location] # 交叉childGene = unisexual_mutate(childGene, [0, 1])childGenes.append(childGene)return childGenes
def evolution_v3(geneSet, target=100, group_size=10, topN=5, alpha=0.5):gene_list = []mean_fitness = []max_fitness = []ParentGeneGroup = generate_parents_group(target, geneSet,group_size)#ParentGeneGroup = bisexual_mutate(ParentGeneGroup,alpha=0.2)selectedPGroup = select_topN_gene(ParentGeneGroup, topN)for gene in selectedPGroup:display(gene)print('Selected Gene Group')first_fitness = [get_fitness(gene) for gene in selectedPGroup]gene_list.append(selectedPGroup)mean_fitness.append(np.mean(first_fitness))max_fitness.append(np.max(first_fitness))# for fitness in first_fitness:if fitness >= target:return selected_group#while True:for i in range(500):# 生成下一代childGeneGroup = cross_mutate(selectedPGroup,alpha=alpha)# 筛选selectedCGroup = select_topN_gene(childGeneGroup)gene_list.append(selectedCGroup) # collect# 上一代和下一代平均适应度进行比较mean_c_fitness = np.mean([get_fitness(gene) for gene in selectedCGroup])mean_p_fitness = np.mean([get_fitness(gene) for gene in selectedPGroup])max_c_fitness = np.max([get_fitness(gene) for gene in selectedCGroup])mean_fitness.append(mean_c_fitness)max_fitness.append(max_c_fitness)if mean_c_fitness <= mean_p_fitness:continueprint('Selected Gene Mean Fitness :%f'%mean_c_fitness)if max_c_fitness >= target:return selectedCGroup, gene_list, mean_fitness, max_fitnessselectedPGroup = selectedCGroupreturn selectedCGroup, gene_list, mean_fitness, max_fitness
bestGeneGroup, gene_list, mean_fitness, max_fitness = evolution_v3(geneSet=[0, 1], alpha=0.3)
gene: 1011111010100111000010110011011110100100010101011011110110111001101001101111101101000101010110111101, fitness: 59
gene: 0111111001011001101110101101101100011000111011011011010000000011101010111101110000001111111111011001, fitness: 58
gene: 0110010010000101110000110101011000001111110011101111110010011101111110101111100110010010010101000110, fitness: 54
gene: 0110010100000110110111011001111010011100111010110101001110000110111110111101101010011101000000010001, fitness: 53
gene: 0101011111000011000101011111010011111110101001111010000001000000001001101111111010000100111110101011, fitness: 53
Selected Gene Group
Selected Gene Mean Fitness :58.800000
Selected Gene Mean Fitness :62.200000
Selected Gene Mean Fitness :67.200000
Selected Gene Mean Fitness :69.600000
Selected Gene Mean Fitness :70.400000
Selected Gene Mean Fitness :73.200000
Selected Gene Mean Fitness :74.400000
Selected Gene Mean Fitness :76.000000
Selected Gene Mean Fitness :78.200000
Selected Gene Mean Fitness :80.600000
Selected Gene Mean Fitness :81.800000
Selected Gene Mean Fitness :82.600000
Selected Gene Mean Fitness :82.800000
Selected Gene Mean Fitness :84.000000
Selected Gene Mean Fitness :84.200000
Selected Gene Mean Fitness :85.000000
Selected Gene Mean Fitness :85.800000
Selected Gene Mean Fitness :87.200000
Selected Gene Mean Fitness :87.800000
Selected Gene Mean Fitness :88.200000
Selected Gene Mean Fitness :88.800000
Selected Gene Mean Fitness :90.200000
Selected Gene Mean Fitness :90.800000
Selected Gene Mean Fitness :91.000000
Selected Gene Mean Fitness :91.800000
Selected Gene Mean Fitness :92.200000
Selected Gene Mean Fitness :92.400000
Selected Gene Mean Fitness :92.600000
Selected Gene Mean Fitness :93.400000
Selected Gene Mean Fitness :93.800000
Selected Gene Mean Fitness :94.200000
Selected Gene Mean Fitness :94.600000
Selected Gene Mean Fitness :94.800000
Selected Gene Mean Fitness :95.200000
Selected Gene Mean Fitness :95.600000
Selected Gene Mean Fitness :96.000000
Selected Gene Mean Fitness :96.200000
Selected Gene Mean Fitness :96.400000
Selected Gene Mean Fitness :97.200000
Selected Gene Mean Fitness :97.400000
Selected Gene Mean Fitness :97.600000
Selected Gene Mean Fitness :97.800000
Selected Gene Mean Fitness :98.200000
Selected Gene Mean Fitness :98.400000
Selected Gene Mean Fitness :98.800000

进化过程

很明显,增加随机突变后,只需要更少的进化就达到了target.

对比

单个Gene的随机突变虽然也能到达目标,但是需要很长时间的进化,在之前的"Hello World"中,也是基于个体突变,但是这个不是完整遗传算法,算是精简版,策略3也不是完全的遗传算法,在选择过程中没有基于概率选择,而是采取了贪心的策略,每次都选择绝对的topN,交叉过程中也没有严格遵循遗传算法,而是选择了随机交叉.不过这些细节都不重要.重要的是,单纯的交叉可能会陷入局部最优,单纯突变可能要很多代的进化才行,交叉+突变可以缩短进化的时间.

遗传算法之: One Max Problem相关推荐

  1. DEAP Example: One Max Problem

    DEAP Example: One Max Problem DEAP原文链接 目录 Setting Things Up Creator Toolbox The Evaluation Function ...

  2. 清北学堂 2017-10-07

    ********今天得了在清北的最高分,有点开心wwwww,mjy爱您! 树  [问题背景]  zhx 是二叉查找树大师.  [问题描述]  二叉查找树是一种特殊的二叉树(每个节点最多只有两个儿子的树 ...

  3. HDU 2993 MAX Average Problem(斜率优化DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给定一个长度为n(最长为10^5)的正整数序列,求出连续的最短为k的子序列平均值的最大 ...

  4. hdu 2993 MAX Average Problem 斜率优化DP

    详见,算法合集之<浅谈数形结合思想在信息学竞赛中的应用>. #include<cstdio> #include<cstring> #include<algor ...

  5. 卡丹尔算法(max subarray problem)

    问题介绍 Say you have an array for which the ith element is the price of a given stock on day i. If you ...

  6. 【斜率优化】HDU-2993——MAX Average Problem

    前言 大约一年前,我在机房学"斜率优化" 一年后的今天,我在机房学"斜率优化" ... ... 题目 Consider a simple sequence wh ...

  7. 遗传算法与C++实现

    https://blog.csdn.net/b2b160/article/details/4680853/ https://blog.csdn.net/ljp1919/article/details/ ...

  8. MAT之GA:遗传算法(GA)解决M-TSP多旅行商问题

    MAT之GA:遗传算法(GA)解决M-TSP多旅行商问题 导读       MTSP_GA Multiple Traveling Salesmen Problem (M-TSP) Genetic Al ...

  9. python完全背包最优_python 完全背包问题_遗传算法Python实战 009.背包问题

    原标题:遗传算法Python实战 009.背包问题 写在前面的话 以下部分内容,来自百度 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物 ...

  10. python 算法库_一个易用又功能强大的 Python遗传算法库

    github地址guofei9987/scikit-opt​github.com 安装 $pip install scikit-opt 定义你的目标函数 def demo_func(x): x1, x ...

最新文章

  1. oracle 使用nfs挂载的目录不能进行归档
  2. Sublime Text使用教程【转】
  3. 路由(二)——动态路由简介与RIP协议
  4. CSDN转载别人文章的操作
  5. bash --config command not found 报错
  6. [文章存档]Azure上部署的java app在向第三方服务传送中文时出现乱码
  7. Junit4.x扩展:运行指定方法
  8. 查看登陆系统用户的信息的三种方法详解
  9. 计算机单片机考试作弊检讨书,考试作弊检讨书2000字5篇
  10. 上海职业学校计算机证书查询,证书查询
  11. Maxtang大唐英特尔12代J6412无风扇双网口迷你主机真实评测
  12. 刻在我心底的名字吉他谱-凡凡吉他教室编制
  13. android 图片大小判断,android中如何使用一张图片适配不同尺寸的APP引导页
  14. 九连环课程设计c语言,九连环C语言程序
  15. C语言结构体实现简单通讯录管理系统
  16. 【听】娱乐至死,温水煮青蛙的快感
  17. 邂逅Flutter开发
  18. 计算机9针485接口,RS485是九针的插口,而实际上里面只能两根线是有用的,其它的七根线则无作用,那为什么弄九针呢?-工业支持中心-西门子中国...
  19. git分支,HEAD和master
  20. 用VLC编码H.264

热门文章

  1. 为什么我keepalive配置的vip不能通_企业十大应用-Keepalived-配置详解
  2. eureka 注册中心高可用失败,没有互为副本
  3. VUE ---- Windows7环境下安装
  4. Java基础,使用双循环嵌套,实现输出1-1000之间所有的素数,并统计有多少个
  5. nodejs-基础:路由基础
  6. 用.NET提供的Mail来发邮件
  7. Web API 文档生成工具 apidoc
  8. GitHub上常用命令(工作中几乎每天用到的命令)
  9. 前端性能优化--图片懒加载(lazyload image)
  10. WPF:MVVM模式下ViewModel关闭View