模型仿真框架
Carousel的Python项目详细描述
旋转木马-模型模拟框架
carousel ia一个用于模拟数学模型的框架 模型的仿真实现。它负责煮饭 例程,例如将数据从不同的源加载到可以 用于任何计算,确定正确的计算顺序, 逐步进行动态模拟并生成输出报告和 可视化,这样你就可以专注于开发模型而不必 担心如何添加新模型或如何集成更改。
安装
旋转木马releases are on PyPI和 GitHub。你可以用任何一个 pip、conda或distutils来安装旋转木马。
$ pip install Carousel
提取存档文件以使用disutils
$ python setup.py install
$ conda install -c sunpower Carousel
文件
旋转木马documentation是 在线。它也包含在发行版中,可以使用 Sphinx通过运行Makefile 在carousel包的docs文件夹中找到。一次生成的文档 将在与类型对应的树下的_build文件夹中找到 建立的文件。eg:html文档位于docs/_build/html。
贡献
旋转木马source code是 在线。分头报告 issues,提出建议或 创建拉取请求。讨论路线图或下载 wiki
历史
那个 change log for all releases 在Github上。
快速启动示例
定义数据、输出、公式、计算、模拟和模型:
#! python from carousel.core.data_sources import DataSource, DataParameter from carousel.core.outputs import Output, OutputParameter from carousel.core.formulas import Formula, FormulaParameter from carousel.core.calculations import Calc, CalcParameter from carousel.core.simulations import Simulation, SimParameter from carousel.core.models import Model, ModelParameter from carousel.contrib.readers import ArgumentReader from carousel.core import UREG import numpy as np import os DATA = {'PythagoreanData': {'adjacent_side': 3.0, 'opposite_side': 4.0}} class PythagoreanData(DataSource): adjacent_side = DataParameter(units='cm', uncertainty=1.0) opposite_side = DataParameter(units='cm', uncertainty=1.0) def __prepare_data__(self): for k, v in self.parameters.iteritems(): self.uncertainty[k] = {k: v['uncertainty'] * UREG.percent} class Meta: data_cache_enabled = False data_reader = ArgumentReader class PythagoreanOutput(Output): hypotenuse = OutputParameter(units='cm') def f_pythagorean(a, b): a, b = np.atleast_1d(a), np.atleast_1d(b) return np.sqrt(a * a + b * b).reshape(1, -1) class PythagoreanFormula(Formula): f_pythagorean = FormulaParameter( units=[('=A', ), ('=A', '=A')], isconstant=[] ) class Meta: module = __name__ class PythagoreanCalc(Calc): pythagorean_thm = CalcParameter( formula='f_pythagorean', args={'data': {'a': 'adjacent_side', 'b': 'opposite_side'}}, returns=['hypotenuse'] ) class PythagoreanSim(Simulation): settings = SimParameter( ID='Pythagorean Theorem', commands=['start', 'load', 'run'], sim_length=[0, 'hour'], write_fields={ 'data': ['adjacent_side', 'opposite_side'], 'outputs': ['hypotenuse'] } ) class PythagoreanModel(Model): data = ModelParameter(sources=[PythagoreanData]) outputs = ModelParameter(sources=[PythagoreanOutput]) formulas = ModelParameter(sources=[PythagoreanFormula]) calculations = ModelParameter(sources=[PythagoreanCalc]) simulations = ModelParameter(sources=[PythagoreanSim]) class Meta: modelpath = os.path.dirname(__file__) if __name__ == '__main__': m = PythagoreanModel() m.command('run', data=DATA) out_reg = m.registries['outputs'] fmt = { 'output': out_reg['hypotenuse'], 'uncertainty': out_reg.uncertainty['hypotenuse']['hypotenuse'] } print 'hypotenuse = %(output)s +/- %(uncertainty)s' % fmt
这是旋转木马模型的MCVE。