Hey there,
I was currently trying to simulate the protein CEX chromatography elution curve, for which I reviewed the case studies provided in the documentation. I successfully simulated my desired curve and optimised parameters for any of my protein load components. However, I have three variants in my load, therefore three components, except for salt. All of the examples were related to single-component optimisations. How should I approach optimising params simultaneously for multiple components? One way I thought was adding each component as a different reference and then creating a separate optimisation problem for each of them. But that seemed inefficient. Is there a shorter way to create a combined optimisation problem for each of them?
I will share what my current optimization problem looks like for single variable:
from CADETProcess.comparison import Comparator
comparator = Comparator()
from CADETProcess.reference import ReferenceIO
reference = ReferenceIO(âAcidicâ, new_time, data[âCacidic_gaussâ], component_system=ComponentSystem([âAcidicâ]))
# reference1 = ReferenceIO(âBasicâ, new_time, data[âCbasic_gaussâ], component_system=ComponentSystem([âBasicâ]))
# reference2 = ReferenceIO(âMainâ, new_time, data[âCmain_gaussâ], component_system=ComponentSystem([âMainâ]))
#I see how the experimental data is added
#_ = reference.plot()
comparator.add_reference(reference)
# comparator.add_reference(reference1)
# comparator.add_reference(reference2)
comparator.add_difference_metric(âPeakHeightâ, reference, âcolumn.outletâ, components = [âAcidicâ], start = 2800)
comparator.add_difference_metric(âPeakPositionâ, reference, âcolumn.outletâ, components = [âAcidicâ], start = 2800)
comparator.add_difference_metric(âShapeâ, reference, âcolumn.outletâ, components = [âAcidicâ], start = 2800)
# comparator.add_difference_metric(âSSEâ, reference1, âcolumn.outletâ, components = [âBasicâ], start = 2620)
# comparator.add_difference_metric(âSSEâ, reference2, âcolumn.outletâ, components = [âMainâ], start = 2620)
_ = comparator.plot_comparison(simulation_results)
from CADETProcess.optimization import OptimizationProblem
optimization_problem = OptimizationProblem(â4_paramsâ)
optimization_problem.add_evaluation_object(process)
optimization_problem.add_evaluator(process_simulator)
optimization_problem.add_objective(
comparator,
n_objectives = comparator.n_metrics,
requires = [process_simulator])
optimization_problem.add_variable(
name = âadsorption_rateâ,
parameter_path = âflow_sheet.column.binding_model.adsorption_rateâ,
lb = 1e7, ub = 1e11,
transform = âautoâ,
indices = [1])
optimization_problem.add_variable(
name = âion_exchange_characteristicâ,
parameter_path = âflow_sheet.column.binding_model.ion_exchange_characteristicâ,
lb = 1e0, ub = 1.2e1,
transform = âautoâ,
indices = [1])
optimization_problem.add_variable(
name = âcapacityâ,
parameter_path = âflow_sheet.column.binding_model.capacityâ,
lb = 1e-01, ub = 1.2e2,
transform = âautoâ,
indices = [1])
optimization_problem.add_variable(
name = âpore_diffusionâ,
parameter_path = âflow_sheet.column.pore_diffusionâ,
lb = 1e-13, ub = 1e-9,
transform = âautoâ,
indices = [1])
def callback(simulation_results, individual, evaluation_object, callbacks_dir = â./â):#donât know what callbacks_dir is
comparator.plot_comparison(
simulation_results,
file_name=fâ{callbacks_dir}/{individual.id}_{evaluation_object}_comparison.pngâ,
show = True
)
print(simulation_results)
print(individual.x, individual.f)
print(evaluation_object)
print(callbacks_dir)
optimization_problem.add_callback(callback, requires=[process_simulator])
from CADETProcess.optimization import U_NSGA3
optimizer = U_NSGA3()
optimizer.n_cores = 6
optimizer.progress_frequency = 2
optimizer.pop_size = 5
optimizer.n_max_gen = 50
optimization_results = optimizer.optimize(
optimization_problem,
use_checkpoint = False
)
Please guide.
Thanks.