Exemplo n.º 1
0
def joueplsr():
    nbrepartie = 0
    j1 = 0
    j2 = 0
    eg = 0
    tj1 = 0
    tj2 = 0
    tt = time.time()

    while (nbrepartie < NBPARTIE):
        if (nbrepartie == (NBPARTIE / 2)):
            global joueur2
            global joueur1

            print("score mi-temps(" + str(nbrepartie) + " partie):\nj1: " +
                  str(j1) + " \nscore j2: " + str(j2) + "\nnb d'equalite : " +
                  str(eg) + "\n")
            s = joueur1
            joueur1 = joueur2
            joueur2 = s
            a = j1
            j1 = j2
            j2 = a

            a = tj1
            tj1 = tj2
            tj2 = a

        jeu = game.initialiseJeu()
        it = 0

        while ((it < 100) and (not (game.finJeu(jeu)))):
            if (it < 4):
                coup = Random.saisieCoup(game.getCopieJeu(jeu))
                game.joueCoup(jeu, coup)
            else:
                t1 = time.time()
                coup = saisieCoup(jeu)
                if game.getJoueur(jeu) == 1:
                    tj1 += time.time() - t1
                else:
                    tj2 += time.time() - t1
                game.joueCoup(jeu, coup)
            it += 1
        g = game.getGagnant(jeu)
        tj1 = tj1 / it
        tj2 = tj2 / it

        if (g == 1):
            j1 += 1
        if (g == 2):
            j2 += 1
        if (g == 0):
            eg += 1
        nbrepartie += 1

    tt = time.time() - tt
    print("score final :\nj1: " + str(j2) + "temps/coup=" + str(tj2) +
          "\nj2: " + str(j1) + "temps/coup=" + str(tj2) +
          "\nnb d'equalite : " + str(eg))
Exemplo n.º 2
0
def joueN(n):
    global y
    v1, j1 = 0, 1
    """
# =============================================================================
#         - v1 (nombre de victoires du joueur 1), v2 (nombre de victoires du joueur 2), mn (nombre de matchs nuls)
#         - sc1 et sc2 (scores moyens de chaque joueur)
#         - nbc (nombre de coups joues en moyenne)
# =============================================================================
    """
    #lancer une partie, 3 coups alea au debut puis chaque joueur se met a jouer
    for i in range(n):
        game.joueur1 = awele_alea
        game.joueur2 = awele_alea
        jeu = game.initialiseJeu()
        while not game.finJeu(jeu):
            coup = game.saisieCoup(jeu)
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)) == 4:
                game.joueur1 = game.joueurinter1
                game.joueur2 = game.joueurinter2

        if game.getGagnant(jeu) == j1:
            v1 += 1

    v1 = float(v1) / float(n)  #ratio victoire/nbre de match
    y.append(
        v1
    )  #y=liste de victoire éfféctué (ou on ajoute a la fin de la liste le nombre de victoire pour n partie faite)
Exemplo n.º 3
0
def JoueN(
    joueur1, joueur2
):  # joue 10 partie (variable N) et compte le nombre de victoire de joueur 1 (l'eleve)
    global j1, j2
    victoires = 0

    for i in range(N):
        game.joueur1 = othello_alea  #transforme mes joueur en joueur aleatoire
        game.joueur2 = othello_alea  #permet de tirer des coups aleatoire au debut, sinon tjr meme partie
        jeu = game.initialiseJeu()
        while not game.finJeu(jeu):
            coup = game.saisieCoup(
                jeu)  #joues different coups tant que cest pas la fin du jeu
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)
                   ) == 4:  #apres 4 coups aleatoire,le jeu commence vraiment
                game.joueur2 = joueur2
                game.joueur1 = joueur1
            g = game.getGagnant(jeu)
        if g == j1:  #on compte le nbre de victoire de leleve
            victoires += 1
        if i == N / 2:
            game.joueur1 = joueur2  #apres N/2 partie, on echange les joeuur , pour quon ai pas le meme joueur qui commence
            game.joueur2 = joueur1
            j1 = game.joueur2

    j1 = game.joueur1

    return victoires
