Hello,
As in this old post, I would like to optimise the value for film diffusion.
I am also following this case study.
I have changed the code as follows:
from CADETProcess.optimization import OptimizationProblem
optimization_problem = OptimizationProblem('AxialDispersion_filmDiffusion')
optimization_problem.add_evaluation_object(process)
optimization_problem.add_variable(
name='axial_dispersion', parameter_path='flow_sheet.column.axial_dispersion',
lb=1e-10, ub=0.1,
transform='auto'
)
optimization_problem.add_variable(
name='film_diffusion', parameter_path='flow_sheet.column.film_diffusion',
lb=1e-10, ub=0.1,
transform='auto'
)
optimization_problem.add_evaluator(simulator)
optimization_problem.add_objective(
comparator,
n_objectives=comparator.n_metrics,
requires=[simulator]
)
def callback(simulation_results, individual, evaluation_object, callbacks_dir='./'):
comparator.plot_comparison(
simulation_results,
file_name=f'{callbacks_dir}/{individual.id}_{evaluation_object}_comparison.png',
show=False
)
optimization_problem.add_callback(callback, requires=[simulator])
Here is the error:
Cell In[13], line 14
4 optimization_problem.add_evaluation_object(process)
8 optimization_problem.add_variable(
9 name='axial_dispersion', parameter_path='flow_sheet.column.axial_dispersion',
10 lb=1e-10, ub=0.1,
11 transform='auto'
12 )
---> 14 optimization_problem.add_variable(
15 name='film_diffusion', parameter_path='flow_sheet.column.film_diffusion', indices=0,
16 lb=1e-10, ub=0.1,
17 transform='auto'
18 )
21 optimization_problem.add_evaluator(simulator)
23 optimization_problem.add_objective(
24 comparator,
25 n_objectives=comparator.n_metrics,
26 requires=[simulator]
27 )
File ~\anaconda3\Lib\site-packages\CADETProcess\optimization\optimizationProblem.py:347, in OptimizationProblem.add_variable(self, name, evaluation_objects, parameter_path, lb, ub, transform, indices)
342 if parameter_path is not None and len(evaluation_objects) == 0:
343 raise ValueError(
344 "Cannot set parameter_path for variable without evaluation object "
345 )
--> 347 var = OptimizationVariable(
348 name, evaluation_objects, parameter_path,
349 lb=lb, ub=ub, transform=transform,
350 indices=indices,
351 )
353 self._variables.append(var)
355 with warnings.catch_warnings():
File ~\anaconda3\Lib\site-packages\CADETProcess\optimization\optimizationProblem.py:2962, in OptimizationVariable.__init__(self, name, evaluation_objects, parameter_path, lb, ub, transform, indices, precision)
2960 self.evaluation_objects = evaluation_objects
2961 self.parameter_path = parameter_path
-> 2962 self.indices = indices
2963 else:
2964 self.evaluation_objects = None
File ~\anaconda3\Lib\site-packages\CADETProcess\optimization\optimizationProblem.py:3169, in OptimizationVariable.indices(self, indices)
3167 _ = self.indices
3168 except (ValueError, TypeError) as e:
-> 3169 raise e
File ~\anaconda3\Lib\site-packages\CADETProcess\optimization\optimizationProblem.py:3167, in OptimizationVariable.indices(self, indices)
3165 # Since indices are constructed on `get`, call the property here:
3166 try:
-> 3167 _ = self.indices
3168 except (ValueError, TypeError) as e:
3169 raise e
File ~\anaconda3\Lib\site-packages\CADETProcess\optimization\optimizationProblem.py:3126, in OptimizationVariable.indices(self)
3124 parameter_shape = self._get_parameter_shape(eval_obj)
3125 if isinstance(parameter_shape, tuple):
-> 3126 eval_ind = generate_indices(parameter_shape, eval_ind)
3127 else:
3128 if not isinstance(eval_ind, list):
File ~\anaconda3\Lib\site-packages\CADETProcess\dynamicEvents\section.py:663, in generate_indices(shape, indices)
661 size = np.prod(shape)
662 if size == 1:
--> 663 raise ValueError("Scalar parameters cannot have index slices.")
665 if indices is None:
666 indices = np.s_[:]
ValueError: Scalar parameters cannot have index slices.
I have already reinstalled Cadet Process. However, this did not help.
Could you please explain again what I need to do to solve it? The previous answer is unfortunately unclear to me.
Thanks
Stefanos