Skip to content

Commit

Permalink
feat: adiciona novos testes para o algoritmo
Browse files Browse the repository at this point in the history
  • Loading branch information
ReinanHS committed Dec 5, 2024
1 parent 6d75c3c commit 3f39640
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/python/src/delivery_ag/ag.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ def seleciona_pai(self):
cumulativas.append(soma)

numero_aleatorio = round(random() * 100)

for i, limite in enumerate(cumulativas):
if numero_aleatorio < limite:
return i
Expand Down
47 changes: 46 additions & 1 deletion src/python/tests/delivery_ag/ag_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from src.delivery_ag.individuo import Individuo
from src.delivery_ag.ag import AlgoritmoGenetico
from delivery_ag.cidade import Cidade
from src.delivery_ag.cidade import Cidade


class TestAlgoritmoGenetico(unittest.TestCase):
Expand Down Expand Up @@ -140,6 +140,49 @@ def test_seleciona_pai_com_index_valido(self):
indice_pai = self.ag.seleciona_pai()
self.assertTrue(0 <= indice_pai < len(self.ag.populacao))

def test_seleciona_pai_com_maior_probabilidade(self):
self.ag.inicializa_populacao(
cidades=self.cidades,
rotas=self.rotas,
caminho=self.caminho,
centro_distribuicao=self.centro_distribuicao,
)

probabilidades = [
50,
5.55,
5.55,
5.55,
5.55,
5.55,
5.55,
5.55,
5.55,
5.55]
for i, ind in enumerate(self.ag.populacao):
ind.probabilidade = probabilidades[i % len(probabilidades)]

selecoes = {i: 0 for i in range(len(self.ag.populacao))}
numero_iteracoes = 10000

for _ in range(numero_iteracoes):
indice_pai = self.ag.seleciona_pai()
selecoes[indice_pai] += 1

frequencias = {i: (selecoes[i] /
numero_iteracoes) *
100 for i in range(len(self.ag.populacao))}

tolerancia = 2
for i in range(len(probabilidades)):
self.assertAlmostEqual(
frequencias[i],
probabilidades[i % len(probabilidades)],
delta=tolerancia,
msg=f"Frequência observada para o índice {i} ({frequencias[i]:.2f}%) "
f"não está próxima da probabilidade esperada ({probabilidades[i]}%)"
)

def test_resolver_com_um_valor_baixo(self):
melhor_solucao = self.ag.resolver(
numero_geracoes=100,
Expand All @@ -149,6 +192,8 @@ def test_resolver_com_um_valor_baixo(self):
centro_distribuicao=self.centro_distribuicao,
)
self.assertIsInstance(melhor_solucao, Individuo)
self.assertEqual(len(self.ag.populacao), 10)

self.assertLess(melhor_solucao.nota_avaliacao, 400)


Expand Down

0 comments on commit 3f39640

Please sign in to comment.