Exemplo n.º 4
0
def jouePARTIE(j1, j2):
    global playerONE
    global playerTWO

    #On initialise a ALEA les 4 premier Coups pr que ce soit équilibré et pr éviter même partie.
    for i in range(1):
        jeu = game.initialiseJeu()
        game.joueur1 = othello_alea
        game.joueur2 = othello_alea

        while not game.finJeu(jeu):
            #game.affiche(jeu)
            coup = game.saisieCoup(jeu)
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)) == 4:
                game.joueur1 = j1
                game.joueur2 = j2

            if i == nbRounds / 2:
                game.joueur1 = j2
                game.joueur2 = j1
                #playerONE=2
                #playerTWO=1

            #print ("Nombre de tours : " + str(len(game.getCoupsJoues(jeu))))

    #print("Gagnant de la partie est : ",game.getGagnant(jeu))
    gagnant = game.getGagnant(jeu)

    return gagnant
Exemplo n.º 5
0
def play():

    jeu = game.initialiseJeu()

    while len(jeu[3]) < 4:

        valides = game.getCoupsValides(jeu)

        if game.finJeu(jeu):
            break
        if len(valides) != 0:
            coup = random.choice(valides)

        game.joueCoup(jeu, coup)

    while True:

        #game.affiche(jeu)
        valides = game.getCoupsValides(jeu)

        if game.finJeu(jeu):
            break

        if len(valides) != 0:

            coup = game.saisieCoup(jeu)

        game.joueCoup(jeu, coup)

    #print("Le gagnant est : " + str(game.getGagnant(jeu)))

    return fitness(jeu)
Exemplo n.º 6
0
def joue():
    jeu = game.initialiseJeu()
    while (not game.finJeu(jeu)):
        game.affiche(jeu)
        c = game.saisieCoup(game.getCopieJeu(jeu))
        jeu = game.joueCoup(jeu, c)
    g = game.getGagnant(jeu)
    return g
Exemplo n.º 7
0
def joue():
    jeu=game.initialiseJeu()
    it=0
    while((it<100)and (not game.finJeu(jeu))):
        game.affiche(jeu)
        coup=saisieCoup(jeu)
        game.joueCoup(jeu,coup)
        it+=1

    game.affiche(jeu)
    print("gagnant="+str(game.getGagnant(jeu)+":"+ str(game.getScore(jeu))))

    return jeu
Exemplo n.º 8
0
def joue():
    """void -> nat
    retourne un gagnant"""
    jeu = game.initialiseJeu()

    while not game.finJeu(jeu):
        #game.affiche(jeu)
        print "joueur : {}".format(game.getJoueur(jeu))
        coup = game.saisieCoup(jeu)
        print "coup joue : {}".format(coup)
        game.joueCoup(jeu, coup)
        print "score : {}".format(game.getScores(jeu))
        #game.affiche(jeu)
    return game.getGagnant(jeu)
Exemplo n.º 9
0
def jouentrainement(ev):
    global joueur2
    global joueur1
    nbrepartie=0
    j1=0
    j2=0
    eg=0
    switch=1
    
    while(nbrepartie<NBPARTIE):
        if (nbrepartie==(NBPARTIE/2)):    
            s=joueur1
            joueur1=joueur2
            joueur2=s
            a=j1
            j1=j2
            j2=a
            switch=2
            
        jeu=game.initialiseJeu()
        it=0
        
        while((it<100)and (not(game.finJeu(jeu)))):
            if (it<4):
                coup=joueur_alea.saisieCoup(game.getCopieJeu(jeu))
                game.joueCoup(jeu,coup)
            else :
                if(game.getJoueur(jeu)==switch):
                    coup=saisieCoupTr(jeu,ev)
                else:
                    coup=saisieCoup(jeu)
                game.joueCoup(jeu,coup)
            it+=1
        g=game.getGagnant(jeu)
        
        if (g==1):
            j1+=1
        if(g==2):
            j2+=1
        if(g==0):
            eg+=1    
        nbrepartie+=1

        if (nbrepartie==NBPARTIE):
            s=joueur2   
            joueur2=joueur1
            joueur1=s
            

    return j2
