A Python library to help implementing kurobako's solvers and problems
Project description
kurobako-py
A Python library to help implement kurobako's solvers and problems.
Installation
$ pip install kurobako
Usage Examples
Define a solver based on random search
# 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()
Define a problem that represents a quadratic function 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()
Run a benchmark that uses the above solver and problem
$ 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
kurobako-0.1.11.tar.gz
(10.2 kB
view details)
Built Distribution
kurobako-0.1.11-py3-none-any.whl
(12.2 kB
view details)
File details
Details for the file kurobako-0.1.11.tar.gz
.
File metadata
- Download URL: kurobako-0.1.11.tar.gz
- Upload date:
- Size: 10.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0fe9bb7af2d2971c4edddcdd2accf7ef091bf2fea1f65639869491860b7746a |
|
MD5 | ee3285deb3fba3ecda7b8de4f8ba1cbb |
|
BLAKE2b-256 | fc7e58d8ca6c8dacc35654bd49d51f6001cd2cc98fd6ea7996753e797a4c90a7 |
File details
Details for the file kurobako-0.1.11-py3-none-any.whl
.
File metadata
- Download URL: kurobako-0.1.11-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d6dfd826f7102c8d892d4157ab9c24697b2efaa63cbe21e11d8105a9d1b0ca4 |
|
MD5 | 845b51e3fc334e70852453d6874c39a8 |
|
BLAKE2b-256 | 84a96fdb00951165cafa6c5790a5329c73b0b479a1f473d9b2add202de623443 |