Source code for co2mpas.core.model.physical.clutch_tc.clutch

# -*- coding: utf-8 -*-
#
# Copyright 2015-2019 European Commission (JRC);
# Licensed under the EUPL (the 'Licence');
# You may not use this work except in compliance with the Licence.
# You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
"""
Functions and model `dsp` to model the mechanic of the clutch.
"""
import numpy as np
import schedula as sh
from co2mpas.defaults import dfl
from .torque_converter import define_k_factor_curve

dsp = sh.BlueDispatcher(name='Clutch', description='Models the clutch.')


[docs]@sh.add_function(dsp, outputs=['clutch_window']) def default_clutch_window(): """ Returns a default clutching time window [s] for a generic clutch. :return: Clutching time window [s]. :rtype: tuple """ return dfl.functions.default_clutch_window.clutch_window
# noinspection PyUnusedLocal def _no_model(times, **kwargs): return np.zeros_like(times) # noinspection PyPep8Naming
[docs]@sh.add_function(dsp, outputs=['clutch_speed_model']) def calibrate_clutch_speed_model( clutch_phases, accelerations, clutch_tc_speeds_delta, velocities, gear_box_speeds_in, gears): """ Calibrate clutch speed model. :param clutch_phases: When the clutch is active [-]. :type clutch_phases: numpy.array :param accelerations: Acceleration vector [m/s2]. :type accelerations: numpy.array :param clutch_tc_speeds_delta: Engine speed delta due to the clutch [RPM]. :type clutch_tc_speeds_delta: numpy.array :param velocities: Velocity vector [km/h]. :type velocities: numpy.array :param gear_box_speeds_in: Gear box speed vector [RPM]. :type gear_box_speeds_in: numpy.array :param gears: Gear vector [-]. :type gears: numpy.array :return: Clutch speed model. :rtype: callable """ model = _no_model if clutch_phases.sum() > 10: from co2mpas.utils import mae from sklearn.pipeline import Pipeline # noinspection PyProtectedMember from ..engine._thermal import _SelectFromModel, _XGBRegressor X = np.column_stack( (accelerations, velocities, gear_box_speeds_in, gears) )[clutch_phases] y = clutch_tc_speeds_delta[clutch_phases] # noinspection PyArgumentEqualDefault mdl = _XGBRegressor( max_depth=2, n_estimators=int(min(300., 0.25 * (len(y) - 1))), random_state=0, objective='reg:squarederror' ) mdl = Pipeline([ ('feature_selection', _SelectFromModel(mdl, '0.8*median')), ('classification', mdl) ]) mdl.fit(X, y) if mae(mdl.predict(X), y) < mae(0, y): keys = 'accelerations', 'velocities', 'gear_box_speeds_in', 'gears' # noinspection PyUnusedLocal,PyMissingOrEmptyDocstring def model(times, **kwargs): return mdl.predict(np.column_stack(sh.selector(keys, kwargs))) return model
dsp.add_function( function=define_k_factor_curve, inputs=['stand_still_torque_ratio', 'lockup_speed_ratio'], outputs=['k_factor_curve'] )
[docs]@sh.add_function(dsp, outputs=['k_factor_curve'], weight=2) def default_clutch_k_factor_curve(): """ Returns a default k factor curve for a generic clutch. :return: k factor curve. :rtype: callable """ from co2mpas.defaults import dfl par = dfl.functions.default_clutch_k_factor_curve a = par.STAND_STILL_TORQUE_RATIO, par.LOCKUP_SPEED_RATIO from .torque_converter import define_k_factor_curve return define_k_factor_curve(*a)