【问题标题】:Passing arguments to PyGAD fitness function将参数传递给 PyGAD 适应度函数
【发布时间】:2021-12-01 06:54:03
【问题描述】:

我很好奇您如何将参数发送到 PyGAD 中的适应度函数,即

import pygad

def fitness_function(solution, solution_idx,num):
    print(num+10)
    return sum(solution)

ga_instance = pygad.GA(num_generations=1,
                       num_parents_mating=2,
                       sol_per_pop=3,
                       num_genes=4,
                       fitness_func=fitness_function,

                       init_range_low=5,
                       init_range_high=15,args=(5,))

我对这段代码的期望是每次调用适应度函数时都会打印 15(只是为了确保传递的参数正常工作)。

但我得到了

 python gaex.py
Traceback (most recent call last):
  File "gaex.py", line 14, in <module>
    init_range_high=15,arg=(5,))
TypeError: __init__() got an unexpected keyword argument 'args'

有什么建议吗?

【问题讨论】:

  • 不清楚你想要达到什么目的。我在文档pygad.readthedocs.io/en/latest/… 中看到GA 不接受args 作为参数,并严格定义了fitness_function 的定义方式。您是否正在尝试对 Fitness_function 进行参数化,以便您可以通过更改变量来改变其行为?
  • 嘿 psarka,在所有其他优化库中,您不仅可以传递变量输入,还可以传递可用于计算目标函数的参数。这个库是唯一一个似乎没有这种支持的库,这对我来说很奇怪......
  • 这并不奇怪,因为当遗传算法开始运行时,您将无法更改参数。这意味着您的论点将是不变的。这意味着你可以用另一种方式设置它们(我会写一个答案)。

标签: python genetic-algorithm


【解决方案1】:

让你的适应度函数像这样参数化:

def fitness_function_factory(num):

    def fitness_function(solution, solution_idx):
        print(num + 10)
        return sum(solution)

    return fitness_function

然后像这样把它交给 GA:

ga_instance = pygad.GA(num_generations=1,
                       ...
                       fitness_func=fitness_function_factory(5),
                       ...
                       init_range_high=15)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 2013-01-27
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多