def main(fichier): """ utilise fichier ou genere fichier On va évaluer un aspirateur effectuant 10 actions dans différents envts On va mettre en compétition 50 aspirateurs du meme type p = PopAspi(10,...,50,...) L'algorithme génétique fait 25 itérations p.run(25,...) select(0) = _selectWheel select(1) = _selectFraction select(2) = _selectRank """ import os if fichier in os.listdir(): print("{} existe".format(fichier)) _rep = "oO0Yy" _you = input("voulez vous utiliser ce fichier "+_rep+" ? ") if _you not in _rep : print("génération d'environnements de tests") generateEnvts(fichier) else: print("génération d'environnements de tests") generateEnvts(fichier) _base = fichier.split('.')[0] p = PopAspi(10,fichier,[2,6,8],objetsStatiques,50,2,'01', mmcBinaire,True) _oname = _base+"_AG_01.txt" p.run(25,_oname,0) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base+p.select(0)+'_genes_'+'01'+'_withPanne') _oname = _base+"_AG_01_b.txt" p.run(25,_oname,1) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base+p.select(1)+'_genes_'+'01'+'_withPanne') p = PopAspi(10,fichier,[2,6,8],objetsStatiques,50,1,'AGDR', mmcUnaire,False) _oname = _base+"_AG_AGDR.txt" p.run(25,_oname,0) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base+p.select(0)+'_genes_'+'AGDR'+'_noPanne') _oname = _base+"_AG_AGDR_b.txt" p.run(25,_oname,1) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base+p.select(1)+'_genes_'+'AGDR'+'_noPanne')
def main(fichier): """ utilise fichier ou genere fichier On va évaluer un aspirateur effectuant 10 actions dans différents envts On va mettre en compétition 50 aspirateurs du meme type p = PopAspi(10,...,50,...) L'algorithme génétique fait 25 itérations p.run(25,...) select(0) = _selectWheel select(1) = _selectFraction select(2) = _selectRank """ import os if fichier in os.listdir(): print("{} existe".format(fichier)) _rep = "oO0Yy" _you = input("voulez vous utiliser ce fichier " + _rep + " ? ") if _you not in _rep: print("génération d'environnements de tests") generateEnvts(fichier) else: print("génération d'environnements de tests") generateEnvts(fichier) _base = fichier.split('.')[0] p = PopAspi(10, fichier, [2, 6, 8], objetsStatiques, 50, 2, '01', mmcBinaire, True) _oname = _base + "_AG_01.txt" p.run(25, _oname, 0) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base + p.select(0) + '_genes_' + '01' + '_withPanne') _oname = _base + "_AG_01_b.txt" p.run(25, _oname, 1) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base + p.select(1) + '_genes_' + '01' + '_withPanne') p = PopAspi(10, fichier, [2, 6, 8], objetsStatiques, 50, 1, 'AGDR', mmcUnaire, False) _oname = _base + "_AG_AGDR.txt" p.run(25, _oname, 0) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base + p.select(0) + '_genes_' + 'AGDR' + '_noPanne') _oname = _base + "_AG_AGDR_b.txt" p.run(25, _oname, 1) # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_base + p.select(1) + '_genes_' + 'AGDR' + '_noPanne')
def main_nocmd(fichier='environnements.txt', nbActions=10, szPop=50, nbGenerations=25, selection= 0, alphabet='01', panne=False, lCap=[], verbose=False): """ code identique à main_cmd, sauf controle de paramètres et nom de variables """ assert isinstance(fichier,str), "{} not a valid file name".format(fichier) assert isinstance(nbActions,int) and nbActions >0, "nbActions {} is wrong".format(nbActions) assert isinstance(szPop,int) and szPop >0, "szPop {} is wrong".format(szPop) assert isinstance(nbGenerations,int) and nbGenerations >0, "nbGenerations {} is wrong".format(nbGenerations) assert isinstance(selection,int) and selection in (0,1,2), "selection {} is wrong".format(selection) assert isinstance(lCap,(list,tuple)), "lCap {} should be a list or tuple".format(lCap) assert len(list(set(lCap))) == len(lCap), "duplicate values in lCap {} are forbidden".format(lCap) assert all([x in range(9) for x in lCap]), "lCap {} contains bad values".format(lCap) assert isinstance(panne,bool), "panne {} should be boolean".format(panne) assert isinstance(verbose,bool), "verbose {} should be boolean".format(verbose) assert alphabet in ('01', 'AGDR'), "alphabet {} is unknown".format(alphabet) if lCap == []: panne = False # no capteurs no panne if alphabet == '01': size = 2 ; decodeur = mmcBinaire else: size = 1 ; decodeur = mmcUnaire ags = {} ags['nbActions'] = nbActions ags['selection'] = selection ags['szPop'] = szPop ags['nbGenerations'] = nbGenerations ags['alphabet'] = alphabet print(""" Vous avez choisi lCap = {0} la liste des capteurs panne = {1} possiblité de panne nbActions = {nbActions} dans chaque environnement de test paramètres pour l'AG selection = {selection} szPop = {szPop} taille de la population nbGenerations = {nbGenerations} nombre d'itérations pour AG alphabet = {alphabet} szGene = {2} taille d'un gène """.format(lCap,panne,size,**ags)) input("Lancer le calcul <press any key>") # vérification que l'environnement de tests existe, sinon création if fichier in os.listdir(): print("{} existe".format(fichier)) _rep = "oO0Yy" _you = input("voulez vous utiliser ce fichier "+_rep+" ? ") if _you not in _rep : print("re-génération d'environnements de tests") generateEnvts(fichier) else: print("génération d'environnements de tests") generateEnvts(fichier) _base = '_'+fichier.split('.')[0] # fichier contenant le meilleur individu _oname = "{}_AG_{}.txt".format(_base[:3],alphabet) random.seed() p = PopAspi(nbActions, fichier, lCap, objetsStatiques, szPop, size, alphabet, decodeur, panne) # fichier contenant la sortie graphique dans le répertoire datas _plotname = "{}{}_{}{}".format(_base[:3], p.select(selection), alphabet, "_Pannes" if panne else '') p.run(nbGenerations, _oname, selection, verbose) # on ajoute des informations utiles with open(_oname,'a') as f: f.write("#capteurs\n") if lCap == [] : f.write("{}\n".format(-1)) else: for x in lCap: f.write("{} ".format(x)) f.write('\n') f.close() # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_plotname) print("fichiers de sortie", _oname, _plotname)
def main_cmd(): """ utilise fichier ou genere fichier On va évaluer un aspirateur effectuant 10 actions dans différents envts On va mettre en compétition 50 aspirateurs du meme type p = PopAspi(10,...,50,...) L'algorithme génétique fait 25 itérations p.run(25,...) """ import argparse # le parser de ligne de commandes parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description="""\ Chercher le chromosome d'un aspirateur avec ou sans capteurs que l'on teste dans différents environnements se trouvant dans un fichier On donne : * La taille de la population (le nombre d'aspirateurs en concurrence) * Le nombre de générations pour l'algo génétique En sortie on trouve le fichier contenant le meilleur chromosome """) parser.print_help() parser.add_argument("-f", '--file', default='environnements.txt', help="fichier contenant les envts de simulation") parser.add_argument("-n", '--nbActions', type=int, help="nombre d'actions effectuées", default=10) parser.add_argument("szPop", type=int, help="taille de la population", default=50) parser.add_argument("nbGenerations", type=int, help="nombre d'itérations pour l'algo génétique", default=25) parser.add_argument('-c', '--capteurs', nargs='+', type=int, help="capteurs", choices=range(9), default=[]) parser.add_argument('-s', '--selection', type=int, default=0, choices=range(3), help="méthode de sélection de l'AG") parser.add_argument('-a', '--alphabet', type=str, default='01', choices=['01', 'AGDR'], help="choix de l'alphabet") parser.add_argument('-p', '--panne', action="store_true", help="indique si les capteurs sont sujets à panne") group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true", help="active le mode verbeux") group.add_argument("-q", "--quiet", action="store_true", help="active le mode silencieux") args = parser.parse_args() # Gestion des arguments lCap = args.capteurs if lCap == []: panne = False else: panne = args.panne fichier = args.file if args.alphabet == '01': size = 2 ; decodeur = mmcBinaire else: size = 1 ; decodeur = mmcUnaire print(""" Vous avez choisi lCap = {0} la liste des capteurs panne = {1} possiblité de panne nbActions = {2.nbActions} dans chaque environnement de test paramètres pour l'AG selection = {2.selection} szPop = {2.szPop} taille de la population nbGenerations = {2.nbGenerations} nombre d'itérations pour AG alphabet = {2.alphabet} szGene = {3} taille d'un gène """.format(lCap,panne,args,size)) input("Lancer le calcul <press any key>") # vérification que l'environnement de tests existe, sinon création if fichier in os.listdir(): print("{} existe".format(fichier)) _rep = "oO0Yy" _you = input("voulez vous utiliser ce fichier "+_rep+" ? ") if _you not in _rep : print("re-génération d'environnements de tests") generateEnvts(fichier) else: print("génération d'environnements de tests") generateEnvts(fichier) _base = '_'+fichier.split('.')[0] # fichier contenant le meilleur individu _oname = "{}_AG_{}.txt".format(_base[:3],args.alphabet) random.seed() p = PopAspi(args.nbActions,fichier,lCap,objetsStatiques, args.szPop,size,args.alphabet, decodeur, panne) # fichier contenant la sortie graphique dans le répertoire datas _plotname = "{}{}_{}{}".format(_base[:3], p.select(args.selection), args.alphabet, "_Pannes" if panne else '') p.run(args.nbGenerations,_oname,args.selection,args.verbose) # on ajoute des informations utiles with open(_oname,'a') as f: f.write("#capteurs\n") if lCap == [] : f.write("{}\n".format(-1)) else: for x in lCap: f.write("{} ".format(x)) f.write('\n') f.close() # ne marche que si vous avez pensé à utiliser historique dans run (agslib) p.plotHistory(_plotname) print("fichiers de sortie", _oname, _plotname)