-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
Suppose that we are working with this bit of code.
from evol import Population, Evolution
from evol.logger import BaseLogger, SummaryLogger
from evol.helpers.pickers import pick_random
def change(gene, size=8):
return min(BOARD_SIZE, max(1, gene + randint(-1, 1)))
def mutate_coords(chrmsm, p=0.1):
return [(change(x), change(y)) if random() < p else (x,y) for x,y in chrmsm]
def run_evolution(range_num, evolve_num):
chromosomes = [random_places() for i in range(POP_SIZE)]
pop = Population(chromosomes=chromosomes,
eval_function=score_tower)
evo = (Evolution()
.survive(fraction=0.2)
.breed(pick_random, mutate_coords, p=0.2)
.evaluate())
Can you find the error? It gives an error.
python towers.py 2 2
Traceback (most recent call last):
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/evol/helpers/utils.py", line 52, in result
return func(*args, **kwargs)
TypeError: mutate_coords() got multiple values for argument 'p'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "towers.py", line 45, in <module>
fire.Fire(run_evolution)
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/fire/core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/fire/core.py", line 366, in _Fire
component, remaining_args)
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/fire/core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "towers.py", line 42, in run_evolution
pop = pop.evolve(evo, n=evolve_num)
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/evol/population/base.py", line 71, in evolve
step.apply(result)
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/evol/step.py", line 68, in apply
return population.breed(**self.kwargs)
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/evol/population/base.py", line 191, in breed
self.individuals.append(Individual(chromosome=combiner(*chromosomes, **kwargs)))
File "/home/ec2-user/environment/evol-experiments/venv/local/lib/python3.6/dist-packages/evol/helpers/utils.py", line 54, in result
return func(*args, **{k: v for k, v in kwargs.items() if k in signature(func).parameters})
TypeError: mutate_coords() got multiple values for argument 'p'
The user forgot to specify the number of parents in the parent picker. This is something that could go wrong rather often and it is something that needs a better error message. Something in order of "your parent picker outputs 2 parents but your parent merger only assumes one".
Metadata
Metadata
Assignees
Labels
No labels