一个用于帮助实现kurobako的求解器和问题的Python库
项目描述
kurobako-py
A Python library to help implement kurobako's solvers and problems.
安装
$ pip install kurobako
使用示例
基于随机搜索定义求解器
# filename: random_solver.py
import numpy as np
from kurobako import problem
from kurobako import solver
class RandomSolverFactory(solver.SolverFactory):
def specification(self):
return solver.SolverSpec(name='Random Search')
def create_solver(self, seed, problem):
return RandomSolver(seed, problem)
class RandomSolver(solver.Solver):
def __init__(self, seed, problem):
self._rng = np.random.RandomState(seed)
self._problem = problem
def ask(self, idg):
params = []
for p in self._problem.params:
if p.distribution == problem.Distribution.UNIFORM:
params.append(self._rng.uniform(p.range.low, p.range.high))
else:
low = np.log(p.range.low)
high = np.log(p.range.high)
params.append(float(np.exp(self._rng.uniform(low, high))))
trial_id = idg.generate()
next_step = self._problem.last_step
return solver.NextTrial(trial_id, params, next_step)
def tell(self, trial):
pass
if __name__ == '__main__':
runner = solver.SolverRunner(RandomSolverFactory())
runner.run()
定义一个表示二次函数 x**2 + y
的问题
# filename: quadratic_problem.py
from kurobako import problem
class QuadraticProblemFactory(problem.ProblemFactory):
def specification(self):
params = [
problem.Var('x', problem.ContinuousRange(-10, 10)),
problem.Var('y', problem.DiscreteRange(-3, 3))
]
return problem.ProblemSpec(name='Quadratic Function',
params=params,
values=[problem.Var('x**2 + y')])
def create_problem(self, seed):
return QuadraticProblem()
class QuadraticProblem(problem.Problem):
def create_evaluator(self, params):
return QuadraticEvaluator(params)
class QuadraticEvaluator(problem.Evaluator):
def __init__(self, params):
self._x, self._y = params
self._current_step = 0
def current_step(self):
return self._current_step
def evaluate(self, next_step):
self._current_step = 1
return [self._x**2 + self._y]
if __name__ == '__main__':
runner = problem.ProblemRunner(QuadraticProblemFactory())
runner.run()
运行使用上述求解器和问题的基准测试
$ SOLVER=$(kurobako solver command python3 random_solver.py)
$ PROBLEM=$(kurobako problem command python3 quadratic_problem.py)
$ kurobako studies --solvers $SOLVER --problems $PROBLEM | kurobako run > result.json
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
kurobako-0.2.1.tar.gz (9.9 kB 查看散列)
构建分发
kurobako-0.2.1-py3-none-any.whl (10.2 kB 查看散列)
关闭
kurobako-0.2.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | d153a8fc7a7f1a4b4a8e077dbd6dc9fa8a706d3600b8abb69c7af532cc36ab4c |
|
MD5 | 7dbb7a732336e498518d03e23622e123 |
|
BLAKE2b-256 | f918c31ff1d69992c080338483e0ccf117f95053d3462aa4b0062c8adc873d69 |
关闭
kurobako-0.2.1-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 24f4b340a13913bd7e4b9f31e4767bfd9301e5d2805b855fa673ad5a1c196195 |
|
MD5 | aab9a13683ff9b45591ae4ad1fd37604 |
|
BLAKE2b-256 | c14d37140322e5a7f71e0a87e4f2dc24af4a7f3a0caaa44fa238c31c3a851f7d |