Exemplo n.º 10
0
def joue():
    """void -> nat
    retourne un gagnant"""
    jeu = game.initialiseJeu()

    for i in range(4):
        random.seed()
        coup = joueur_aleatoire.saisieCoup(jeu)
        game.joueCoup(jeu, coup)

    while not game.finJeu(jeu):
        #game.affiche(jeu)
        coup = game.saisieCoup(jeu)
        game.joueCoup(jeu, coup)
    return game.getGagnant(jeu)
def joue(ev1, ev2):
    it = 0
    jeu = game.initialiseJeu()
    while ((it < 100) and (not (game.finJeu(jeu)))):
        if (it < 4):
            coup = Random.saisieCoup(game.getCopieJeu(jeu))
            game.joueCoup(jeu, coup)
        else:
            if (game.getJoueur(jeu) == 1):
                coup = Alpha_Beta_Train.saisieCoup(jeu, ev1)
            else:
                coup = Alpha_Beta_Train.saisieCoup(jeu, ev2)
            game.joueCoup(jeu, coup)
        it += 1
    return game.getGagnant(jeu)
Exemplo n.º 12
0
def play():

    global W
    global Alpha

    jeu = game.initialiseJeu()
    print(game.joueur1)

    while True:

        #game.affiche(jeu)
        valides = game.getCoupsValides(jeu)
        print(EvalCoupHorizon1(game.getCopieJeu(jeu), valides[0]))
        print(oracle.scorescoups(jeu)[0])
        """if jeu[2] !=None:
            scoresoracle= oracle.scorescoups(jeu)


            o=EvalCoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu))

            for i in range(len(valides)):
                if scoresoracle[i] < max(scoresoracle):
                    if (o-EvalCoupHorizon1(game.getCopieJeu(jeu),valides[i]))<1:

                        W[0]= W[0]-Alpha*(h1CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h1CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))
                            
                        W[1]= W[1]-Alpha*(h2CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h2CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[2]= W[2]-Alpha*(h3CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h3CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[3]= W[3]-Alpha*(h4CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h4CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[4]= W[4]-Alpha*(h5CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h5CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))

                        W[5]= W[5]-Alpha*(h6CoupHorizon1(game.getCopieJeu(jeu),valides[i])-h6CoupHorizon1(game.getCopieJeu(jeu),oracle.saisieCoup(jeu)))
        """

        if game.finJeu(jeu):

            break

        elif valides != None:

            coup = game.saisieCoup(jeu)

        game.joueCoup(jeu, coup)

    return game.getGagnant(jeu)
Exemplo n.º 13
0
def jouePARTIE():
    jeu = game.initialiseJeu()
    while not game.finJeu(jeu):
        game.affiche(jeu)
        coup = game.saisieCoup(jeu)
        game.joueCoup(jeu, coup)
        print(
            "Nombre de tours : " + str(len(game.getCoupsJoues(jeu)))
        )  #str permet de cast, sinon on peut pas concatener un str et un int
    if game.getGagnant(jeu) == 0:
        print("\nEgalite parfaite !")
    else:
        print("\nLe joueur " + str(game.getGagnant(jeu)) + " a gagne !")
    print("\nPlateau de fin de jeu: ")
    game.game.affiche(jeu)
    g = game.getGagnant(jeu)
    return g
Exemplo n.º 14
0
Arquivo: main.py Projeto: Saighi/2i013
def play():

    jeu = game.initialiseJeu()

    while True:

        #game.affiche(jeu)
        valides = game.getCoupsValides(jeu)

        if game.finJeu(jeu):

            break

        elif valides != None:

            coup = game.saisieCoup(jeu)

        game.joueCoup(jeu, coup)

    print("Le gagnant est : ", game.getGagnant(jeu))

    return game.getGagnant(jeu)
