Пример #1
0
    def test_move_one_values(self):
        """Test move."""
        class Random(object):
            def random(self):
                return 1

        info = Information(position=matrix([1, 1, 1]), fitness=5)
        binfo = Information(position=matrix([1, 1, 1]), fitness=5)
        velocity = matrix([1, 1, 1])

        config = {}
        config['inertial_weight'] = 1
        config['cognition'] = 1
        config['social'] = 1
        config['random'] = Random()
        env = Environment(config)

        particle = PSOParticle(environment=env,
                               current=info, best=binfo, velocity=velocity)
        new_info = particle.move()
        assert (particle.velocity == matrix([1, 1, 1])).all()
        assert (new_info.position == matrix([2, 2, 2])).all()
Пример #2
0
def builder(base, point, params, random_generator, position_initializator):
    """Sistematically generate environments from parameters combination."""
    index = 1
    for param in parameters_matrix(params):
        # read parameters from the matrix
        error = param[0]
        inertial_weight = param[1]
        cognition = param[2]
        social = param[3]
        num_particles = param[4]
        velocity_max = param[5]
        iterations_per_particle = param[6]
        # point disturbed by a gaussian noise
        disturbed_point_gen = apply_noise_linear(point=point, error=error)
        # compute radius
        radius = matrix([distance(b, next(disturbed_point_gen)) for b in base])
        # build environment configuration
        env_config = {
            'inertial_weight': inertial_weight,
            'cognition': cognition,
            'social': social,
            'random': random_generator,
            'base': base,
            'radius': radius
        }
        env = Environment(config=env_config)
        # particle position generator
        position_generator = position_initializator(env)
        # particles inside env
        for i in range(num_particles):
            # particles
            PSOParticle(
                environment=env,
                id="P{}env{}".format(i, index),
                current=Information(position=next(position_generator)),
                velocity=velocity_max * random_generator.random(),
                vmax=velocity_max
            )

        # engine for env
        yield (param, ParticleEngine(
            config={
                'max_iterations': iterations_per_particle
            },
            environment=env
        ))
Пример #3
0
    def test_move_defined_values(self):
        """Test move."""
        class Random(object):
            def random(self):
                return 1

        config = {
            'inertial_weight': 1,
            'cognition': 1,
            'social': 1,
            'random': Random(),
            'base': matrix([
                [0, 0, 0],   # beacon 1
                [7, 5, 0],   # beacon 2
                [5, -4, 0],  # beacon 3
            ]),
            'radius': matrix([
                3.024,   # beacon 1
                6.4,     # beacon 2
                6.63,  # beacon 3
            ])
        }
        env = Environment(config)

        particle = PSOParticle(environment=env,
                               current=Information(position=matrix([1, 1, 1])))
        particle.fitness()
        assert 20.14 < particle.best.fitness < 20.15

        particle.move()
        assert (particle.current.position == matrix([2, 2, 2])).all()

        particle.fitness()
        assert 10.85 < particle.best.fitness < 10.86

        particle.move()
        assert (particle.current.position == matrix([3, 3, 3])).all()

        particle.fitness()
        assert 47.85 < particle.current.fitness < 47.86
        assert 10.85 < particle.best.fitness < 10.86

        particle.move()
        assert (particle.current.position == matrix([2, 2, 2])).all()
Пример #4
0
        [0, 0, 0],  # beacon 1
        [7, 5, 0],  # beacon 2
        [5, -4, 0],  # beacon 3
    ]),
    'radius':
    matrix([
        3.024,  # beacon 1
        6.4,  # beacon 2
        6.63,  # beacon 3
    ])
}
env = Environment(config=config)

PSOParticle(environment=env,
            id="P1",
            current=Information(position=config['base'][0]),
            velocity=matrix([0.1, 0.1, 0.1]),
            vmax=3)
PSOParticle(environment=env,
            id="P2",
            current=Information(position=config['base'][1]),
            vmax=10)
PSOParticle(environment=env,
            id="P3",
            current=Information(position=config['base'][2]),
            vmax=10)

logging.basicConfig(filename='logs/find_point.log', level=logging.DEBUG)

engine = ParticleEngine(config={'max_iterations': 100}, environment=env)
engine.start()
Пример #5
0
    'social': 1,
    'random': random_generator,
    'base': base,
    'radius': radius
}
env1 = Environment(config=env_config)

position_generator = around_beacons(env1)

vmax = 5

# particles inside env 1
for i in range(int(sys.argv[1])):
    PSOParticle(environment=env1,
                id="P{}env1".format(i),
                current=Information(position=next(position_generator)),
                velocity=vmax * random_generator.random() -
                matrix([vmax / 2, vmax / 2, vmax / 2]),
                vmax=vmax)

# Load logging configuration
log_config = "examples/simple_pso.json"
with open(log_config) as data_file:
    data = json.load(data_file)
logging.config.dictConfig(data)

# engine1 for env1
engine1 = ParticleEngine(config={'max_iterations': 100}, environment=env1)
engine1.start()

# wait engines
engine1.join()
                                                beacon_index=1,
                                                num_of_points=total)

position_generator_3 = on_beacon_sphere_surface(environment=env,
                                                beacon_index=2,
                                                num_of_points=total)

position_generator_4 = on_beacon_sphere_surface(environment=env,
                                                beacon_index=3,
                                                num_of_points=total)

for i in range(total):
    # start around beacon 1
    PSOParticle(environment=env,
                id="P{}env1".format(i),
                current=Information(position=next(position_generator_1)),
                velocity=random_generator.random(),
                vmax=1)
    # start around beacon 2
    PSOParticle(environment=env,
                id="P{}env1".format(i + total),
                current=Information(position=next(position_generator_2)),
                velocity=random_generator.random(),
                vmax=1)
    # start around beacon 3
    PSOParticle(environment=env,
                id="P{}env1".format(i + total * 2),
                current=Information(position=next(position_generator_3)),
                velocity=random_generator.random(),
                vmax=1)
    # start around beacon 4
Пример #7
0
    'radius': matrix([
        20,    # beacon 1
        60,    # beacon 2
        60,    # beacon 3
        30,    # beacon 4
    ])
}
env = Environment(config=config)

position_generator = around_beacons(env)

for i in range(40):
    PSOParticle(
        environment=env,
        id="P{}".format(i),
        current=Information(position=next(position_generator)),
        velocity=random_generator.random(),
        vmax=5
    )

logging.basicConfig(filename='logs/find_point_2.log',
                    level=logging.DEBUG)

engine = ParticleEngine(
    config={
        'max_iterations': 100
    },
    environment=env
)
engine.start()
engine.join()