예제 #1
0
                        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)])
예제 #2
0
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]