def test_bidir_chain(): ''' Tests the migration on a one way chain. ''' from sabaody.topology import TopologyFactory def make_problem(): import pygmo as pg return pg.problem(pg.rosenbrock(3)) def make_algorithm(): return pg.de(gen=10) domain_qual = partial(getQualifiedName, 'com.how2cell.sabaody.test_bidir_chain_migration') topology_factory = TopologyFactory(make_problem, domain_qual, 'localhost', 11211) topology = topology_factory.createBidirChain(make_algorithm, 5) assert len(topology.island_ids) == 5 assert len(topology.endpoints) == 2 from sabaody.migration_central import CentralMigrator, start_migration_service from sabaody.migration import BestSPolicy, FairRPolicy, sort_by_fitness import pygmo as pg try: process = start_migration_service() sleep(2) migrator = CentralMigrator('http://localhost:10100', BestSPolicy(migration_rate=1), FairRPolicy()) from collections import OrderedDict for k in (1, 2): islands = OrderedDict((i.id, pg.island(algo=i.algorithm_constructor(), prob=i.problem_constructor(), size=i.size)) for i in topology.islands) for island_id in islands.keys(): migrator.defineMigrantPool(island_id, 3) if k == 1: # test forward migration seed_first(islands, topology) else: # test reverse migration seed_last(islands, topology) for n in range(1, 5 + 1): assert count_hits(islands.values()) == n # perform migration for island_id, i in islands.items(): migrator.sendMigrants(island_id, i, topology) for island_id, i in islands.items(): deltas, src_ids = migrator.receiveMigrants( island_id, i, topology) migrator.purgeAll() finally: process.terminate()
def run_island(island, topology): import pygmo as pg from multiprocessing import cpu_count from pymemcache.client.base import Client from sabaody.migration import BestSPolicy, FairRPolicy from sabaody.migration_central import CentralMigrator mc_client = Client((island.mc_host, island.mc_port)) migrator = CentralMigrator('http://luna:10100') algorithm = pg.de(gen=10) problem = island.problem_constructor() # TODO: configure pop size i = pg.island(algo=algorithm, prob=problem, size=20) mc_client.set(island.domain_qualifier('island', str(island.id), 'status'), 'Running', 10000) mc_client.set(island.domain_qualifier('island', str(island.id), 'n_cores'), str(cpu_count()), 10000) rounds = 10 migration_log = [] for x in range(rounds): i.evolve() i.wait() # perform migration migrator.sendMigrants(island.id, i, topology) deltas, src_ids = migrator.receiveMigrants(island.id, i, topology) """ For Kafka Migration Enable below """ #migrator.send_migrants(island.id,i,topology,generation=x) #deltas,src_ids = migrator.receive_migrants(island.id,i,topology,generation=x) migration_log.append((float(pop.champion_f[0]), deltas, src_ids)) import socket hostname = socket.gethostname() ip = [ l for l in ([ ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.") ][:1], [[(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)] ][0][1]]) if l ][0][0] return (ip, hostname, island.id, migration_log, i.get_population().problem.get_fevals())
def test_one_way_ring_migration(): ''' Tests the migration on a one way ring. ''' from sabaody.topology import TopologyFactory def make_problem(): import pygmo as pg return pg.problem(pg.rosenbrock(3)) def make_algorithm(): return pg.de(gen=10) domain_qual = partial(getQualifiedName, 'com.how2cell.sabaody.test_one_way_ring_migration') topology_factory = TopologyFactory(make_problem, domain_qual, 'localhost', 11211) topology = topology_factory.createOneWayRing(make_algorithm, 5) assert len(topology.island_ids) == 5 from sabaody.migration_central import CentralMigrator, start_migration_service from sabaody.migration import BestSPolicy, FairRPolicy, sort_by_fitness import pygmo as pg try: process = start_migration_service() sleep(2) migrator = CentralMigrator('http://localhost:10100', BestSPolicy(migration_rate=1), FairRPolicy()) from collections import OrderedDict islands = OrderedDict((i.id, pg.island(algo=i.algorithm_constructor(), prob=i.problem_constructor(), size=i.size)) for i in topology.islands) for island_id in islands.keys(): migrator.defineMigrantPool(island_id, 3) # seed solution in one island seed_first(islands, topology) assert count_hits(islands.values()) == 1 for n in range(1, 5 + 1): assert count_hits(islands.values()) == n # perform migration for island_id, i in islands.items(): migrator.sendMigrants(island_id, i, topology) for island_id, i in islands.items(): deltas, src_ids = migrator.receiveMigrants( island_id, i, topology) assert n == 5 # reset & differentiate from chain islands = OrderedDict((i.id, pg.island(algo=i.algorithm_constructor(), prob=i.problem_constructor(), size=i.size)) for i in topology.islands) seed_predecessor(islands, topology) # perform migration for island_id, i in islands.items(): migrator.sendMigrants(island_id, i, topology) for island_id, i in islands.items(): deltas, src_ids = migrator.receiveMigrants(island_id, i, topology) assert tuple(islands.values())[0].get_population().champion_f[0] == 0. assert count_hits(islands.values()) == 2 finally: process.terminate()