예제 #1
0
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')
예제 #2
0
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')
예제 #3
0
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)
예제 #4
0
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)