Exemplo n.º 15
0
def Entrainement(ev, alpha):
    nbrepartie = 0
    j1 = 0
    j2 = 0
    it = 0
    j = 1
    while (nbrepartie < NBPARTIE):
        if (nbrepartie == NBPARTIE / 2):
            j = 2
        jeu = game.initialiseJeu()

        while (it < 100 or game.finJeu(jeu)):
            if (game.getJoueur == j):
                coupElv = eleve.saisieCoup(game.getCopieJeu(jeu), ev)
                coupM = maitre.saisieCoup(game.getCopieJeu(jeu))
                if (coupElv == coupM):
                    game.saisieCoup(coupElv)
                else:
                    print "mauvais"

                game.saisiecoup(eleve.saisieCoup(game.getCopieJeu(jeu), ev))
            else:
                game.saisieCoup(sparing.saisieCoup(jeu))
            it += 1

        j = 1
        nbrepartie += 1
        if (g == 1):
            j1 += 1
        if (g == 2):
            j2 += 1
        if (g == 0):
            eg += 1
        nbrepartie += 1
    print("score final :\nj1: " + str(j2) + "\nj2: " + str(j1) +
          "\nnb d'equalite : " + str(eg))
    print ev
Exemplo n.º 16
0
def play():

    jeu = game.initialiseJeu()

    while True:



        #game.affiche(jeu)
        valides = game.getCoupsValides(jeu)

        if game.finJeu(jeu):
            break


        if len(valides) !=0:

             coup = game.saisieCoup(jeu)


        game.joueCoup(jeu,coup)

    print("Le gagnant est : " + str(game.getGagnant(jeu)))
    return game.getGagnant(jeu)
Exemplo n.º 17
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import awele
import sys
sys.path.append("..")
import game
game.game = awele
sys.path.append("./Joueurs")
import joueur_humain
game.joueur1 = joueur_humain
game.joueur2 = joueur_humain

jeu = game.initialiseJeu()
game.affiche(jeu)

