Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Implement Multi-Objective Optimization (optimization.py) #6

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

UKR555
Copy link

@UKR555 UKR555 commented Mar 2, 2025

import random
import numpy as np
import matplotlib.pyplot as plt
from deap import base, creator, tools, algorithms

creator.create("FitnessMulti", base.Fitness, weights=(1.0, -1.0))
creator.create("Individual", list, fitness=creator.FitnessMulti)

def evaluate(individual):
utility = individual[0]
risk = individual[1]
return utility, risk

toolbox = base.Toolbox()
toolbox.register("attr_float", random.uniform, 0, 10) # Random values between 0 and 10
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=2)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

toolbox.register("mate", tools.cxBlend, alpha=0.5)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.2)
toolbox.register("select", tools.selNSGA2)
toolbox.register("evaluate", evaluate)

def main():
population = toolbox.population(n=100)
hof = tools.HallOfFame(10)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", np.mean, axis=0)

algorithms.eaMuPlusLambda(population, toolbox, mu=100, lambda_=200, 
                          cxpb=0.7, mutpb=0.2, ngen=50, 
                          stats=stats, halloffame=hof, verbose=True)

return population, hof

if name == "main":
population, hof = main()
pareto_front = np.array([ind.fitness.values for ind in hof])

# Plot Pareto Front
plt.scatter(pareto_front[:, 0], pareto_front[:, 1], c="red", label="Pareto Front")
plt.xlabel("Utility (Maximize)")
plt.ylabel("Risk (Minimize)")
plt.title("Pareto Front of Multi-Objective Optimization")
plt.legend()
plt.grid()
plt.show()

Implement Multi-Objective Optimization (optimization.py)
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant