def __init__(self): # パラメータ n_dim = 10 pop_size = 200 epoch = 200 imax = 100 # 対象デブリ数 # 問題 problem = Problem(n_dim) initializer = Initializer(n_dim, imax) # selection = TournamentSelection(ksize=2) selection = TournamentSelectionStrict(ksize=2) # selection = TournamentSelectionDCD() # crossover = BlendCrossover(alpha=0.5) crossover = Crossover(ix=OrderCrossover(rate=0.9), dx=SimulatedBinaryCrossover(rate=0.9, eta=20)) mutation = Mutation(im=SwapMutation(rate=0.1), dm=PolynomialMutation(rate=0.1, eta=20)) optimizer = NSGA2(pop_size, selection, crossover, mutation) optimizer.setup(problem) ### Additional setting ### Genome.set_weight([10, 3600] * n_dim) Individual.set_weight([1, -1]) optimizer.initializer = initializer optimizer.n_cycle = pop_size // 2 # optimizer.alternation = 'replace' ########################## self.optimizer = optimizer
def __init__(self, popsize=100, ksize=5): # パラメータ n_dim = 10 # popsize = 200 # epoch = 100 imax = 100 # 対象デブリ数 # ksize = 5 # 問題 problem = Problem(n_dim) with Environment() as env: # 個体クラス indiv_type = Individual # 初期個体生成クラス indiv_pool = env.register(indiv_type) # 遺伝子生成クラス initializer = Initializer(n_dim, imax) # GAオペレータ指定 # selection = TournamentSelection(ksize=2) selection = TournamentSelectionStrict(ksize=2) # selection = TournamentSelectionDCD() # crossover = BlendCrossover(alpha=0.5) crossover = Crossover(ix=OrderCrossover(rate=0.9), dx=SimulatedBinaryCrossover(rate=0.9, eta=20)) mutation = Mutation(im=SwapMutation(rate=0.1), dm=PolynomialMutation(rate=0.1, eta=20)) ga_ops = { 'selection': selection, 'crossover': crossover, 'mutation': mutation } # optimizer = NSGA2(problem=problem, pool=indiv_pool, **ga_ops) optimizer = MOEAD(problem=problem, pool=indiv_pool, ksize=5, **ga_ops) ### Additional setting ### Genome.set_weight([1, 3600] * n_dim) Individual.set_weight([1, -1]) # optimizer.initializer = initializer optimizer.n_cycle = popsize // 2 optimizer.alternation = 'all' ########################## # 個体生成器 creator = Creator(initializer, indiv_pool) # 登録 env.optimizer = optimizer env.creator = creator self.env = env
def __init__(self, problem): # パラメータ n_dim = 30 pop_size = 100 ksize = 5 # MOEA/D近傍サイズ # epoch = 250 # save_trigger = lambda i: i == 1 or i % 10 == 0 # 10 epochごと # save_trigger = lambda i: i == epoch # 最後だけ if problem == zdt4 or problem == zdt6: n_dim = 10 if problem == zdt4: Individual.set_bounds([0.0] + [-5.0] * (n_dim - 1), [1.0] + [5.0] * (n_dim - 1)) # Individual.set_bounds([0], [1]) # Individual.set_weight([1, 1]) # 問題 # problem = zdt4 initializer = UniformInitializer(n_dim) selection = RandomSelection() # selection = TournamentSelection(ksize=2) # selection = TournamentSelectionStrict(ksize=2) # selection = TournamentSelectionDCD() # crossover = BlendCrossover(alpha=0.5) crossover = SimulatedBinaryCrossover(rate=0.9, eta=20) mutation = PolynomialMutation(rate=1/n_dim, eta=20) optimizer = MOEAD(pop_size, selection, crossover, mutation, ksize) # optimizer.set_initializer(Initializer(3)) optimizer.setup(problem) ### Additional setting ### optimizer.initializer = initializer optimizer.n_cycle = None optimizer.alternation = 'all' ########################## self.optimizer = optimizer
def __init__(self, method, popsize=100, **kwargs): method = method.lower() if 'nsga' in method: opt_cls = NSGA2 ga_ops = {} elif 'moea' in method: opt_cls = MOEAD if kwargs['ksize']: ksize = kwargs['ksize'] else: ksize = 5 ga_ops = {'ksize': ksize} else: print('Unknown method name:', method) raise RuntimeError # 設計変数の次元数 n_dim = 3 # 設計範囲 low_bounds = [0, 0, 0] upp_bounds = [1, 1, 1] # 最適化重み(正=>最小化, 負=>最大化) opt_weight = [1, 1] # 問題関数 # problem = Problem() problem = get_obj_func() with Environment() as env: # 個体クラス indiv_pool = env.register(Individual) # 遺伝子初期化クラス initializer = UniformInitializer(n_dim) # GAオペレータ指定 ga_ops = { 'selection': TournamentSelection(ksize=2), 'crossover': SimulatedBinaryCrossover(rate=0.9, eta=20), 'mutation': PolynomialMutation(rate=0.1, eta=20), **ga_ops } # GAクラス optimizer = opt_cls(problem=problem, pool=indiv_pool, **ga_ops) ### Additional setting ### # 設計範囲設定 indiv_pool.cls.set_bounds(low_bounds, upp_bounds) # (下限,上限) # 最適化重み付け(正=>最小化, 負=>最大化) indiv_pool.cls.set_weight(opt_weight) # 親個体選択時の初期化周期 optimizer.n_cycle = popsize // 2 ########################## # 個体生成器 creator = Creator(initializer, indiv_pool) # 登録 env.optimizer = optimizer env.creator = creator self.env = env