Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
seedg = create_seed_generator(seed)
names = ["sphere"]
optims = sorted(x for x, y in ng.optimizers.registry.items() if y.one_shot and "arg" not in x and "mal" not in x)
functions = [
ArtificialFunction(name, block_dimension=bd, num_blocks=n_blocks, useless_variables=bd * uv_factor * n_blocks)
for name in names
for bd in [1, 4, 20]
for uv_factor in [0, 10, 100]
for n_blocks in [1]
]
# functions are not initialized and duplicated at yield time, they will be initialized in the experiment
for func in functions:
for optim in optims:
for budget in [30, 100, 3000]:
# duplicate -> each Experiment has different randomness
yield Experiment(func.duplicate(), optim, budget=budget, num_workers=1, seed=next(seedg))
def oneshot2(seed: Optional[int] = None) -> Iterator[Experiment]:
# Experiment comparing one-shot optimizers in the context of useless vars vs critical vars.
seedg = create_seed_generator(seed)
names = ["sphere", "altcigar", "cigar", "ellipsoid", "rosenbrock", "rastrigin", "altellipsoid"]
optims = sorted(x for x, y in optimization.registry.items() if y.one_shot and "arg" not in x and "mal" not in x)
functions = [ArtificialFunction(name, block_dimension=2, num_blocks=1, useless_variables=20) for name in names]
# functions are not initialized and duplicated at yield time, they will be initialized in the experiment
for func in functions:
for optim in optims:
for budget in [30, 60, 100]:
# duplicate -> each Experiment has different randomness
yield Experiment(func.duplicate(), optim, budget=budget, num_workers=1, seed=next(seedg))
x for x, y in ng.optimizers.registry.items() if ("SPSA" in x or "TBPSA" in x or "ois" in x or "epea" in x or "Random" in x)
)
for budget in [50000]:
for optim in optims:
for d in [2, 20, 200]:
for name in ["sphere", "rosenbrock"]:
for noise_dissymmetry in [False, True]:
function = ArtificialFunction(
name=name,
rotation=True,
block_dimension=d,
noise_level=10,
noise_dissymmetry=noise_dissymmetry,
translation_factor=1.0,
)
yield Experiment(function, optim, budget=budget, seed=next(seedg))
# prepare list of parameters to sweep for independent variables
seedg = create_seed_generator(seed)
names = ["deceptivemultimodal", "deceptiveillcond", "deceptivepath"]
optims = ["NGO", "PSO", "MiniQrDE", "MiniLhsDE", "MiniDE", "CMA", "QrDE", "DE", "LhsDE"]
functions = [
ArtificialFunction(name, block_dimension=2, num_blocks=n_blocks, rotation=rotation, aggregator=aggregator)
for name in names
for rotation in [False, True]
for n_blocks in [1, 2, 8, 16]
for aggregator in ["sum", "max"]
]
# functions are not initialized and duplicated at yield time, they will be initialized in the experiment (no need to seed here)
for func in functions:
for optim in optims:
for budget in [25, 37, 50, 75, 87] + list(range(100, 3001, 100)):
yield Experiment(func.duplicate(), optim, budget=budget, num_workers=1, seed=next(seedg))
funcs += [_mlda.Perceptron.from_mlda(name) for name in ["quadratic", "sine", "abs", "heaviside"]]
funcs += [_mlda.Landscape(transform) for transform in [None, "square", "gaussian"]]
seedg = create_seed_generator(seed)
algos = ["NaiveTBPSA", "ScrHammersleySearch", "PSO", "OnePlusOne", "NGO", "CMA", "OnePointDE", "TwoPointsDE", "QrDE", "LhsDE",
"Zero", "PortfolioDiscreteOnePlusOne", "CauchyOnePlusOne", "RandomSearch", "RandomSearchPlusMiddlePoint",
"HaltonSearchPlusMiddlePoint", "MiniQrDE", "HaltonSearch", "RandomScaleRandomSearch", "MiniDE", "DiscreteOnePlusOne",
"ScrHaltonSearch", "ScrHammersleySearchPlusMiddlePoint", "HaltonSearch", "MilliCMA", "MicroCMA"]
# pylint: disable=too-many-nested-blocks
algos += ["Portfolio", "ASCMADEthird", "ASCMADEQRthird", "ASCMA2PDEthird", "CMandAS2", "CMandAS",
"CM", "MultiCMA", "TripleCMA", "MultiScaleCMA"]
for budget in [9600, 12800, 25600]: # , 51200]:#, 102400]:
for num_workers in [10, 100, 1000]: # [1, 10, 100]:
for algo in algos:
for func in funcs:
if num_workers < budget:
xp = Experiment(func, algo, budget, num_workers=num_workers, seed=next(seedg))
if not xp.is_incoherent:
yield xp
def dim10_select_one_feature(seed: Optional[int] = None) -> Iterator[Experiment]: # One and only one variable matters - LHS wins.
# prepare list of parameters to sweep for independent variables
seedg = create_seed_generator(seed)
names = ["sphere"]
optims = sorted(x for x, y in optimization.registry.items() if y.one_shot and "arg" not in x and "mal" not in x)
functions = [ArtificialFunction(name, block_dimension=bd, num_blocks=n_blocks, useless_variables=bd * uv_factor * n_blocks)
for name in names for bd in [1] for uv_factor in [10] for n_blocks in [1]]
# functions are not initialized and duplicated at yield time, they will be initialized in the experiment (no need to seed here)
for func in functions:
for optim in optims:
for budget in [8, 10, 12, 14, 16, 18, 20]:
# duplicate -> each Experiment has different randomness
yield Experiment(func.duplicate(), optim, budget=budget, num_workers=1, seed=next(seedg))
def small_discrete(seed: Optional[int] = None) -> Iterator[Experiment]:
# prepare list of parameters to sweep for independent variables
seedg = create_seed_generator(seed)
names = ["hardonemax5", "hardjump5", "hardleadingones5"]
optims = sorted(x for x, y in optimization.registry.items() if "iscrete" in x and "epea" not in x and "DE" not in x
and "SSNEA" not in x)
functions = [ArtificialFunction(name, block_dimension=bd, num_blocks=n_blocks, useless_variables=bd * uv_factor * n_blocks)
for name in names for bd in [30] for uv_factor in [5, 10] for n_blocks in [1]]
# functions are not initialized and duplicated at yield time, they will be initialized in the experiment (no need to seed here)
for func in functions:
for optim in optims:
for budget in [100, 400, 700, 1000, 1300, 1600, 1900, 2200, 2500, 2800, 3000]: # , 10000]:
yield Experiment(func.duplicate(), optim, budget=budget, num_workers=1, seed=next(seedg))
def oneshotcec(seed: Optional[int] = None) -> Iterator[Experiment]:
seedg = create_seed_generator(seed)
names = ["sphere", "rastrigin", "cigar"]
optims = sorted(x for x, y in optimization.registry.items() if y.one_shot and
not any(z in x for z in ["Large", "Small", "Stupid", "Zero"]))
optims.append("CustomOptimizer")
functions = [ArtificialFunction(name, block_dimension=bd, useless_variables=bd * uv_factor)
for name in names for bd in [3, 25] for uv_factor in [0, 5]]
for func in functions:
for optim in optims:
for budget in [30, 100, 300, 1000, 3000]:
yield Experiment(func.duplicate(), optim, budget=budget, num_workers=budget, seed=next(seedg))
agent_mono = rl.agents.TorchAgent.from_module_maker(base_env, rl.agents.Perceptron, deterministic=False)
env = base_env.with_agent(player_0=random_agent).as_single_agent()
runner = rl.EnvironmentRunner(env.copy(), num_repetitions=100, max_step=50)
for archi in ["mono", "multi"]:
agent = agent_mono if archi == "mono" else agent_multi
func = rl.agents.TorchAgentFunction(agent.copy(), runner, reward_postprocessing=lambda x: 1 - x)
func._descriptors.update(archi=archi)
funcs += [func]
seedg = create_seed_generator(seed)
algos = sorted(x for x, y in ng.optimizers.registry.items() if y.one_shot)
for budget in [25, 50, 100, 200, 400, 800, 1600, 3200, 6400, 12800]:
for num_workers in [budget]:
for algo in algos:
for fu in funcs:
xp = Experiment(fu, algo, budget, num_workers=num_workers, seed=next(seedg))
if not xp.is_incoherent:
yield xp
def noise(seed: Optional[int] = None) -> Iterator[Experiment]:
"""All optimizers on ill cond problems
"""
seedg = create_seed_generator(seed)
optims = sorted(x for x, y in optimization.registry.items()
if ("TBPSA" in x or "ois" in x or "CMA" in x or "epea" in x) and "iscr" not in x)
for budget in [500, 1000, 2000, 4000, 8000, 16000, 32000, 64000, 128000]:
for optim in optims:
for rotation in [True, False]:
for name in ["sphere", "cigar", "sphere4"]:
function = ArtificialFunction(name=name, rotation=rotation, block_dimension=20, noise_level=10)
yield Experiment(function, optim, budget=budget, seed=next(seedg))