CADET-Process v0.9.1 (Updated 2024-05-03)

Hello everyone,

we’re proud to announce a fresh release of CADET-Process. v0.9.0 is the culmination of 6 months of hard work. It contains many new features, numerous bug-fixes, improved test coverage and better documentation. All users are encouraged to upgrade to this release, as there are a large number of bug-fixes and optimizations.

This release requires Python 3.9+

Highlights and new features of this release

CADETProcess.processModel improvements

Support for new adsorption models

In this version, a couple of new isotherms are supported in CADET-Process:

  • LangmuirLDFLiquidPhase: A multi-component Langmuir binding model using a linear driving force approximation based on the equilibrium concentration c* for given q.
  • HICConstantWaterActivity: A HIC binding model assuming constant water activity.
  • HICWaterOnHydrophobicSurfaces: A HIC binding model published in Wang et al. 2016.

Improving flow rate calculations

Previously, CADET-Process used symbolic mathematics (sympy) during pre-processing to calculate the flow rates for every unit operation. While this didn’t cause any issue for small systems, it made the pre-processing times unacceptably long for big multi-column systems. By formulating the problem as a linear algebraic problem, which can be solved using np.linalg.solve, the computation times could be reduced by several orders of magnitude.
For more information, visit the Forum or check out the corresponding PR.
Thanks to @dion-is for bringing this to our attention and to @daklauss for implementing this improvement!

CADETProcess.optimization improvements

Implement a Bayesian optimization algorithm for CADET-Process based on ax

Many of the optimization problems encountered in model-based design involve high-dimensional spaces with multiple objectives and constraints. However, established optimizers are often ineffective for these complex problems because they are either designed for single objectives, lack adequate support for nonlinear constraints, or are not suitable for global optimization.

In recent years, Bayesian Optimization (BO) has emerged as a promising technique to effectively tackle these challenges. This method approximates the objective function using surrogate models such as Gaussian process regression (GPR) and utilizes an acquisition function to balance exploration and exploitation of the parameter space.

In this release, ax as been added to CADET-Process. Different algorithms can be used, e.g. GPEI for single-objective and NEHVI for multi-objective optimization.

Thanks to @flo-schu for contributing this extension to CADET-Process!

Allow specifying objectives as maximization problem

Previously, all objective functions defined in an OptimizationProblem were expected to return a value that was to be minimized.
However, in reality, objectives are often to be maximized (e.g. a productivity).

In this release, a new minimize flag was introduced to the OptimizationProblem.add_objectives method. If minimize is False, the result will automatically be multiplied with -1 internally to convert the maximization problem to a minimization problem. For reporting, the original value is then used. The default is maximize=True.

Moreover, for nonlinear constraints, the user can now specify a comparison_operator in the OptimizationProblem.add_nonliner_constraints method which is used to compare the output of the nonlinear constraint function with the specified bounds. By default, the operator is 'le', indicating that the value returned by the function must be less or equal to the specified bound. In any case, the “true” value of the nonlinear constraint function, as well as the constraint violation are stored for reporting, where positive values indicate the constraint is not satisfied.

CADETProcess.modelBuilder improvements

Add triangle theory design methods for SMB systems

To facilitate the setup of SMB processes, a new SMBBuilder was added which automatically configures FlowSheet and Process of a 4-zone SMB. Moreover, design methods based on the so-called triangle theory have been added to determine optimal flow rates of the SMB system for linear and Langmuir isotherms. For more information, refer to SMB Builder Tutorial.

Issues closed for 0.9.0

  • 50: Add support for linear equality constraints in hopsy.
  • 67: Improving flow rate calculations.
  • 99: Overhaul post-processing in Optimization
  • 117: A linear constraint with two linear variables still raises an issue if any non-linear variables are present in the system.
  • 118: Issue with return types of evaluation functions.

Pull requests for 0.9.0

  • 34: Implement a bayesian opimization algorithm for CADET-Process based on ax.
  • 65: Add adapter for LangmuirLDFLiquidPhase.
  • 66: Fix evaluation objects in objectives.
  • 68: Fix indices for optimization of sized parameters with size==1.
  • 71: Improving flow rate calculation.
  • 74: Add support for initial values with linear equality constraints.
  • 76: Fix bad initial value for Yamamoto method.
  • 77: Improve preprocessing time.
  • 78: Fix calculation of conversion rates for MSSMA model.
  • 79: Fix behavior of comparisons to references with multiple components.
  • 82: Fix callbacks with dependencies.
  • 84: Improve handling of initial values.
  • 91: Improve behavior of evaluate_callbacks with individuals without x_untransformed.
  • 92: Add plot method to TransformBase.
  • 69: Add HIC binding model adapters.
  • 101: Allow setting state for dependent events.
  • 110: Improve fractionation behavior when encountering empty fractions.
  • 113: Add triangle theory design methods for SMB systems.
  • 114: Improve optimization post processing
  • 115: Allow specifying objectives as maximization problem.
  • 116: Fix/non linear variables uninvolved in linear rules.
8 Likes

Congratulations and thank you, Jo, for getting a huge amount of work done! Your contributions to the CADET project are invaluable.

2 Likes

v0.9.1

CADET-Process v0.9.1 is a hotfix release which fixes a couple of minor issues.
All users are encouraged to upgrade to this release, as there are a large number of bug-fixes and optimizations.

This release requires Python 3.10+

Highlights and new features of this release

  • Fix updating ParetoFront with a from a Population.
  • Add option to instantiate a Population from an OptimizationProblem.
  • Add option to include meta scores and infeasible points in Population.plot_pareto.
  • Add option to set time axis in plots to seconds.
  • Migrate to pyproject.toml.

Issues closed for 0.9.1

  • 121: optimization_problem.evaluate_callbacks(ind) doesn’t evaluate if callback frequency is set to != 1

Pull requests for 0.9.1

  • 122: Extend example of binding parameter estimation to include parameter transformation
  • 125: Use seconds in plot time axis
  • 126: AxInterface Runner staging_required should be a property
1 Like