Skip to content

Wrong number of arguments exceptions for fitness functions with 2 required parameters #112

Open

Description

@jack89roberts

I'm trying pygad (2.16.3) for the first time , and have found the check for the number of arguments of the fitness function to be overly sensitive, e.g. I would like to be able to pass fitness functions of the following types:

Class instance functions:

import pygad

class Fitness:
    def fitness(self, x, idx):
        return sum(x)

foo = Fitness()

ga_instance = pygad.GA(
    num_generations=10,
    num_parents_mating=5,
    fitness_func=foo.fitness,
    sol_per_pop=10,
    num_genes=5,
)

Incorrectly triggers an error that fitness requires 3 parameters, since f.fit.__code__.co_argcount returns 3 (including self). Checking with signature instead could be an alternative:

from inspect import signature
len(signature(f.fit).parameters)
>>> 2

Functions with additional parameters that have default values:

import pygad

def fitness(x, idx, y=3):
    return sum(x)

ga_instance = pygad.GA(
    num_generations=10,
    num_parents_mating=5,
    fitness_func=fitness,
    sol_per_pop=10,
    num_genes=5,
)

Also triggers an error, but fitness can be called with 2 parameters as required. Unsure of a workaround for this one.

Is there any reason why pygad couldn't use either of these fitness functions? I'd especially like to be able to use a function of a class instance for one of my projects.

Activity

  1. changed the title [-]Wrong number of arguments exceptions for functions with 2 required parameters[/-] [+]Wrong number of arguments exceptions for fitness functions with 2 required parameters[/+] on May 19, 2022
  2. jack89roberts commented on May 19, 2022

    @jack89roberts
    Author

    I just found #92 , which has a fix for the class case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions