def mutate(ind): os = ind.ordering ordering_default_mutate({'env': Env(wf=_wf, rm=rm, estimator=estimator)}, os) child = ParticleIndividual(ind.entity) child.ordering = os return child,
def run_dcga(wf, estimator, rm, heft_mapping, heft_ordering, **params): cxpb = params["cxpb"] #0.9 mutpb = params["mutpb"] #0.9 ngen = params["ngen"] #100 pop_size = params["pop_size"] #100 ctx = {'env': Env(wf, rm, estimator)} toolbox = Toolbox() toolbox.register("select", tools.selTournament, tournsize=2) toolbox.register("mate", _mate, ctx) toolbox.register("mutate", _mutate, ctx) toolbox.register( "evaluate", lambda x: [ fitness_mapping_and_ordering(ctx, { MAPPING_SPECIE: x[0], ORDERING_SPECIE: x[1] }) ]) # heft_mapping = extract_mapping_from_ga_file("../../temp/heft_etalon_full_tr100_m100.json", rm) pop_mapping = mapping_heft_based_initialize(ctx, pop_size, heft_mapping, 3) pop_ordering = ordering_heft_based_initialize(ctx, pop_size, heft_ordering, 3) pop = [ListBasedIndividual(el) for el in zip(pop_mapping, pop_ordering)] for p in pop: p.fitness = Fitness(0) stat = tools.Statistics(key=lambda x: x.fitness) stat.register("solsstat", lambda pop: [{"best": numpy.max(pop).values[0]}]) final_pop, logbook = deap.algorithms.eaSimple(pop, toolbox, cxpb, mutpb, ngen, stat) best = max(final_pop, key=lambda x: x.fitness) return best.fitness.values[0], logbook
def default_config(wf, rm, estimator): selector = lambda env, pop: tools.selTournament(pop, len(pop), 4) return { "interact_individuals_count": 22, "generations": 5, "env": Env(wf, rm, estimator), "species": [ Specie(name=MAPPING_SPECIE, pop_size=10, cxb=0.8, mb=0.5, mate=lambda env, child1, child2: tools.cxOnePoint( child1, child2), mutate=mapping_default_mutate, select=selector, initialize=mapping_default_initialize), Specie( name=ORDERING_SPECIE, pop_size=10, cxb=0.8, mb=0.5, mate=ordering_default_crossover, mutate=ordering_default_mutate, select=selector, initialize=ordering_default_initialize, ) ], "operators": { # "choose": default_choose, "build_solutions": default_build_solutions, "fitness": fitness_mapping_and_ordering, "assign_credits": default_assign_credits } }
def setUp(self): wf_name = "Montage_25" self.wf = WF(wf_name) self.env = Env(self.wf, None, None)
ms_ideal_ind = heft_mapping os_ideal_ind = heft_ordering ms_str_repr = [{k: v} for k, v in ms_ideal_ind] mapping_mut_reg = MutRegulator() config = { "hall_of_fame_size": 0, "interact_individuals_count": 50, "generations": 10, "env": Env(_wf, rm, estimator), "species": [ Specie( name=MAPPING_SPECIE, pop_size=50, cxb=0.9, mb=0.9, mate=lambda env, child1, child2: tools.cxOnePoint(child1, child2), # mutate=mapping_all_mutate, # mutate=mapping_all_mutate_variable, mutate=mapping_mut_reg(mapping_all_mutate_configurable), # mutate=mapping_all_mutate_variable2, # mutate=mapping_improving_mutation, # mutate=mapping_default_mutate, # mutate=MappingArchiveMutate(), select=mapping_selector,
from heft.core.environment import ResourceGenerator as rg from heft.core.environment.Utility import wf from heft.experiments.cga.mobjective.utility import fitness_makespan_and_cost_map_ord, SimpleTimeCostEstimator from heft.experiments.cga.utilities.common import extract_ordering_from_ga_file, extract_mapping_from_ga_file from heft.experiments.cga.utilities.double_chromosome_ga import _mate, _mutate _wf = wf("Montage_100") # rm = ExperimentResourceManager(VMResGen.r([10, 15, 25, 30], 4)) rm = ExperimentResourceManager(rg.r([10, 15, 25, 30])) # estimator = ExperimentEstimator(None, ideal_flops=20, transfer_time=100) estimator = SimpleTimeCostEstimator(comp_time_cost=10, transf_time_cost=2, transferMx=None, ideal_flops=20, transfer_time=100) env = Env(_wf, rm, estimator) pop_size = 200 NGEN = 300 MU = 40 CXPB = 0.9 heft_mapping = extract_mapping_from_ga_file( "../../../temp/heft_etalon_full_tr100_m100.json", rm) heft_ordering = extract_ordering_from_ga_file( "../../../temp/heft_etalon_full_tr100_m100.json") creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0)) creator.create("Individual", ListBasedIndividual, typecode='d',
# heft_mapping = extract_mapping_from_ga_file("../../temp/heft_etalon_full_tr100_m25.json", rm) # heft_ordering = extract_ordering_from_ga_file("../../temp/heft_etalon_full_tr100_m25.json") ms_ideal_ind = heft_mapping os_ideal_ind = heft_ordering ms_str_repr = [{k: v} for k, v in ms_ideal_ind] mapping_mut_reg = MutRegulator() config = { "hall_of_fame_size": 0, "interact_individuals_count": 50, "generations": 100, "env": Env(_wf, rm, estimator), "species": [Specie(name=MAPPING_SPECIE, pop_size=50, cxb=0.9, mb=0.9, mate=lambda env, child1, child2: tools.cxOnePoint(child1, child2), mutate=mapping_all_mutate, # mutate=mapping_all_mutate_variable, # mutate=mapping_mut_reg(mapping_all_mutate_configurable), # mutate=mapping_all_mutate_variable2, # mutate=mapping_improving_mutation, # mutate=mapping_default_mutate, # mutate=MappingArchiveMutate(), select=mapping_selector, # initialize=mapping_default_initialize, initialize=lambda ctx, pop: mapping_heft_based_initialize(ctx, pop, heft_mapping, 3), stat=lambda pop: {"hamming_distances": hamming_distances([to_seq(p) for p in pop], to_seq(ms_ideal_ind)), "unique_inds_count": unique_individuals(pop),
def do_exp(): config = { "interact_individuals_count": 100, "generations": 300, "env": Env(_wf, rm, estimator), "species": [ Specie( name=MAPPING_SPECIE, pop_size=50, cxb=0.9, mb=0.9, mate=lambda env, child1, child2: tools.cxOnePoint( child1, child2), # mutate=mapping_default_mutate, # mutate=lambda ctx, mutant: mapping_k_mutate(ctx, 3, mutant) mutate=mapping_all_mutate, # mutate=OnlyUniqueMutant()(mapping_all_mutate), select=selector, # initialize=mapping_default_initialize, initialize=lambda ctx, pop: mapping_heft_based_initialize( ctx, pop, heft_mapping, 3), stat=lambda pop: { "hamming_distances": hamming_distances([to_seq(p) for p in pop], to_seq(ms_ideal_ind)), "unique_inds_count": unique_individuals(pop), "pcm": pcm(pop), "gdm": gdm(pop) }), Specie(name=ORDERING_SPECIE, fixed=True, representative_individual=ListBasedIndividual( os_representative)) ], "solstat": lambda sols: { "best_components": hamming_for_best_components(sols, ms_ideal_ind, os_ideal_ind), "best_components_itself": best_components_itself(sols), "best": -1 * Utility.makespan( build_schedule(_wf, estimator, rm, max(sols, key=lambda x: x.fitness))) }, "operators": { # "choose": default_choose, "build_solutions": default_build_solutions, "fitness": fitness_mapping_and_ordering, # "fitness": overhead_fitness_mapping_and_ordering, # "assign_credits": default_assign_credits # "assign_credits": max_assign_credits "assign_credits": assign_from_transfer_overhead } } return do_experiment(saver, config, _wf, rm, estimator)