print("coups valides pour le joueur", jeu[1], ":", game.getCoupsValides(jeu))
Exemplo n.º 18
0
def apprentissageSupervise():
    a = 0.1
    jeux = 1
    while True:
        jeuInit = game.initialiseJeu()

        game.joueur1 = student
        game.joueur2 = joueur_alphabeta
        eleve = game.joueur1

        nbCoupsTourne1 = 0
        nbCoupsImite1 = 0

        turn = 0

        while not game.finJeu(jeuInit):
            if game.getJoueur(jeuInit) == 1:  #monJoueur == 1

                coups = game.getCoupsValides(jeuInit)
                prof_coups = []

                alpha = float("-inf")
                beta = float("inf")
                #on joue l'oracle
                for c in coups:
                    #print("FOR1")
                    j = game.getCopieJeu(jeuInit)
                    oracle.monJoueur = game.getJoueur(j)
                    game.joueCoup(j, c)
                    #liste des scores de oracle
                    val = oracle.estimationBetaMin(j, alpha, beta)
                    prof_coups.append(val)
                    alpha = max(val, alpha)

                opt_max_index = prof_coups.index(
                    max(prof_coups))  #index de score maximal
                opt = coups[
                    opt_max_index]  #coup avec score maximal (meilleur coup)

                #потегот оракл што го направил, ние земаме и одлучуваме дека е најдобар и го играме
                copy_opt = game.getCopieJeu(jeuInit)
                eleve.monJoueur = game.getJoueur(
                    copy_opt
                )  #on change la variable globale dans le fichier eleve (utilise dans saisie coup)
                game.joueCoup(
                    copy_opt, opt
                )  #eleve joue meilleur coup d'oracle. On utilise copy_opt dans l'evaluation

                #trouver lest coups possibles tq o(c)<o(opt)
                coups_a_jouer = []
                for i in range(len(coups)):
                    #on cree la liste o(c) < o(opt)
                    #print("FOR2")
                    if prof_coups[i] < prof_coups[opt_max_index]:
                        coups_a_jouer.append(coups[i])

                for cp in coups_a_jouer:
                    #print('asdasd')
                    copie = game.getCopieJeu(jeuInit)
                    eleve.monJoueur = game.getJoueur(copie)
                    game.joueCoup(copie, cp)
                    o = eleve.evaluation(
                        copy_opt
                    )  #evaluacija na eleve za najdobriot poteg na oracle
                    s = eleve.evaluation(
                        copie)  #evaluacijata na eleve za polosite potezi
                    changedParam = []
                    nbCoupsTourne1 += 1
                    if (o - s) < 1:
                        for j in range(len(eleve.coefficients)):
                            scjo = eleve.scores(copy_opt)[j]
                            scjc = eleve.scores(copie)[j]
                            changedParam.append(eleve.coefficients[j] - a *
                                                (scjc - scjo))

                        eleve.setParameters(changedParam)
                    else:
                        nbCoupsImite1 += 1  #tie coups sto ne se koregirani sto se dobri.

                #procent kolku coups ne se koregirani od oracle, sto znaci deka se imitirani

                #print(prof_coups)
                #print(coups_a_jouer)

                if (turn > 4):
                    coupJoueEleve = eleve.saisieCoup(jeuInit)
                else:
                    coupJoueEleve = joueur_random.saisieCoup(jeuInit)

                game.joueCoup(jeuInit, coupJoueEleve)

                turn += 1

            else:
                if (turn > 4):
                    game.joueCoup(jeuInit, game.joueur2.saisieCoup(jeuInit))
                else:
                    game.joueCoup(jeuInit, joueur_random.saisieCoup(jeuInit))

        #print("------",jeux,"------")
        #print("a=",a)
        #print(eleve.coefficients)
        #print("eleve vs alphabeta: ",game.getScores(jeuInit))
        #print("Coups imite ", nbCoupsImite1," NbTournes ", nbCoupsTourne1 ," % ", (nbCoupsImite1/nbCoupsTourne1)*100)
        a *= 0.999
        #print()
        if (game.getGagnant(jeuInit) == 1):
            gagne = 1
        else:
            gagne = 0
        print(nbCoupsTourne1)
        print(jeux, ";1;", (nbCoupsImite1 / nbCoupsTourne1) * 100, ";", gagne,
              ";", eleve.coefficients)
        ###################################################################################################
        jeuInit = game.initialiseJeu()
        game.joueur1 = joueur_alphabeta
        game.joueur2 = student
        eleve = game.joueur2

        nbCoupsTourne2 = 0
        nbCoupsImite2 = 0

        turn = 0

        while not game.finJeu(jeuInit):
            if game.getJoueur(jeuInit) == 2:  #monJoueur == 1

                coups = game.getCoupsValides(jeuInit)
                prof_coups = []

                alpha = float("-inf")
                beta = float("inf")
                #on joue l'oracle
                for c in coups:
                    #print("FOR1")
                    j = game.getCopieJeu(jeuInit)
                    oracle.monJoueur = game.getJoueur(j)
                    game.joueCoup(j, c)
                    #liste des scores de oracle
                    val = oracle.estimationBetaMin(j, alpha, beta)
                    prof_coups.append(val)
                    alpha = max(val, alpha)

                opt_max_index = prof_coups.index(
                    max(prof_coups))  #index de score maximal
                opt = coups[
                    opt_max_index]  #coup avec score maximal (meilleur coup)

                #потегот оракл што го направил, ние земаме и одлучуваме дека е најдобар и го играме
                copy_opt = game.getCopieJeu(jeuInit)
                eleve.monJoueur = game.getJoueur(
                    copy_opt
                )  #on change la variable globale dans le fichier eleve (utilise dans saisie coup)
                game.joueCoup(
                    copy_opt, opt
                )  #eleve joue meilleur coup d'oracle. On utilise copy_opt dans l'evaluation

                #trouver lest coups possibles tq o(c)<o(opt)
                coups_a_jouer = []
                for i in range(len(coups)):
                    #on cree la liste o(c) < o(opt)
                    #print("FOR2")
                    if prof_coups[i] < prof_coups[opt_max_index]:
                        coups_a_jouer.append(coups[i])

                for cp in coups_a_jouer:
                    #print('asdasd')
                    copie = game.getCopieJeu(jeuInit)
                    eleve.monJoueur = game.getJoueur(copie)
                    game.joueCoup(copie, cp)
                    o = eleve.evaluation(
                        copy_opt
                    )  #evaluacija na eleve za najdobriot poteg na oracle
                    s = eleve.evaluation(
                        copie)  #evaluacijata na eleve za polosite potezi
                    changedParam = []
                    nbCoupsTourne2 += 1
                    if (o - s) < 1:
                        for j in range(len(eleve.coefficients)):
                            scjo = eleve.scores(copy_opt)[j]
                            scjc = eleve.scores(copie)[j]
                            changedParam.append(eleve.coefficients[j] - a *
                                                (scjc - scjo))

                        eleve.setParameters(changedParam)
                    else:
                        nbCoupsImite2 += 1  #tie coups sto ne se koregirani sto se dobri.

                #procent kolku coups ne se koregirani od oracle, sto znaci deka se imitirani

                #print(prof_coups)
                #print(coups_a_jouer)

                if (turn > 4):
                    coupJoueEleve = eleve.saisieCoup(jeuInit)
                else:
                    coupJoueEleve = joueur_random.saisieCoup(jeuInit)

                game.joueCoup(jeuInit, coupJoueEleve)

                turn += 1

            else:
                if (turn > 4):
                    game.joueCoup(jeuInit, game.joueur2.saisieCoup(jeuInit))
                else:
                    game.joueCoup(jeuInit, joueur_random.saisieCoup(jeuInit))

        #print("------",jeux,"------")
        #print("a=",a)
        #print(eleve.coefficients)
        #print("alphabeta vs eleve",game.getScores(jeuInit))

        #print("Coups imite ", nbCoupsImite2," NbTournes ", nbCoupsTourne2 ," % ", (nbCoupsImite2/nbCoupsTourne2)*100)
        a *= 0.999
        #print()
        if (game.getGagnant(jeuInit) == 1):
            gagne = 0
        else:
            gagne = 1
        print(jeux, ";2;", (nbCoupsImite2 / nbCoupsTourne2) * 100, ";", gagne,
              ";", eleve.coefficients)
        jeux += 1
