コード例 #1
0
    def _mutationAndRecombination(self, particle, index, psize):
        a = index
        b = index
        c = index
        k = index
        self.prev_features.append(particle.copyCoord())

        newc = universe.getOrigin()
        while a == index:
            a = np.random.uniform(0, 1) * (psize - 1)
        while b == index or b == a:
            b = np.random.uniform(0, 1) * (psize - 1)
        while c == index or b == c or c == a:
            c = np.random.uniform(0, 1) * (psize - 1)

        lp = particles.particles()
        for i in range(universe.dimension()):
            if np.random.uniform(0, 1) < self.data.mutation_factor:
                newc[i] = particle[i]
            else:
                newc[i] = lp[math.floor(a)][i] + self.data.mutation_factor * \
                        (lp[math.floor(b)][i] + lp[math.floor(c)][i])

        # ensure values are inbound
        newc.inbounds()
        particle.position(newc)
コード例 #2
0
ファイル: genetic_algorithm.py プロジェクト: henriqar/darwin
    def algorithm(self):

        m = len(particles.particles())
        lp = particles.particles()
        data = self.data

        tmp = []
        for _ in particles.particles():
            tmp.append(universe.getOrigin())

        # create the table of info
        printHeader('Iteration', 'Fitness', 'Elapsed')

        dimension = universe.dimension()
        for iteration in range(data.iterations):

            selection = self._rouletteSelection(particles.particles())
            for p in range(0, math.floor(m/2), 2):
                crossover_index = math.floor(np.random.uniform(high=dimension))
                for k in range(dimension):
                    if k < crossover_index:
                        tmp[p][k] = lp[selection[p]][k]
                        tmp[p+1][k] = lp[selection[p+1]][k]
                    else:
                        tmp[p][k] = lp[selection[p+1]][k]
                        tmp[p+1][k] = lp[selection[p]][k]

            if m % 2 == 0:
                cross_index = math.floor(np.random.uniform(high=dimension))
                for k in range(dimension):
                    if k < cross_index:
                        tmp[m-1][k]= lp[selection[m-1]][k]
                    else:
                        tmp[m-1][k]= lp[selection[0]][k]

            # It performs the mutation
            for coord in tmp:
                if np.random.uniform(0, 1) <= data.mutation_probability:
                    index = math.floor(np.random.uniform(high=dimension))
                    coord.uniformRandom(index)

            # changes the generation
            for j in range(m):
                lp[j].position(tmp[j])

            start_time = time.time()
            yield iteration
            elapsed_time = time.time() - start_time

            # information output
            printInfo(iteration,
                    self.data.iterations,
                    particles.getBestFitness(),
                    datetime.timedelta(seconds=elapsed_time))
コード例 #3
0
    def algorithm(self):

        m = len(particles.particles())
        lp = particles.particles()
        data = self.data

        # create the table of info
        printHeader('Iteration', 'Fitness', 'Elapsed')

        dimension = universe.dimension()
        for iteration in range(data.iterations):

            summ = 0
            best = particles.getBestCoordinate()
            for p in particles.particles():
                rand = np.random.uniform(0, 1)
                part = p
                p.coordinate = rand * (best - p.coordinate)
                p.coordinate.inbounds()

            start_time = time.time()
            yield iteration
            elapsed_time = time.time() - start_time

            for particle in particles.particles():
                summ += particle.fitness

            bestc = particles.getBestCoordinate()
            radius = particles.getBestFitness() / summ
            for p in particles.particles():
                dist = p.coordinate.euclideanDistance(bestc)
                if dist < radius:
                    p.coordinate.uniformRandom()
                    p.fitness = sys.maxsize

            # information output
            printInfo(iteration, self.data.iterations,
                      particles.getBestFitness(),
                      datetime.timedelta(seconds=elapsed_time))
コード例 #4
0
    def algorithm(self):

        # extract darwin parametrs from dict
        data = self.data

        # create the table of info
        printHeader('Iteration', 'fitness', 'elapsed')

        dimension = universe.dimension()
        for iteration in range(self.data.iterations):
            for p in particles.particles():
                self._updateParticleVelocity(p, dimension)
                self._updateParticlePosition(p, dimension)
                p.coordinate.inbounds()

            start_time = time.time()
            yield iteration
            elapsed_time = time.time() - start_time

            # information output
            printInfo(iteration, self.data.iterations,
                      particles.getBestFitness(),
                      datetime.timedelta(seconds=elapsed_time))
コード例 #5
0
    def algorithm(self):
        printHeader('Iteration', 'fitness', 'elapsed')

        dimension = universe.dimension()
        for iteration in range(self.data.iterations):
            self.iteration = iteration
            for p in particles.particles():
                self._setBatFrequency(p)
                self._updateBatVelocity(p, dimension)
                p.coordinate.inbounds()
                prob = np.random.uniform(0, 1)
                if prob > p.pulse_rate:
                    best = particles.getBestCoordinate()
                    p.last_coordinate = copy.deepcopy(p.coordinate)
                    p.position(best)

            start_time = time.time()
            yield iteration
            elapsed_time = time.time() - start_time

            printInfo(iteration, self.data.iterations,
                      particles.getBestFitness(),
                      datetime.timedelta(seconds=elapsed_time))
コード例 #6
0
    def algorithm(self):

        m = particles.total()
        lp = particles.particles()
        data = self.data

        # create the table of info
        printHeader('Iteration', 'Fitness', 'Elapsed')

        dimension = universe.dimension()
        for iteration in range(data.iterations):

            self.prev_features = []
            for i, p in enumerate(particles.particles()):
                self._mutationAndRecombination(p, i, particles.total())

            start_time = time.time()
            yield iteration
            elapsed_time = time.time() - start_time

            # information output
            printInfo(iteration, self.data.iterations,
                      particles.getBestFitness(),
                      datetime.timedelta(seconds=elapsed_time))