Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

name: Scorecard supply-chain security
on:
# This allows you to run the workflow manually from the Actions tab
workflow_dispatch:

# For Branch-Protection check. Only the default branch is supported. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
branch_protection_rule:
Expand Down Expand Up @@ -61,7 +64,7 @@ jobs:
- name: "Upload artifact"
uses: actions/upload-artifact@97a0fba1372883ab732affbe8f94b823f91727db # v3.pre.node20
with:
name: SARIF file
name: SARIF-file
path: results.sarif
retention-days: 5

Expand Down
78 changes: 78 additions & 0 deletions examples/example_lifecycle_classes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import pygad
import numpy

"""
Use a method to build the lifecycle.
"""

class Fitness:
def __call__(self, ga_instance, solution, solution_idx):
fitness = numpy.sum(solution)
return fitness

class Crossover:
def __call__(self, parents, offspring_size, ga_instance):
return numpy.random.rand(offspring_size[0], offspring_size[1])

class Mutation:
def __call__(self, offspring, ga_instance):
return offspring

class OnStart:
def __call__(self, ga_instance):
print("on_start")

class OnFitness:
def __call__(self, ga_instance, fitness):
print("on_fitness")

class OnCrossover:
def __call__(self, ga_instance, offspring):
print("on_crossover")

class OnMutation:
def __call__(self, ga_instance, offspring):
print("on_mutation")

class OnParents:
def __call__(self, ga_instance, parents):
print("on_parents")

class OnGeneration:
def __call__(self, ga_instance):
print("on_generation")

class OnStop:
def __call__(self, ga_instance, fitness):
print("on_stop")

num_generations = 10 # Number of generations.
num_parents_mating = 5 # Number of solutions to be selected as parents in the mating pool.

sol_per_pop = 10 # Number of solutions in the population.
num_genes = 5

ga_instance = pygad.GA(num_generations=num_generations,
num_parents_mating=num_parents_mating,
sol_per_pop=sol_per_pop,
num_genes=num_genes,

fitness_func=Fitness(),

crossover_type=Crossover(),
mutation_type=Mutation(),

on_start=OnStart(),
on_fitness=OnFitness(),
on_crossover=OnCrossover(),
on_mutation=OnMutation(),
on_parents=OnParents(),
on_generation=OnGeneration(),
on_stop=OnStop(),

suppress_warnings=True)

# Running the GA to optimize the parameters of the function.
ga_instance.run()

ga_instance.plot_fitness()
73 changes: 73 additions & 0 deletions examples/example_lifecycle_methods.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import pygad
import numpy

"""
Use a method to build the lifecycle.
"""

class GAOperations:
def fitness_func(self, ga_instance, solution, solution_idx):
fitness = numpy.sum(solution)
return fitness

def crossover(self, parents, offspring_size, ga_instance):
return numpy.random.rand(offspring_size[0], offspring_size[1])

def mutation(self, offspring, ga_instance):
return offspring

class Lifecycle:
def on_start(self, ga_instance):
print("on_start")

def on_fitness(self, ga_instance, fitness):
print("on_fitness")

def on_crossover(self, ga_instance, offspring):
print("on_crossover")

def on_mutation(self, ga_instance, offspring):
print("on_mutation")

def on_parents(self, ga_instance, parents):
print("on_parents")

def on_generation(self, ga_instance):
print("on_generation")

def on_stop(self, ga_instance, fitness):
print("on_stop")

ga_obj = GAOperations()
lifecycle_obj = Lifecycle()

num_generations = 10 # Number of generations.
num_parents_mating = 5 # Number of solutions to be selected as parents in the mating pool.

sol_per_pop = 10 # Number of solutions in the population.
num_genes = 5

ga_instance = pygad.GA(num_generations=num_generations,
num_parents_mating=num_parents_mating,
sol_per_pop=sol_per_pop,
num_genes=num_genes,

fitness_func=ga_obj.fitness_func,

crossover_type=ga_obj.crossover,
mutation_type=ga_obj.mutation,

on_start=lifecycle_obj.on_start,
on_fitness=lifecycle_obj.on_fitness,
on_crossover=lifecycle_obj.on_crossover,
on_mutation=lifecycle_obj.on_mutation,
on_parents=lifecycle_obj.on_parents,
on_generation=lifecycle_obj.on_generation,
on_stop=lifecycle_obj.on_stop,

suppress_warnings=True)

# Running the GA to optimize the parameters of the function.
ga_instance.run()

ga_instance.plot_fitness()
30 changes: 30 additions & 0 deletions examples/example_summary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import pygad
import numpy

function_inputs = [4,-2,3.5,5,-11,-4.7] # Function inputs.
desired_output = 44 # Function output.

def fitness_func(ga_instance, solution, solution_idx):
output = numpy.sum(solution*function_inputs)
fitness = 1.0 / (numpy.abs(output - desired_output) + 0.000001)
return fitness

num_generations = 100 # Number of generations.
num_parents_mating = 10 # Number of solutions to be selected as parents in the mating pool.

sol_per_pop = 20 # Number of solutions in the population.
num_genes = len(function_inputs)

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

# Running the GA to optimize the parameters of the function.
ga_instance.run()

ga_instance.plot_fitness()

ga_instance.summary()

5 changes: 4 additions & 1 deletion examples/pygad_lifecycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,15 @@ def on_stop(ga_instance, last_population_fitness):
fitness_func=fitness_function,
sol_per_pop=10,
num_genes=len(function_inputs),

on_start=on_start,
on_fitness=on_fitness,
on_parents=on_parents,
on_crossover=on_crossover,
on_mutation=on_mutation,
on_generation=on_generation,
on_stop=on_stop)
on_stop=on_stop,

suppress_warnings=True)

ga_instance.run()
2 changes: 1 addition & 1 deletion pygad/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from .pygad import * # Relative import.

__version__ = "3.5.0"
__version__ = "3.6.0"
2 changes: 1 addition & 1 deletion pygad/helper/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pygad.helper import unique
from pygad.helper import misc

__version__ = "1.2.0"
__version__ = "1.3.0"
Loading
Loading