Skip to content

Commit 8ef1aad

Browse files
committed
Gráficos 2D do algoritmo NSGA-II plotados.
Configurações: Com m = 2, n = 10 e k = 1 e para cada maxAvaliações = 1000, 10000 e 50000: p = 50, 100 e 200 f = 10, 100 e 250 p → população f → filhos
1 parent f994986 commit 8ef1aad

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

david_notebook.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
from mpl_toolkits import mplot3d
2+
import matplotlib.pyplot as plt
3+
from src.problems import DTLZ
4+
from src.MOEAs import NSGAII
5+
from run import get_mutation, get_crossover, get_selection, get_sparsity
6+
7+
def plot_grafico_2d(pontos, title):
8+
9+
x = []
10+
y = []
11+
12+
for p in pontos:
13+
x.append(p[0])
14+
y.append(p[1])
15+
16+
fig = plt.figure(figsize=(8, 6))
17+
ax = fig.add_subplot(111)
18+
19+
ax.scatter(x, y, c='#C52535')
20+
ax.set_xlabel("f2")
21+
ax.set_ylabel("f1")
22+
ax.set_title(title)
23+
24+
plt.show()
25+
26+
27+
def mostrar_grafico(numberOfObjectives, k, maxEvaluations, populationSize, offSpringPopulationSize):
28+
29+
problem = DTLZ.DTLZ2(numberOfObjectives, k) # Se pá colocar k = 9 para termos o n = 10, já que 'n' está em função de k+m-1
30+
31+
nsga2 = NSGAII.NSGAII(
32+
33+
problem=problem,
34+
maxEvaluations = maxEvaluations,
35+
populationSize = populationSize,
36+
offSpringPopulationSize = offSpringPopulationSize,
37+
crossover=None,
38+
mutation=None,
39+
selection=None,
40+
sparsity=None
41+
)
42+
43+
nsga2.mutation = get_mutation("Polynomial", "resources/args_samples/Polynomial_args.json")
44+
nsga2.crossover = get_crossover("SBX", "resources/args_samples/SBX_args.json")
45+
nsga2.selection = get_selection("Binary")
46+
nsga2.sparsity = get_sparsity("CrowdingDistance")
47+
48+
#title = f"NSGA-II - DTLZ2 com m={numberOfObjectives}, n=10, a={maxEvaluations}, p={populationSize}, f={offSpringPopulationSize}"
49+
nsga2.execute()
50+
front = [a.objectives for a in nsga2.paretoFront.getFront(0)]
51+
plot_grafico_2d(front, title=f"NSGA-II - DTLZ2 com m={numberOfObjectives}, n=10, a={maxEvaluations}, p={populationSize}, f={offSpringPopulationSize}")
52+
53+
return True
54+
55+
# Config. 1 - 1000 avaliaçoes
56+
mostrar_grafico(2, 1, 1000, 50, 10)
57+
mostrar_grafico(2, 1, 1000, 100, 100)
58+
mostrar_grafico(2, 1, 1000, 200, 250)
59+
60+
# Config. 2 - 10000 avaliaçoes
61+
mostrar_grafico(2, 1, 10000, 50, 10)
62+
mostrar_grafico(2, 1, 10000, 100, 100)
63+
mostrar_grafico(2, 1, 10000, 200, 250)
64+
65+
66+
# Config. 3 - 50000 avaliaçoes
67+
mostrar_grafico(2, 1, 50000, 50, 10)
68+
mostrar_grafico(2, 1, 50000, 100, 100)
69+
mostrar_grafico(2, 1, 1000, 200, 250)
70+
71+
72+
73+
# 4 - Executar o NSGA-II, no problema DTLZ2 com
74+
# m = 2 objetivos
75+
# n = 10 variáveis de decisão. (Se precisa de k=1) (Se pá colocar k = 9 para termos o n = 10, já que 'n' está em função de k+m-1)
76+
77+
# qtd de vezes q vou fazer a avaliação e o tamanho da populaçao respectivamente:
78+
79+
# a = maxEvaluations - 1000, 10000 e 50000
80+
# p = populationSize - 50, 100 e 200
81+
# f = offSpringPopulationSize - 10, 100, 250
82+
83+
84+
# Config 1 - maxEvaluations = 1000:
85+
86+
# maxEvaluations = 1000, p = 50 e f = 10
87+
# maxEvaluations = 1000, p = 100 e f = 100
88+
# maxEvaluations = 1000, p = 200 e f = 250
89+
90+
91+
92+
# Config 2 - maxEvaluations = 10000:
93+
94+
# maxEvaluations = 10000, p = 50 e f = 10
95+
# maxEvaluations = 10000, p = 100 e f = 100
96+
# maxEvaluations = 10000, p = 200 e f = 250
97+
98+
99+
100+
# Config 3 - maxEvaluations = 50000:
101+
102+
# maxEvaluations = 50000, p = 50 e f = 10
103+
# maxEvaluations = 50000, p = 100 e f = 100
104+
# maxEvaluations = 50000, p = 200 e f = 250
105+

0 commit comments

Comments
 (0)