@sh.add_function(dsp, outputs=['ecms_s'])
def calibrate_ems_model(
drive_battery_model, hev_power_model, fuel_map_model, hybrid_modes,
serial_motor_maximum_power_function, motive_powers,
motors_maximums_powers, engine_powers_out, engine_speeds_out, times,
engine_power_losses_function, is_serial, has_motor_p2_planetary):
"""
Calibrate Energy Management Strategy model.
:param drive_battery_model:
Drive battery current model.
:type drive_battery_model: DriveBatteryModel
:param hev_power_model:
Hybrid Electric Vehicle power balance model.
:type hev_power_model: HEV
:param fuel_map_model:
Fuel map model.
:type fuel_map_model: FuelMapModel
:param hybrid_modes:
Hybrid mode status (0: EV, 1: Parallel, 2: Serial).
:type hybrid_modes: numpy.array
:param serial_motor_maximum_power_function:
Serial motor maximum power function.
:type serial_motor_maximum_power_function: function
:param motive_powers:
Motive power [kW].
:type motive_powers: numpy.array
:param motors_maximums_powers:
Maximum powers of electric motors [kW].
:type motors_maximums_powers: numpy.array
:param engine_powers_out:
Engine power vector [kW].
:type engine_powers_out: numpy.array
:param engine_speeds_out:
Engine speed [RPM].
:type engine_speeds_out: numpy.array
:param times:
Time vector [s].
:type times: numpy.array
:param engine_power_losses_function:
Engine power losses function.
:type engine_power_losses_function: function
:param is_serial:
Is the vehicle serial hybrid?
:type is_serial: bool
:param has_motor_p2_planetary:
Has the vehicle a motor in planetary P2?
:type has_motor_p2_planetary: bool
:return:
Equivalent Consumption Minimization Strategy params.
:rtype: tuple[float]
"""
model = EMS(
has_motor_p2_planetary, is_serial, drive_battery_model, hev_power_model,
fuel_map_model, serial_motor_maximum_power_function,
engine_power_losses_function
).fit(
hybrid_modes, times, motive_powers, motors_maximums_powers,
engine_powers_out, engine_speeds_out
)
return model.s_ch, model.s_ds