Commit 91cc4061 authored by Guillaume Sabbagh's avatar Guillaume Sabbagh
Browse files

Foncteur aléatoire greedy fonctionne (étonnamment)

parent c5b4d2c8
......@@ -346,21 +346,70 @@ def test_MonoideGC():
class FoncteurAleatoire(Foncteur):
"""Foncteur aléatoire sur une catégorie."""
def __new__(cls, categorie_indexante:Categorie = None, categorie_cible:Categorie = None, nom:str = None):
if nom == None:
nom = "Foncteur aléatoire sur "+str(categorie_cible)
cat = CatFinies({categorie_indexante,categorie_cible}, "Catégorie des foncteurs pour génération de foncteur aléatoire")
foncteur = random.choice(list(cat({categorie_indexante},{categorie_cible})))
foncteur.nom = nom
return foncteur
# class FoncteurAleatoire(Foncteur):
# """Foncteur aléatoire sur une catégorie."""
# def __init__(self, categorie_indexante:Categorie = GrapheCompositionAleatoire(), categorie_cible:Categorie = GrapheCompositionAleatoire(), nom:str = None):
# def __new__(cls, categorie_indexante:Categorie = None, categorie_cible:Categorie = None, nom:str = None):
# if nom == None:
# nom = "Diagramme aléatoire sur "+str(categorie_cible)
# nom = "Foncteur aléatoire sur "+str(categorie_cible)
# cat = CatFinies({categorie_indexante,categorie_cible}, "Catégorie des foncteurs pour génération de foncteur aléatoire")
# foncteur = random.choice(list(cat({categorie_indexante},{categorie_cible})))
# foncteur.nom = nom
# return foncteur
class FoncteurAleatoire(Foncteur):
"""Foncteur aléatoire sur une catégorie."""
def __init__(self, categorie_indexante:Union[Categorie,None] = None, categorie_cible:Union[Categorie,None] = None, nom:Union[str,None] = None):
if nom == None:
nom = "Diagramme aléatoire sur "+str(categorie_cible)
if categorie_indexante == None:
categorie_indexante = GrapheCompositionAleatoire()
if categorie_cible == None:
categorie_cible = GrapheCompositionAleatoire()
categorie_indexante.transformer_graphviz()
categorie_cible.transformer_graphviz()
app_morph = dict()
fleches_a_mapper = set(categorie_indexante[categorie_indexante.objets,categorie_indexante.objets])
fleches_cibles = set(categorie_cible(categorie_cible.objets,categorie_cible.objets))
while len(fleches_a_mapper) > 0:
fleche = fleches_a_mapper.pop()
image = random.choice(list(fleches_cibles))
app_morph[fleche] = image
nouvelles_fleches_mappees = {fleche}
while True:
for fleche in fleches_a_mapper:
for fleche_deja_mappee in nouvelles_fleches_mappees:
if fleche.cible == fleche_deja_mappee.source:
fleches_a_mapper -= {fleche}
nouvelles_fleches_mappees |= {fleche}
image = random.choice([f for f in fleches_cibles if f.cible == app_morph[fleche_deja_mappee].source])
app_morph[fleche] = image
break
if fleche.source == fleche_deja_mappee.cible:
fleches_a_mapper -= {fleche}
nouvelles_fleches_mappees |= {fleche}
image = random.choice([f for f in fleches_cibles if f.source == app_morph[fleche_deja_mappee].cible])
app_morph[fleche] = image
break
else:
continue
break
else:
break
app_obj = {m.source:app_morph[m].source for m in app_morph if m.is_identite}
Foncteur.__init__(self,categorie_indexante,categorie_cible,app_obj,app_morph)
def test_FoncteurAleatoire():
import random
random.seed(4)
for i in range(10):
f = FoncteurAleatoire()
f.transformer_graphviz()
f.as_diagram().transformer_graphviz()
if __name__ == '__main__':
test_GrapheCompositionAleatoire()
test_MonoideGC()
\ No newline at end of file
# test_GrapheCompositionAleatoire()
# test_MonoideGC()
test_FoncteurAleatoire()
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment