|
23 | 23 |
|
24 | 24 | class Problem(object): |
25 | 25 |
|
26 | | - """The abstract class for a formal problem. You should subclass |
| 26 | + """The abstract class for a formal problem. You should subclass |
27 | 27 | this and implement the methods actions and result, and possibly |
28 | 28 | __init__, goal_test, and path_cost. Then you will create instances |
29 | 29 | of your subclass and solve them with the various search functions.""" |
30 | 30 |
|
31 | 31 | def __init__(self, initial, goal=None): |
32 | 32 | """The constructor specifies the initial state, and possibly a goal |
33 | | - state, if there is a unique goal. Your subclass's constructor can add |
| 33 | + state, if there is a unique goal. Your subclass's constructor can add |
34 | 34 | other arguments.""" |
35 | 35 | self.initial = initial |
36 | 36 | self.goal = goal |
@@ -708,14 +708,26 @@ def genetic_algorithm(population, fitness_fn, gene_pool=[0, 1], f_thres=None, ng |
708 | 708 | population = [mutate(recombine(*select(2, population, fitness_fn)), gene_pool, pmut) |
709 | 709 | for i in range(len(population))] |
710 | 710 |
|
711 | | - if f_thres: |
712 | | - fittest_individual = argmax(population, key=fitness_fn) |
713 | | - if fitness_fn(fittest_individual) >= f_thres: |
714 | | - return fittest_individual |
| 711 | + fittest_individual = fitness_threshold(fitness_fn, f_thres, population) |
| 712 | + if fittest_individual: |
| 713 | + return fittest_individual |
| 714 | + |
715 | 715 |
|
716 | 716 | return argmax(population, key=fitness_fn) |
717 | 717 |
|
718 | 718 |
|
| 719 | +def fitness_threshold(fitness_fn, f_thres, population): |
| 720 | + if not f_thres: |
| 721 | + return None |
| 722 | + |
| 723 | + fittest_individual = argmax(population, key=fitness_fn) |
| 724 | + if fitness_fn(fittest_individual) >= f_thres: |
| 725 | + return fittest_individual |
| 726 | + |
| 727 | + return None |
| 728 | + |
| 729 | + |
| 730 | + |
719 | 731 | def init_population(pop_number, gene_pool, state_length): |
720 | 732 | """Initializes population for genetic algorithm |
721 | 733 | pop_number : Number of individuals in population |
|
0 commit comments