- Dependencies
- Add [pandas](https://pandas.pydata.org) (See `requirements.txt`)
- Template
- Update `fitness.py`
- Create `OptimizationProblem`
- Add `bounds` for external optimizer
- Update `viz.py`
- Add `figsize` (default: (4, 3)) to timecourse_options and multiplot_options
- `biomass.result`
- Move visualization of estimated parameter sets to biomass.OptimizationResults.savefig()
python
>>> from biomass import Model, OptimizationResults
>>> from biomass.models import Nakakuki_Cell_2010
>>> model = Model(Nakakuki_Cell_2010.__package__).create()
>>> res = OptimizationResults(model)
>>> res.savefig(figsize=(16,5), boxplot_kws={"orient": "v"})

- `biomass.estimation`
- Create new class: `ExternalOptimizer`
python
>>> from scipy.optimize import differential_evolution
>>> from biomass import Model
>>> from biomass.models import Nakakuki_Cell_2010
>>> model = Model(Nakakuki_Cell_2010.__package__).create()
>>> optimizer = ExternalOptimizer(model, differential_evolution)
>>> res = optimizer.run(
... model.problem.objective,
... model.problem.bounds,
... strategy="best2bin",
... maxiter=100,
... tol=1e-4,
... mutation=0.1,
... recombination=0.5,
... disp=True,
... polish=False,
... workers=-1,
... )
> differential_evolution step 1: f(x)= 7.05589
> differential_evolution step 2: f(x)= 5.59166
> differential_evolution step 3: f(x)= 2.80301
> ...
> differential_evolution step 100: f(x)= 0.538524
python
>>> from biomass import run_simulation
>>> optimizer.import_solution(res.x, x_id=0)
>>> run_simulation(model, viz_type="0")