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()
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 ))
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()
[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()
'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
'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()