예제 #1
0
def main():
    # Determine o número de partículas P da população.
    particlesAmount = constants.POPULATION_SIZE

    population = []
    iterations = constants.ITERATIONS
    xRange = constants.X_RANGE
    yRange = constants.Y_RANGE
    vRange = constants.V_RANGE

    # Atribua uma velocidade inicial (v) igual para todas as partículas.
    vX = random.uniform(vRange[0], vRange[1])
    vY = random.uniform(vRange[0], vRange[1])
    initialVelocity = [vX, vY]

    # Inicialize aleatoriamente a posição inicial (x) de cada partícula p de P.
    for seq in range(particlesAmount):
        x = random.randint(xRange[0], xRange[1])
        y = random.randint(yRange[0], yRange[1])
        particle = Particle(x, y, initialVelocity)
        population.append(particle)

    for iteration in range(iterations):
        # Se condição de término não for alcançada
        for particle in population:
            # Calcule sua aptidão fp = f (p).
            fitnessValue = calculateFitnessValue(particle.getPosition())
            particle.setFitnessValue(fitnessValue)

            # Calcule a melhor posição da partícula p até o momento (pΒ).
            bPosition = calculateBestPosition(particle)
            particle.setPBest(bPosition)

        # Descubra a partícula com a melhor aptidão de toda a população (gΒ).
        bParticle = getBestParticle(population)

        for particle in population:
            # Atualize a velocidade da partícula
            newVelocity = updateVelocity(particle, bParticle)
            particle.setVelocity(newVelocity)

            # Atualize a posição da particula
            newPosition = updatePosition(particle)
            particle.setPosition(newPosition)

        # print("\n\n\n")
        # print("ITERATION ", iteration)
        # for particle in population:
        #     print("############")
        #     particle.printParticle()

    # print("Fitness Value")
    for particle in population:
        print(particle.getFitnessValue())