Exemplo n.º 1
0
def generateChild(isValidPop, indexParent, incomp, travels, links, nbBus,
                  populationParent, adnCroisementCount_min,
                  adnCroisementCount_max):
    childGenes = []
    if not isValidPop:
        croisementIndex = randint(
            1,
            len(populationParent[indexParent][0].adn) - 2)
        childGenes = populationParent[indexParent][
            0].adn[:croisementIndex] + populationParent[indexParent][1].adn[-(
                len(populationParent[indexParent][1].adn) - croisementIndex):]
    else:
        indexParentSelected = randint(0,
                                      len(populationParent[indexParent]) - 1)
        indexParentSelected2 = randint(
            0,
            len(
                set(populationParent[indexParent]) -
                set([int(indexParentSelected)])) - 1)
        childGenes = list(
            populationParent[indexParent][indexParentSelected].adn)

        for i in range(randint(adnCroisementCount_min,
                               adnCroisementCount_max)):
            croisementIndex = randint(
                0,
                len(populationParent[indexParent][0].adn) - 1)
            childGenes[croisementIndex] = populationParent[indexParent][
                indexParentSelected2].adn[croisementIndex]

    child = Individu(childGenes)
    if isValidPop:
        child.computeScoreNEW(incomp, travels, links, nbBus)
    return child
Exemplo n.º 2
0
def generateChild(
    isValidPop,
    indexParent,
    incomp,
    travels,
    links,
    nbBus,
    populationParent,
    adnCroisementCount_min,
    adnCroisementCount_max,
):
    childGenes = []
    if not isValidPop:
        croisementIndex = randint(1, len(populationParent[indexParent][0].adn) - 2)
        childGenes = (
            populationParent[indexParent][0].adn[:croisementIndex]
            + populationParent[indexParent][1].adn[-(len(populationParent[indexParent][1].adn) - croisementIndex) :]
        )
    else:
        indexParentSelected = randint(0, len(populationParent[indexParent]) - 1)
        indexParentSelected2 = randint(0, len(set(populationParent[indexParent]) - set([int(indexParentSelected)])) - 1)
        childGenes = list(populationParent[indexParent][indexParentSelected].adn)

        for i in range(randint(adnCroisementCount_min, adnCroisementCount_max)):
            croisementIndex = randint(0, len(populationParent[indexParent][0].adn) - 1)
            childGenes[croisementIndex] = populationParent[indexParent][indexParentSelected2].adn[croisementIndex]

    child = Individu(childGenes)
    if isValidPop:
        child.computeScoreNEW(incomp, travels, links, nbBus)
    return child
Exemplo n.º 3
0
 def __init__(self, nombre_individus, mot_a_trouver):
     self._phrase = mot_a_trouver
     self._taille_pop = nombre_individus
     for _ in range(self._taille_pop):
         individu = Individu.Individu()
         individu.generate_phrase(len(mot_a_trouver))
         individu.calcul_fitness(mot_a_trouver)
         self._individus.append(individu)
Exemplo n.º 4
0
def createIndividu(travels):
    travelsTMP = []
    for i in range(len(travels)):
        travelsTMP.append(i)
    gene = []
    for i in range(len(travels)):
        index = randint(0, len(travelsTMP) - 1)
        gene.append(travelsTMP[index])
        del travelsTMP[index]
    return Individu(gene)
Exemplo n.º 5
0
def createIndividu2(travels, nbBus):
    idBus = []
    gene = []
    for i in range(len(travels)):
        idBus.append(i)
    for i in range(len(travels)):
        val = randint(0, len(idBus) - 1)
        gene.append(idBus[val])
        del idBus[val]
    return Individu(gene)
Exemplo n.º 6
0
def generateChildren(populationParent,adnCroisementCount):
	children = []
	for i in range(len(populationParent)):
		croisementIndex = randint(1,len(populationParent[i][0].adn.genes)-1)
		childGenes = []
		for j in range(len(populationParent[i][0].adn.genes)):
			if j < croisementIndex :
				childGenes.append(populationParent[i][0].adn.genes[j])
			else :
				childGenes.append(populationParent[i][1].adn.genes[j])
		# print str(i) + '>>>' + str(childGenes) + '(' + str(croisementIndex) + ')'
		children.append(Individu(ADN(childGenes)))
	return children
Exemplo n.º 7
0
 def fillGroup(self):
     for i in range(self.SIZE):
         age = random.randrange(0, self.MAXAGE) + 1
         school = random.randrange(0, self.N_SCHOOL)
         work = random.randrange(0, self.N_ENTERPRISE)
         family = random.randrange(0, self.SIZE / self.FAMILYSIZE)
         friendgroup = random.randrange(0, self.N_FRIENDGROUP)
         self.group.append(Individu(age, school, work, family, friendgroup))
         self.families[family].add(self.group[i])
         self.friends[friendgroup].add(self.group[i])
         if self.group[i].isStudent():
             self.schools[school].add(self.group[i])
         elif self.group[i].isWorking():
             self.enterprises[work].add(self.group[i])
