pygad.GA 类的构造函数的重要参数

pygad.GA 类的构造函数的重要参数


PyGAD中可用的第一个模块名为pygad,它包含一个名为GA的类,用于构造遗传算法。本文将讨论类中的构造函数,方法,函数和属性。

_init_()

为了创建pygad.GA类的实例,构造函数接受几个参数,允许用户自定义遗传算法到不同类型的程序中。

pygad.GA类构造函数支持以下参数:

  • num_generations:种群代数。
  • num_parents_mating:要选择作为父项的解决方案的数量。
  • fitness_func:接受一个评估函数,该函数必须接受2个参数(单个解,以及其在总体中的索引)并返回解的评估值。查看Preparing the “fitness_func” Parameter 部分以获取有关创建此类函数的信息。
  • initial_population:用户定义的初始种群。当用户想要使用自定义初始种群开始世代时,它很有用。当默认为None时意味着用户没有指定初始种群数。在这种情况下,PyGAD使用sol_per_pop以及num_gens参数创建初始种群。如果initial_popilation为None,并且sol_per_popnum_genes两个参数的任一个为也为None时,则会引起异常。
  • sol_per_pop:种群中的解决方案(如染色体)的数量。当参数initial_population存在时该参数失效。
  • num_genes:解决方案中的基因数。当参数initial_population存在时该参数失效。
  • gene_type=float:控制基因类型。它可以分配给适用于所有基因的单一数据类型,也可以指定每个基因的数据类型。它默认为float即表示所有基因为float数据类型。从PyGAD 2.90开始,gene_type可以被定义为任一数值类型:int,float,以及numpy.int/uint/float(8-64)。从PyGAD 2.14.0开始,它可定义为list,tuplenumpy.ndarray用以保存每个基因的数据类型(如gene_type=[int,float,numpy.int8]),这有助于控制每个单独基因的数据类型。在PyGAD 2.15.0中可以指定float数据类型的精度(如gene_type=[float,2])。
  • init_range_low=-4:选择初始群体中基因值的随机范围的较小值。init_range_low默认为-4。当’initial_population`参数存在时该参数无效。
  • init_range_high=4:选择初始群体中基因值的随机范围的较大值。init_range_high默认为4。当’initial_population`参数存在时该参数无效。
  • parent_selection_type="sss":夫选择类型。支持类型有sss(steady-state selection稳态选择),rws( roulette wheel selection轮盘赌轮选择),sus(stochastic universal selection随机普遍选择),rank(rank selection排名选择),random(random selection随机选择),以及tournament(tournament selection锦标赛选择)。
  • keep_parents=-1:当前种群中保持的父母数量。默认值-1表示将所有父母保持在下一种群中。0意味着没有父母在下一种群中。一个大于0的值表示将指定数量的父母保持在下一代种群中。注意,keep_parents的值不能小于-1或大于种群中的解决方案数sol_per_pop
  • K_tournament=3:如果父选择类型为锦标赛,则K_tournament指定参与锦标赛选择的父母数。它默认为3。
  • crossover_type="single_point":交叉操作类型。支持类型有single_point(单点交叉),two_point(两点交叉),uniform(均匀交叉),以及scattered(分散交叉)。其默认值为single_point。如果crossover_type=None,则绕过交叉步骤,这意味着不应用交叉,因此不会在下一代中创建后代。下一代将使用当前种群中的解决方案。
  • crossover_probability=None:选择父项以应用交叉操作的概率。它的值必须介于 0.0 和 1.0 之间(包括 0.0 和 1.0)。对于每个父项,会生成一个介于 0.0 和 1.0 之间的随机值。如果此随机值小于或等于分配给crossover_probability 参数的值,则选择父项。
  • mutation_type="random":变异操作的类型。支持类型有random(随机变异),swap(交换变异),inversion(反演变异),scramble(争夺变异)以及adaptive(适应性变异)。其默认值为random。如果mutation_type=None,即绕过突变步骤,这意味着不应用突变,因此不会对使用交叉操作创建的后代应用任何更改,其后代将在下一代中不变地使用。
  • mutation_probability=None:选择基因进行变异操作的概率。它的值必须介于 0.0 和 1.0 之间(包括 0.0 和 1.0)。对于解决方案中的每个基因,都会生成一个介于 0.0 和 1.0 之间的随机值。如果此随机值小于或等于分配给mutation_probability 参数的值,则选择该基因。如果这个参数存在,那么就不需要mutation_percent_genesmutation_num_genes这2个参数。
  • mutation_by_replacement=False:可选的布尔参数。它仅在所选突变类型为随机(mutation_type="random")时有效。在该情况下,mutation_by_replacement=True意味着用随机生成的值替换基因。如果为假,则无效,随机突变通过向基因添加随机值起作用。
  • mutation_percent_genes="default":基因突变的百分比。其默认字符串"default"随后将其转化为整数10,意味着10%的基因将发生突变。它的值必须大于0小于等于100。在这个百分比中,将推导出要突变的基因数量,该数量分配给mutation_num_genes参数。如果存在mutation_probabilitymutation_num_genes参数,则mutation_percent_genes参数将无效。当mutation_type参数为None时,该参数无效。
  • mutation_num_genes=None:要突变的基因数,默认为None,表示未指定任何数。如果参数mutation_num_genes存在,则mutation_num_genes不起作用。
  • random_mutation_min_val=-1.0:对于random变异,random_mutation_min_val参数指定从中选择随机值添加到基因的范围的起始值。默认值为-1.当mutation_type=None时,该参数无效。
  • random_mutation_max_val=1.0:对于random变异,random_mutation_max_val参数指定从中选择随机值添加到基因的范围的起始值。默认值为+1.当mutation_type=None时,该参数无效。
  • gene_space=None:它用于指定每个基因的可能值,以防用户想要限制基因值。如果基因空间被限制在某个范围内或离散值内,这是有用的。它接受一个list,tuple,range或者numpy.ndarray。当所有基因具有相同的全局空间时,将其值指定为list/tuple/range/numpy.ndarray。例如,gene_space=[0.3, 5.2, -4, 8].将基因值限制为4个指定值。如果每个基因有其空间,则 gene_space可以嵌套为如[[0.4, -5], [0.5, -3.2, 8.2, -9], ...],其中第一个子列表确定第一个基因的值,第二个子列表确定第二个基因的值,依此类推。如果嵌套list/tuple有一个None值,则从两个参数init_range_lowinit_range_high指定的范围内随机选择基因的初始值,并从两个参数random_mutation_min_valrandom_mutation_max_val指定的范围内随机选择其突变值。
  • on_start=None:在遗传算法开始进化之前只接受调用一次的函数。此函数必须接受表示遗传算法实例的单个参数。
  • on_fitness=None:接受在计算总体中所有解决方案的适应度值后调用的函数。此函数必须接受2个参数:第一个参数表示遗传算法的实例,第二个参数是所有解的适应值列表。
  • on_parents=None:在选择交配的双亲后接受要调用的函数。此函数必须接受两个参数:第一个代表遗传算法的实例,第二个代表所选的父代。
  • on_crossover=None:接受每次应用交叉操作时调用的函数。此函数必须接两个参数:第一个代表遗传算法的实例,第二个代表使用交叉生成的后代。
  • on_mutation=None:接受每次应用变异操作时调用的函数。此函数必须接受两个参数:第一个代表遗传算法的实例,第二个代表应用变异后的后代。
  • callback_generation=None:接受在每次生成后调用的函数。此函数必须接受表示遗传算法实例的单个参数。
  • on_generation=None:接受在每次生成后调用的函数。此函数必须接受表示遗传算法实例的单个参数。如果函数返回字符串stop,则run()方法将停止,而不会完成其他代。
  • on_stop=None:只接受在遗传算法停止之前或完成所有代之前调用一次的函数。此函数必须接受两个参数:第一个参数表示遗传算法的实例,第二个参数是最后一个总体解的适应值列表。
  • delay_after_gen=0.0:它接受一个非负数,以秒为单位指定一代完成后和进入下一代之前的等待时间。它默认为0.0,这意味着生成后没有延迟。
  • save_best_solutions=False:如果为True,则每次生成后的最佳解决方案将保存到名为best_solutions的属性中。如果为False(默认),则不保存任何解决方案,并且“best_solutions”属性将为空。
  • save_solutions=False:如果为True,则每一代中的所有解决方案都将附加到名为solutions的属性中,该属性为NumPy数组。
  • suppress_warnings=False:bool参数,用于控制是否打印警告消息。它默认为False
  • allow_duplicate_genes=True:如果为True,则溶液/染色体可能具有重复的基因值。如果为False,则每个基因在其解决方案中都有唯一的值。
  • stop_criteria=None:阻止进化的一些条件。每个条件都作为str传递,str有一个停止字。当前支持的两个字是reachsaturate。如果适应度值等于或大于给定的适应度值,reach将停止run()方法。reach的一个例子是"reach_40",如果适合度大于等于40,它将停止进化。饱和意味着如果适应度在给定数量的连续世代中饱和,则停止进化。saturate的一个例子是"saturate_7",这意味着如果连续7代的适应度没有改变,就停止run()方法。

用户不必在创建GA类的实例时指定所有这些参数。必须关心的一个非常重要的参数是fitness_func,它定义了适应度函数。

可以将两个参数init_range_lowinit_range_high的值设置为相等、高于或低于其他参数(即init_range_low不需要低于init_range_high)。random_mutation_min_valrandom_mutation_max_val参数也是如此。

如果两个参数mutation_typecrossover_type均为None,则会禁用遗传算法可以进行的任何类型的进化。因此,遗传算法无法在初始种群中找到比最优解更好的解。

参数在构造函数中进行验证。如果至少有一个参数不正确,将引发异常。

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值