use_selection=True, name='WLTP profile') comb_profile_wltp = electrical.CombinationPowerProfile([wltp_bat], name='wltp_profil') comb_profile_load = electrical.CombinationPowerProfile([load_bat], name='load_profil') comb_profile_end = electrical.CombinationPowerProfile([end_bat], name='end_soc_profil') # ============================================================================= # Electrical Optimizer # ============================================================================= input_values = {} blocks = [] block_ebo = wf.InstanciateModel(eo.ElecBatteryOptimizer, name='ElecBatteryOptimizer') optimize_ebo = wf.ModelMethod(eo.ElecBatteryOptimizer, 'Optimize', name='Optimize-ElecBatteryOptimizer') attribute_selection_ebo = wf.ModelAttribute('powerpack_electric_simulators') blocks.extend([block_ebo, optimize_ebo, attribute_selection_ebo]) pipes = [wf.Pipe(block_ebo.outputs[0], optimize_ebo.inputs[0]), wf.Pipe(optimize_ebo.outputs[1], attribute_selection_ebo.inputs[0]) ] # ============================================================================= # Thermal specs # ============================================================================= altitude = 0.1 evol_power1 = electrical.Evolution(evolution = list(npy.linspace(0, 5., 10))) evol_power2 = electrical.Evolution(evolution = list(npy.linspace(0, 6., 10))) evol_h_min1 = electrical.Evolution(evolution = [0 + 0.3*1e1*p/(p + 0.1)/2. for p in npy.linspace(0, 1, 10)]) evol_h_max2 = electrical.Evolution(evolution = [altitude + 0.3*1e1*p/(p + 0.1)/2. for p in npy.linspace(0, 1, 10)])
filter_max = [{'attribute': 'MPG', 'operator': 'gte', 'bound': 30}] catalog2 = wf.InstanciateModel(model_class=Catalog, name='Car 2') filter2 = wf.ModelMethod(model_class=Catalog, method_name='filter_', name='Filter 2') filtered_catalog2 = wf.InstanciateModel(model_class=Catalog, name='Filtered Catalog 2') catalogs = wf.Sequence(number_arguments=2, name='Catalogs') concatenate = wf.ClassMethod(class_=Catalog, method_name='concatenate', name='Concatenate') display = wf.Display(order=0) array_attribute = wf.ModelAttribute(attribute_name='array', name='Array') blocks = [ import_csv, instantiate_pareto, catalog1, filter1, filtered_catalog1, catalog2, filter2, filtered_catalog2, catalogs, concatenate, display, array_attribute ] # Pipes pipes = [ wf.Pipe(import_csv.outputs[0], catalog1.inputs[0]), wf.Pipe(import_csv.outputs[1], catalog1.inputs[1]), wf.Pipe(instantiate_pareto.outputs[0], catalog1.inputs[2]), wf.Pipe(import_csv.outputs[0], catalog2.inputs[0]), wf.Pipe(import_csv.outputs[1], catalog2.inputs[1]), wf.Pipe(instantiate_pareto.outputs[0], catalog2.inputs[2]),
comb_profile_wltp = electrical.CombinationPowerProfile([wltp_bat], name='wltp_profil') comb_profile_load = electrical.CombinationPowerProfile([load_bat], name='load_profil') comb_profile_end = electrical.CombinationPowerProfile([end_bat], name='end_soc_profil') # ============================================================================= # Electrical Optimizer # ============================================================================= input_values = {} blocks = [] block_ebo = wf.InstanciateModel(eo.ElecBatteryOptimizer, name='EBO') optimize_ebo = wf.ModelMethod(eo.ElecBatteryOptimizer, 'Optimize', 'Optimize EBO') attribute_selection_ebo = wf.ModelAttribute('powerpack_electric_simulators', 'Attribute Selection EBO') filters = [{ 'attribute': 'bms.battery.number_module_parallel', 'operator': 'gt', 'bound': 2 }, { 'attribute': 'bms.battery.number_module_serie', 'operator': 'lte', 'bound': 10 }, { 'attribute': 'bms.number_cells', 'operator': 'gte', 'bound': 750 }, { 'attribute': 'bms.number_cells',
class Optimizer(DessiaObject): def __init__(self, model_to_optimize: Model, name: str = ''): self.model_to_optimize = model_to_optimize DessiaObject.__init__(self, name=name) def optimize(self, optimization_value: int = 3) -> None: self.model_to_optimize.value += optimization_value instanciate_generator = wf.InstanciateModel(model_class=Generator, name='Instantiate Generator') generator_generate = wf.ModelMethod(model_class=Generator, method_name='generate', name='Generator Generate') attribute_selection = wf.ModelAttribute(attribute_name='models', name='Attribute Selection') # Subworkflow of model optimization instanciate_optimizer = wf.InstanciateModel(model_class=Optimizer, name='Instantiate Optimizer') optimization = wf.ModelMethod(model_class=Optimizer, method_name='optimize', name='Optimization') model_fetcher = wf.ModelAttribute(attribute_name='model_to_optimize', name='Model Fetcher') pipe1_opt = wf.Pipe(input_variable=instanciate_optimizer.outputs[0], output_variable=optimization.inputs[0]) pipe2_opt = wf.Pipe(input_variable=optimization.outputs[1], output_variable=model_fetcher.inputs[0]) optimization_blocks = [instanciate_optimizer, optimization, model_fetcher]