Esempio n. 1
0
    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))
Esempio n. 2
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)
Esempio n. 3
0
 def initialize(self):
     r = ('c1', 'c2', 'w')
     self.data.hasrequired(r)
     for p in particles.particles():
         p.v = universe.getOrigin()
         p.coordinate.uniformRandom()
     yield 'initial'
Esempio n. 4
0
    def _innerGlobalEvaluation(self, gfit, gcoord):
        if gcoord is None:
            gcoord = universe.getOrigin()

        particle = min(particles.particles(), key=lambda x: x.fitness)
        if particle.fitness < gfit:
            return (particle.fitness, particle.copyCoord())
        return (gfit, gcoord)
Esempio n. 5
0
 def _innerGlobalEvaluation(self, gfit, gcoord):
     particle = min(particles.particles(), key=lambda x: x.fitness)
     if particle.fitness < gfit:
         new = (particle.fitness, copy.deepcopy(particle.coordinate))
         particle.fitness = gfit
         particle.position(gcoord)
         return new
     return (gfit, gcoord)
     return None
Esempio n. 6
0
    def initialize(self):
        r = ('mutation_factor', 'crossover_probability')
        self.data.hasrequired(r)

        if particles.total() < 3:
            logger.error('insufficient particles (must be at least 3)')
            sys.exit(1)

        for particle in particles.particles():
            particle.coordinate.uniformRandom()
        yield 'initial'
Esempio n. 7
0
 def evaluation(self):
     for p in particles.particles():
         prob = np.random.uniform(0, 1)
         if p.intermediate < p.fitness and prob < p.loudness:
             p.fitness = p.intermediate
             p.pulse_rate = self.data.pulse_rate * \
                     (1 - math.exp(-_alpha*self.iteration))
             p.loudness = self.data.loudness * _alpha
             p.last_coordinate = copy.deepcopy(p.coordinate)
         else:
             p.position(p.last_coordinate)
Esempio n. 8
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))
Esempio n. 9
0
    def optimize(self):

        if os.path.exists(self.config.env) and  os.path.isdir(self.config.env):
            shutil.rmtree(self.config.env, ignore_errors=True)

        for iteration in self.strategy.iterations():
            with Executor.Context(iteration, self.config) as handler:
                self._coreExecution(handler, particles.particles())
                particles.evaluate(handler.iterationpath, self.strategy)
                # self.strategy.fitnessEvaluation()

        # set cleanUp to clean executors garbage left
        self.strategy.cleanUp()
        self._cleanUp()
Esempio n. 10
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))
Esempio n. 11
0
    def initialize(self):
        r = ('min_frequency', 'max_frequency', 'pulse_rate', 'loudness')
        self.data.hasrequired(r)
        data = self.data
        for p in particles.particles():
            p.v = universe.getOrigin()
            p.coordinate.uniformRandom()

            p.last_coordinate = copy.deepcopy(p.coordinate)
            p.pulse_rate = np.random.uniform(high=data.pulse_rate)
            p.loudness = np.random.uniform(high=data.loudness)
            p.frequency = np.random.uniform(data.min_frequency,
                                            data.max_frequency)

        yield 'initial'
Esempio n. 12
0
def expand():
    """
    Expand function will expand the universe with all variables and groups
    given.

    The function will expand the universe to reach all variables and to
    prohibit every coordinate that is outside the users scope a.k.a
    define the group of coordinates that are valid for this optimization.
    """
    _universe.build()
    Coordinate.setUniverse(_universe)

    global _origin
    _origin = Coordinate()
    for particle in particles.particles():
        particle.position(_origin)
Esempio n. 13
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))
Esempio n. 14
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))
Esempio n. 15
0
 def __enter__(self):
     for p in particles.particles():
         copyas(self.optdir, self.particlepath(p.name))
     return self
Esempio n. 16
0
 def evaluation(self):
     for p in particles.particles():
         if p.intermediate < p.fitness:
             p.fitness = p.intermediate
             p.xl = copy.deepcopy(p.coordinate)
Esempio n. 17
0
 def initialize(self):
     for particle in particles.particles():
         particle.coordinate.uniformRandom()
     yield 'initial'
Esempio n. 18
0
 def evaluation(self):
     for p, prev in zip(particles.particles(), self.prev_features):
         if p.intermediate < p.fitness:
             p.fitness = p.intermediate
         else:
             p.position(prev)
Esempio n. 19
0
 def evaluation(self):
     for p in particles.particles():
         if p.intermediate < p.fitness:
             p.fitness = p.intermediate
Esempio n. 20
0
 def initialize(self):
     r = ('mutation_probability',)
     self.data.hasrequired(r)
     for particle in particles.particles():
         particle.coordinate.uniformRandom()
     yield 'initial'