Exemplo n.º 19
0
#nbc (nombre de coups joues en moyenne)
victoiresj1 = []
victoiresj2 = []
profondeur = []

winsPlayer1, winsPlayer2, j1, j2, scoreMoyen1, scoreMoyen2, nbc, matchNul = 0, 0, 1, 2, 0, 0, 0, 0
for k in range(3):  #assigne nos joueur
    game.joueur1 = Vesemir
    game.joueur2 = othello_PremierCoupValide
    game.joueurinter1 = game.joueur1  #assigne joueur intermediaire
    game.joueurinter2 = game.joueur2
    winsPlayer1, winsPlayer2, j1, j2, scoreMoyen1, scoreMoyen2, nbc, matchNul = 0, 0, 1, 2, 0, 0, 0, 0
    for i in range(1, n + 1):
        game.joueur1 = othello_alea  #coup aleatoire
        game.joueur2 = othello_alea
        jeu = game.initialiseJeu()  #demarre jeu
        while not game.finJeu(jeu):
            coup = game.saisieCoup(jeu)
            game.joueCoup(jeu, coup)
            if len(game.getCoupsJoues(jeu)) == 4:  #fin coup aleatoire
                game.joueur1 = game.joueurinter1
                game.joueur2 = game.joueurinter2
        if game.getGagnant(jeu) == j1:  #compte vicoire j1
            winsPlayer1 += 1
        elif game.getGagnant(jeu) == j2:  #compte vicoire j2
            winsPlayer2 += 1
        else:  #♀compte match nul
            matchNul += 1
        scoreMoyen1 += game.getScore(
            jeu,
            j1)  #additionne les scores de j1 puis va diviser par n ensuite