Exemplo n.º 8
0
    def __init__(self, nb_individus, graph_type, ind_size):
        CC_ref = 10000
        self.nb_individus = nb_individus
        self.ind_size = ind_size
        self.pop = []  # Contiendra tous les individus
        for i in range(nb_individus):
            self.pop.append(Individu(graph_type, ind_size))

        #liste des fitness moyennes incrementée chaque pas de temps
        self.WMOY = []
        self.WMOY_CC = []
        self.WMOY_DI = []
        self.WMOY_DD = []

        self.Maj_fitness()
Exemplo n.º 9
0
 def crossover_pop2(self):
     mot_bebe = ""
     cross = []
     for _ in range(len(self._individus)):
         p1, p2 = random.sample(self._selection_pop, 2)
         p1 = p1.get_phrase()
         p2 = p2.get_phrase()
         for i in range(len(p1)):
             if random.randrange(0, 2) == 1:
                 mot_bebe += p1[i]
             else:
                 mot_bebe += p2[i]
         ind = Individu.Individu()
         ind.set_phrase(mot_bebe)
         ind.calcul_fitness(self._phrase)
         cross.append(ind)
         mot_bebe = ""
     self._individus = cross
Exemplo n.º 10
0
    def crossover_pop1(self):
        new_pop = []

        for _ in range(self._taille_pop):
            # Génération de deux parents choisis dans la population sélectionnée
            parent_1, parent_2 = random.sample(self._selection_pop, 2)
            parent_1 = parent_1.get_phrase()
            parent_2 = parent_2.get_phrase()

            # Aléatoire sur taille du parent moins 2
            gene_parent = random.randrange(1, len(parent_1) - 1)
            phrase_enfant = parent_1[0:gene_parent] + parent_2[gene_parent:]

            # Création d'un enfant de deux individus auquel on attribue la phrase généré
            enfant_individu = Individu.Individu()
            enfant_individu.set_phrase(phrase_enfant)
            enfant_individu.calcul_fitness(self._phrase)

            # Ajout de cet enfant dans la nouvelle population
            new_pop.append(enfant_individu)

        self._individus = new_pop
Exemplo n.º 11
0
    def crossing_over(
            self, G1, G2
    ):  #Prend 2 graphes parents en argument en retourne un graph enfant
        n1 = rn.randint(
            self.ind_size / 4, 3 * self.ind_size /
            4)  #Nombre de noeuds provenant du graphe 1 choisis aleatoirement
        Noeuds1 = rn.sample(list(G1.G.nodes),
                            n1)  #Liste des noeuds de n1 choisis
        Noeuds2 = []
        for n in range(self.ind_size
                       ):  #Remplissage de la liste des noeuds provenant de G2
            if n not in Noeuds1:
                Noeuds2.append(n)

        #print "noeuds du g1 :", Noeuds1
        #print "noeuds du g2 :", Noeuds2

        Edges = []  #Liste des edges des noeuds de G1
        for noeud in Noeuds1:
            for e in list(G1.G.edges(noeud)):
                Edges.append(e)
        Edges2 = []  #Liste des edges des noeuds de G2
        for noeud in Noeuds2:
            for e in list(G2.G.edges(noeud)):
                Edges2.append(e)

        G3 = Individu("NONE", self.ind_size)  #Initialisation du graph enfant
        G3.G.add_nodes_from(
            G1.G)  #Possede le meme nombre de noeuds que les graphes parents
        G3.G.add_edges_from(Edges)  #Prend les edges de G1
        G3.G.add_edges_from(Edges2)  # Prend les edges de G2

        #Met a jour les attributs et la fitness du graph
        G3.maj_attributs()
        G3.maj_fitness()
        #print "G3 : ",G3.CC, G3.DI, G3.DD

        return G3  #Retourne le graph enfant
Exemplo n.º 12
0
def createIndividu():
	gene = []
	for i in range(16):
		gene.append(randint(0,1))
	return Individu(ADN(gene))
Exemplo n.º 13
0
import time as tm
import random as rd
import os
import pickle as pk
import Individu as ind
from tkinter import *

jean = ind.Individu(20, 5, 6, 80, True)
marie = ind.Individu(20, 5, 6, 120, False)

bebe = ind.enfant(jean, marie)
Exemplo n.º 14
0
def createIndividu(travels, nbBus):
    gene = []
    for i in range(len(travels)):
        gene.append(randint(0, nbBus - 1))
    return Individu(gene)