*fuefit*根据物理参数调整引擎图
项目描述
- 版本::
x.x.x
- 文档::
- 源代码::
- PyPI仓库::
- 关键词::
汽车工业, 汽车, 汽车, 消耗, 发动机, 发动机图, 调整, 汽油, 车辆, 车辆
- 版权::
2014 欧洲委员会 (JRC-IET)
- 许可证::
Fuefit 是一个python包,它根据具有物理意义的系数从测量的发动机数据点计算出调整后的燃料图。
简介
概述
Fuefit计算器是为了对测量的发动机燃油消耗数据(发动机图谱)进行统计分析而开发的。这可以将描述发动机燃油图谱所需的信息量从几百个点减少到七个统计计算参数,而信息损失有限。
更具体地说,这个软件的工作原理如下
接受发动机数据作为输入,由转速、功率和燃油消耗或等效数量(例如平均活塞速度(CM)、制动平均有效压力(BMEP)或扭矩、燃油平均有效压力(PMF))的三元组组成。
\begin{equation*} \mathbf{BMEP} = (a + b\times{\mathbf{CM}} + c\times{\mathbf{CM^2}})\times{\mathbf{PMF}} + (a2 + b2\times{\mathbf{CM}})\times{\mathbf{PMF^2}} + loss0 + loss2\times{\mathbf{CM^2}} \end{equation*}
根据描述拟合的系数重新计算并(可选)绘制发动机图谱
\begin{equation*} a, b, c, a2, b2, loss0, loss2 \end{equation*}
以下图示展示了计算的执行过程以及最重要的数据
.----------------------------. .-----------------------------. / Input-Model / / Output(Fitted)-Model / /----------------------------/ /-----------------------------/ / +--engine / / +--engine / / | +--... / / | +--fc_map_coeffs / / +--params / ____________ / +--measured_eng_points / / | +--... / | | / | n p fc bmep ... / / +--measured_eng_points /==>| Calculator |==>/ | ... ... ... ... / / n p fc / |____________| / +--fitted_eng_points / / -- ---- --- / / | n p fc / / 0 0.0 0 / / | ... ... ... / / 600 42.5 25 / / +--mesh_eng_points / / ... ... ... / / n p fc / / / / ... ... ... / '----------------------------' '-----------------------------'
除了在/engine下各种发动机特性以及如capacity和p_rated这样的表列之外,在/measured_eng_points下的表必须包含以下类别中至少一个的列(列标题不区分大小写)
发动机转速
N [1/min] N_norm [-] : where N_norm = (N – N_idle) / (N_rated-N_idle) CM [m/sec]
负载-功率-能力
P [kW] P_norm [-] : where P_norm = P/P_MAX T [Nm] BMEP [bar]
燃油消耗
FC [g/h] FC_norm [g/KWh] : where FC_norm = FC[g/h] / P_MAX [kW] PMF [bar]
上述的输入 & 拟合数据模型是由字符串和数字组成的树,通过
序列、
字典、
类(pandas.DataFrame)、
类(pandas.Series)组成的。
快速入门
该程序在Python-3.3+上运行,并要求安装numpy/scipy、pandas和win32库及其本机后端。
在Windows/OS X上,建议使用以下“科学”Python发行版,因为它们已经包含了本机库,并且可以在不需要管理员权限的情况下安装
假设您有一个有效的Python环境,打开一个命令提示符(在Windows中使用程序cmd.exe,但确保程序python.exe在其环境变量PATH中)并尝试以下控制台命令
- 安装::
$ pip install fuefit $ fuefit --winmenus ## Adds StartMenu-items, Windows only.
参见:doc(安装)
- 命令行::
$ fuefit --version 0.0.6 $ fuefit --help ... ## Change-directory into the `fuefit/test/` folder in the *sources*. $ fuefit -I FuelFit_real.csv header+=0 \ -I ./FuelFit.xlsx sheetname+=0 header@=None names:='["p","n","fc"]' \ -I ./engine.csv file_frmt=SERIES model_path=/engine header@=None \ -m /engine/fuel=petrol \ -m /params/plot_maps@=True \ -O full_results_model.json \ -O fit_coeffs.csv model_path=/engine/fc_map_coeffs index?=false \ -O t1.csv model_path=/measured_eng_points index?=false \ -O t2.csv model_path=/mesh_eng_points index?=false \
参见:命令行使用
- Excel::
$ fuefit --excelrun ## Windows & OS X only
参见:Excel使用
- Python代码::
代码块
>>> import pandas as pd >>> from fuefit import datamodel, processor, test >>> inp_model = datamodel.base_model() >>> inp_model.update({...}) ## See "Python Usage" below. # doctest: +SKIP >>> inp_model['engine_points'] = pd.read_csv('measured.csv') ## Pandas can read Excel, matlab, ... # doctest: +SKIP >>> datamodel.set_jsonpointer(inp_model, '/params/plot_maps', True) >>> datamodel.validade_model(inp_model, additional_properties=False) # doctest: +SKIP >>> out_model = processor.run(inp_model) # doctest: +SKIP >>> print(datamodel.resolve_jsonpointer(out_model, '/engine/fc_map_coeffs')) # doctest: +SKIP a 164.110667 b 7051.867419 c 63015.519469 a2 0.121139 b2 -493.301306 loss0 -1637.894603 loss2 -1047463.140758 dtype: float64
参见:Python使用
提示
上面开始的命令意味着需要一个类似于Unix的操作系统和POSIX shell(Linux、OS X)。尽管这些命令在Windows的对应版本中简单易用,但为了在Windows上获得相同的运行环境,建议安装Cygwin。如果选择这样做,请也在Cygwin的安装向导中包含以下软件包
* git, git-completion * make, zip, unzip, bzip2 * openssh, curl, wget
但不要安装或依赖过时的Cygwin Python环境。
安装
Fuefit-x.x.x在Python-3.3+上运行,并以Wheel的形式分发。
注意
此项目依赖于numpy/scipy、pandas和win32 Python包,它们本身需要使用C和Fortran编译器从源代码构建。为了避免这种麻烦,可以选择自封装的Python发行版,如Anaconda/mini-conda、Winpython或Canopy。
提示
在Windows下,您可以尝试自封装的Winpython发行版,这是一个高度活跃的项目,甚至可以使用可用的Visual Studio安装(例如,当使用pip命令升级numpy/scipy、pandas或matplotlib时)来编译本地库。
只需记住,在安装后注册您的Winpython安装并将其添加到环境变量PATH中(见文档faq)。
要注册,请转到开始菜单 --> 所有程序 --> Winpython --> Winpython控制面板,然后选择选项 --> 注册发行版。
对于路径,添加或修改注册表字符串键[HKEY_CURRENT_USER\Environment] "PATH"。
另一种科学Python环境是Anaconda跨平台发行版(Windows、Linux和OS X),或其更轻量级的替代品mini-conda。
在此环境中,您需要手动使用程序(conda)和程序(pip)命令的组合来安装此项目的依赖项。请参阅文件(requirements/miniconda.txt),并查看文件(.travis.yaml)中的示例脚本命令。
在pandas网站上检查有关各种Python环境和平台的替代安装说明。
见文档(install)了解更多详细信息
在安装之前,请确保没有遗留任何旧版本。因此,运行以下控制台命令(在Windows中使用程序(cmd.exe))直到找不到任何已安装的项目
$ pip uninstall fuefit ## Use `pip3` if both python-2 & 3 are in PATH.
您可以直接从PyPi仓库以“标准”方式安装该项目,通过在控制台中键入命令(pip)。
$ pip install fuefit
如果您想安装预发布版本(版本字符串不是纯数字,而是以alpha、beta.2或其他结尾),请使用附加选项(--pre)。
如果您想升级现有安装以及所有依赖项,请添加选项(--upgrade)(或等价的选项(-U)),但此时构建可能需要相当长的时间才能完成。此外,升级后的库可能会破坏现有的程序(!)因此请谨慎使用,或从virtualenv(隔离的Python环境)中运行。
要安装旧版本,请发出控制台命令
$ pip install fuefit=1.1.1 ## Use `--pre` if version-string has a build-suffix.
要为不同的Python环境安装它,请使用每个环境适当的程序(python.exe)解释器重复此过程。
提示
要调试安装问题,您可以导出一个非空环境变量(DISTUTILS_DEBUG)并且distutils会打印其正在进行的详细信息和/或在外部程序(如C编译器)失败时打印整个命令行。
安装成功后,您需要检查在您的环境变量(PATH)中可见的版本,所以请输入以下控制台命令
$ fuefit --version
0.0.6
从源代码安装(适用于熟悉git的高级用户)
如果您下载了源代码,您有更多的安装选项。有各种方法获取它们
从github下载并解压一个发布快照。
从PyPi 仓库下载并解压一个sdist 源分发。
在github上克隆git-repository。假设您已经安装了一个git的工作安装,您可以使用以下一系列命令获取并安装项目的最新版本
$ git clone "https://github.com/ankostis/fuefit.git" fuefit.git $ cd fuefit.git $ python setup.py install ## Use `python3` if both python-2 & 3 installed.
在使用源代码时,您需要安装所有项目依赖的库。特别是对于最新的WinPython环境(Windows / OS X),您可以使用以下命令安装必要的依赖项
$ pip install -r requirements/execution.txt .
前面的命令安装了项目的一个“快照”,它是从源代码中找到的。如果您希望将项目的源代码链接到您的Python环境中,请以开发模式安装项目
$ python setup.py develop
注意
最后一个命令将在项目文件夹内安装任何缺少的依赖项。
Anaconda安装
到Anaconda(即OS X)的安装与前面描述的pip过程没有区别。
要将其安装在miniconda环境中,您需要首先安装项目的本地依赖项(numpy/scipy),因此您需要下载源代码(见上文)。然后在其中打开一个bash-shell并输入以下命令
$ coda install `cat requirements/miniconda.txt`
$ pip install lmfit ## Workaround lmfit-py#149
$ python setup.py install
$ fuefit --version
0.0.6
用法
Excel用法
注意!
Excel集成需要Python 3以及Windows或OS X!
在Windows和OS X中,您可以使用xlwings库使用Excel文件为程序提供输入和输出。
要创建当前目录中的必要模板文件,请输入以下控制台命令
$ fuefit --excel
如果您想指定不同的目标路径,请输入fuefit --excel {file_path}
在windows/OS X中,您可以输入fuefit --excelrun,文件将在您的home目录中创建,并且Excel将立即打开它们。
上述命令所做的操作是创建两个文件
- 文件(FuefitExcelRunner{#}.xlsm)
一个Python启用型的Excel文件,其中写入输入和输出数据,如截图所示
第一次打开它后,启用工作簿上的宏,选择左侧的Python代码并单击Run Selection as Pyhon按钮;应该为每辆车创建一个工作表。
该Excel文件包含适当的VBA模块,允许您通过单击按钮调用Python代码,这些代码在选定的单元格中,以及使用在下面的Python脚本中声明的Python函数,使用
命名空间。 要添加更多输入列,您需要将所需模型项的json-pointers路径设置为列标题(见下面的python-usage)。
- 文件(FuefitExcelRunner{#}.py)
上述xls文件用于运行一系列实验的Python函数。
特定函数从输入表中读取多个具有不同车辆特性和/或实验系数的车辆,然后它添加一个包含每个车辆循环运行的新工作表。当然,您可以进一步编辑它以满足您的需求。
注意
您也可以逆序执行上述过程,运行Python脚本。
$ python FuefitExcelRunner.py
脚本将打开Excel文件,运行实验并添加新的工作表,但如果发生任何错误,这次您可以调试它们,如果您通过LiClipse或IPython执行了脚本!
关于从Excel单元格中提取Python代码的一些一般性说明
Excel .利用了一个详尽的语法,用于从Python代码中引用Excel 单元格、行、列或表,并将它们作为class(pandas.DataFrame)读取。请参阅func(~fuefit.excel.FuefitExcelRunner.resolve_excel_ref)中的语法。
每次调用时,预定义的VBA模块pandalon都会在Excel文件所在的同一文件夹中执行一个动态生成的Python脚本文件,其中还包括导入“姐妹”Python脚本文件。您可以阅读并修改姐妹Python脚本以导入库,如‘numpy’和‘pandas’,或预先定义实用Python函数。
姐妹Python脚本的名字是从Excel文件的名字自动计算的,并且它必须是一个有效的Python模块名字。因此:*不要在Excel文件中使用非字母数字字符,如空格(`),连字符(-)和点(`.`)。*如果您重命名了Excel文件,也要重命名Python文件,或者添加这个Python import <old_py_file> as mypy`
发生错误时,将在Excel文件所在的同一文件夹中写入一个日志文件,直到消息框可见,然后您点击‘ok’后它会自动删除!
命令行使用
示例命令
fuefit -v\
-I fuefit/test/FuelFit.xlsx sheetname+=0 header@=None names:='["p","rpm","fc"]' \
-I fuefit/test/engine.csv file_frmt=SERIES model_path=/engine header@=None \
-m /engine/fuel=petrol \
-O ~t2.csv model_path=/fitted_eng_points index?=false \
-O ~t2.csv model_path=/mesh_eng_points index?=false \
-O ~t.csv model_path= -m /params/plot_maps@=True
Python使用
与项目交互最强大的方式是通过Python REPL(读取-评估-打印循环)。因此,启动一个命令(python)或命令(ipython) shell,并首先尝试导入项目以检查其版本
代码块
>>> import fuefit >>> fuefit.__version__ ## Check version once more. '0.0.6' >>> fuefit.__file__ ## To check where it was installed. # doctest: +SKIP /usr/local/lib/site-package/fuefit-...
如果版本与预期一致,请使用base-model并使用您的引擎数据(字符串和数字)扩展它
>>> from fuefit import datamodel, processor
>>> inp_model = datamodel.base_model()
>>> inp_model.update({
... "engine": {
... "fuel": "diesel",
... "p_max": 95,
... "n_idle": 850,
... "n_rated": 6500,
... "stroke": 94.2,
... "capacity": 2000,
... "bore": None, ##You do not have to include these,
... "cylinders": None, ## they are just for displaying some more engine properties.
... }
... })
>>> import pandas as pd
>>> df = pd.read_excel('fuefit/test/FuelFit.xlsx', 0, header=None, names=["n","p","fc"])
>>> inp_model['measured_eng_points'] = df
有关接受的模式数据的信息,请检查其func(~fuefit.datamodel.model_schema)中的JSON模式,以及func(~fuefit.datamodel.base_model)
然后您必须对它进行验证
>>> datamodel.validate_model(inp_model, additional_properties=False)
如果验证成功,然后您可以将这个模型树馈送到mod(fuefit.processor),以获取结果
>>> out_model = processor.run(inp_model)
>>> print(datamodel.resolve_jsonpointer(out_model, '/engine/fc_map_coeffs'))
a 164.110667
b 7051.867419
c 63015.519469
a2 0.121139
b2 -493.301306
loss0 -1637.894603
loss2 -1047463.140758
dtype: float64
>>> print(out_model['fitted_eng_points'].shape)
(262, 11)
提示
您始终可以在Test-cases和cmdline工具mod(fuefit.__main__)中查看示例代码。
拟合参数化
可以通过设置/修改/params/fitting/下的各种输入模型属性来通过‘lmfit’拟合库进行参数化。
特别是在/params/fitting/coeffs/下,您可以设置一个字典,其中包含系数名称 –> class(lmfit.parameters.Parameter),如min/max/value,如由lmfit库定义(检查func(fuefit.datamodel.base_model())下的默认属性和在ExcelRunner中的示例列)。
贡献
该项目托管在github。要提供有关错误和问题的反馈或有关增强功能和请求的问题,请使用github的Issue-tracker。
源代码和依赖项
要参与开发,您需要一个POSIX环境来完全构建它(Linux、OSX或Windows上的Cygwin)。
Liclipse IDE
在源代码中包含两个用于全面的LiClipse IDE的示例文件
file(eclipse.project)
file(eclipse.pydevproject)
删除eclipse前缀(但保留点(.)),然后从Eclipse的文件菜单中将它作为“现有项目”导入。
另一个问题是由于LiClipse包含了它自己的Git和EGit实现,它与Unix的符号链接(如文件docs/docs)严重冲突,即使在新鲜检出后也会检测到工作目录的变化。要解决这个问题,请右键单击上述文件,选择“属性-->团队-->高级-->假定未更改”。
开发团队
科斯蒂斯·安纳格诺普洛斯(软件设计与实现)
乔治奥斯·丰塔拉斯(方法起始、工程支持与验证)
索引
CM `Mean Piston Speed <https://en.wikipedia.org/wiki/Mean_piston_speed>`_, a measure for the engines operating speed [m/sec] BMEP `Brake Mean Effective Pressure <https://en.wikipedia.org/wiki/Mean_effective_pressure>`_, a valuable measure of an engine's capacity to do work that is independent of engine displacement) [bar] PMF *Available Mean Effective Pressure*, the maximum mean effective pressure calculated based on the energy content of the fuel [bar] JSON-schema The `JSON schema <https://json-schema.fullstack.org.cn/>`_ is an `IETF draft <http://tools.ietf.org/html/draft-zyp-json-schema-03>`_ that provides a *contract* for what JSON-data is required for a given application and how to interact with it. JSON Schema is intended to define validation, documentation, hyperlink navigation, and interaction control of JSON data. You can learn more about it from this `excellent guide <http://spacetelescope.github.io/understanding-json-schema/>`_, and experiment with this `on-line validator <http://www.jsonschema.net/>`_. JSON-pointer JSON Pointer(rfc(``6901``)) defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document. It aims to serve the same purpose as *XPath* from the XML world, but it is much simpler.
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
fuefit-0.0.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9d19b7d717250c3a8809888f20cb001c7246e51397f5422d935f1181840297f0 |
|
MD5 | 54feaff1fd0e15b8bcf05878a916a3e5 |
|
BLAKE2b-256 | b3b189531ac058df10354da3b3d1700bc2a370d553806f2ef13a021da4f02b4e |
fuefit-0.0.6-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb7c39f3cc2b5f05c01740ac2a3ce3987c9f3f84552f462fa0f203155f5dacdd |
|
MD5 | 5cc85b5d681d81a11978d0d1a5263f6d |
|
BLAKE2b-256 | 20abf82760a78fe815e4455e12c17aa2410be05d18dc35ecceb09cc983649826 |