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.