|
| 1 | +# v0.9.0 |
| 2 | + |
| 3 | +**CADET-Process** v0.9.0 is the culmination of 6 months of hard work. |
| 4 | +It contains many new features, numerous bug-fixes, improved test coverage and better |
| 5 | +documentation. |
| 6 | +All users are encouraged to upgrade to this release, as there are a large number of bug-fixes and optimizations. |
| 7 | + |
| 8 | +This release requires Python 3.9+ |
| 9 | + |
| 10 | +## Highlights and new features of this release |
| 11 | + |
| 12 | +### {mod}`CADETProcess.processModel` improvements |
| 13 | + |
| 14 | +#### Support for new adsorption models |
| 15 | + |
| 16 | +In this version, a couple of new isotherms are supported in **CADET-Process**: |
| 17 | + |
| 18 | +- {class}`~CADETProcess.processModel.LangmuirLDFLiquidPhase`: A multi-component Langmuir binding model using a linear driving force approximation based on the equilibrium concentration c* for given q. |
| 19 | +- {class}`~CADETProcess.processModel.HICConstantWaterActivity`: A HIC binding model assuming constant water activity. |
| 20 | +- {class}`~CADETProcess.processModel.HICWaterOnHydrophobicSurfaces`: A HIC binding model published in Wang et al. 2016. |
| 21 | + |
| 22 | +#### Improving flow rate calculations |
| 23 | + |
| 24 | +Previously, **CADET-Process** used symbolic mathematics (`sympy`) during pre-processing to calculate the flow rates for every unit operation. |
| 25 | +While this didn't cause any issue for small systems, it made the pre-processing times unacceptably long for big multi-column systems. |
| 26 | +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. |
| 27 | +For more information, visit [the Forum](https://forum.cadet-web.de/t/improving-the-flowrate-calculation/795) or check out the corresponding [PR](https://github.com/fau-advanced-separations/CADET-Process/pull/71). |
| 28 | + |
| 29 | +Thanks to @dion-is for bringing this to our attention and to @daklauss for implementing this improvement! |
| 30 | + |
| 31 | +### {mod}`CADETProcess.optimization` improvements |
| 32 | + |
| 33 | +#### Implement a Bayesian optimization algorithm for CADET-Process based on ax |
| 34 | + |
| 35 | +Many of the optimization problems encountered in model-based design involve high-dimensional spaces with multiple objectives and constraints. |
| 36 | +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. |
| 37 | + |
| 38 | +In recent years, Bayesian Optimization (BO) has emerged as a promising technique to effectively tackle these challenges. |
| 39 | +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. |
| 40 | + |
| 41 | +In this release, [ax](https://github.com/facebook/Ax) as been added to **CADET-Process**. |
| 42 | +Different algorithms can be used, e.g. {class}`~CADETProcess.optimizer.GPEI` for single-objective and {class}`~CADETProcess.optimizer.NEHVI` for multi-objective optimization. |
| 43 | + |
| 44 | +Thanks to @flo-schu for contributing this extension to **CADET-Process**! |
| 45 | + |
| 46 | +#### Allow specifying objectives as maximization problem |
| 47 | + |
| 48 | +Previously, all objective functions defined in an {class}`~CADETProcess.optimization.OptimizationProblem` were expected to return a value that was to be minimized. |
| 49 | +However, in reality, objectives are often to be maximized (e.g. a productivity). |
| 50 | + |
| 51 | +In this release, a new `minimize` flag was introduced to the {meth}`~CADETProcess.optimization.OptimizationProblem.add_objectives` method. |
| 52 | +If `minimize` is `False`, the result will automatically be multiplied with `-1` internally to convert the maximization problem to a minimization problem. |
| 53 | +For reporting, the original value is then used. |
| 54 | +The default is `maximize=True`. |
| 55 | + |
| 56 | +Moreover, for nonlinear constraints, the user can now specify a `comparison_operator` in the {meth}`~CADTProcess.optimization.OptimizationProblem.add_nonliner_constraints` method which is used to compare the output of the nonlinear constraint function with the specified bounds. |
| 57 | +By default, the operator is `'le'`, indicating that the value returned by the function must be less or equal to the specified bound. |
| 58 | +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. |
| 59 | + |
| 60 | +### {mod}`CADETProcess.modelBuilder` improvements |
| 61 | + |
| 62 | +#### Add triangle theory design methods for SMB systems |
| 63 | + |
| 64 | +To facilitate the setup of SMB processes, a new {class}`~CADETProcess.modelBuilder.SMBBuilder` was added which automatically configures {class}`~CADETProcess.processModel.FlowSheet` and {class}`~CADETProcess.processModel.Process` of a 4-zone SMB. |
| 65 | +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. |
| 66 | +For more information, refer to {ref}`smb_builder_tutorial`. |
| 67 | + |
| 68 | +## Issues closed for 0.9.0 |
| 69 | + |
| 70 | +- [50](https://github.com/fau-advanced-separations/CADET-Process/issues/50): Add support for linear equality constraints in hopsy. |
| 71 | +- [67](https://github.com/fau-advanced-separations/CADET-Process/issues/67): Improving flow rate calculations. |
| 72 | +- [99](https://github.com/fau-advanced-separations/CADET-Process/issues/99): Overhaul post-processing in Optimization |
| 73 | +- [117](https://github.com/fau-advanced-separations/CADET-Process/issues/117): A linear constraint with two linear variables still raises an issue if any non-linear variables are present in the system. |
| 74 | +- [118](https://github.com/fau-advanced-separations/CADET-Process/issues/118): Issue with return types of evaluation functions. |
| 75 | + |
| 76 | +## Pull requests for 0.9.0 |
| 77 | + |
| 78 | +- [34](https://github.com/fau-advanced-separations/CADET-Process/pull/34): Implement a bayesian opimization algorithm for CADET-Process based on ax. |
| 79 | +- [65](https://github.com/fau-advanced-separations/CADET-Process/pull/65): Add adapter for LangmuirLDFLiquidPhase. |
| 80 | +- [66](https://github.com/fau-advanced-separations/CADET-Process/pull/66): Fix evaluation objects in objectives. |
| 81 | +- [68](https://github.com/fau-advanced-separations/CADET-Process/pull/68): Fix indices for optimization of sized parameters with size==1. |
| 82 | +- [71](https://github.com/fau-advanced-separations/CADET-Process/pull/71): Improving flow rate calculation. |
| 83 | +- [74](https://github.com/fau-advanced-separations/CADET-Process/pull/74): Add support for initial values with linear equality constraints. |
| 84 | +- [76](https://github.com/fau-advanced-separations/CADET-Process/pull/76): Fix bad initial value for Yamamoto method. |
| 85 | +- [77](https://github.com/fau-advanced-separations/CADET-Process/pull/77): Improve preprocessing time. |
| 86 | +- [78](https://github.com/fau-advanced-separations/CADET-Process/pull/78): Fix calculation of conversion rates for MSSMA model. |
| 87 | +- [79](https://github.com/fau-advanced-separations/CADET-Process/pull/79): Fix behavior of comparisons to references with multiple components. |
| 88 | +- [82](https://github.com/fau-advanced-separations/CADET-Process/pull/82): Fix callbacks with dependencies. |
| 89 | +- [84](https://github.com/fau-advanced-separations/CADET-Process/pull/84): Improve handling of initial values. |
| 90 | +- [91](https://github.com/fau-advanced-separations/CADET-Process/pull/91): Improve behavior of evaluate_callbacks with individuals without x_untransformed. |
| 91 | +- [92](https://github.com/fau-advanced-separations/CADET-Process/pull/92): Add plot method to TransformBase. |
| 92 | +- [69](https://github.com/fau-advanced-separations/CADET-Process/pull/69): Add HIC binding model adapters. |
| 93 | +- [101](https://github.com/fau-advanced-separations/CADET-Process/pull/101): Allow setting state for dependent events. |
| 94 | +- [110](https://github.com/fau-advanced-separations/CADET-Process/pull/66): Improve fractionation behavior when encountering empty fractions. |
| 95 | +- [113](https://github.com/fau-advanced-separations/CADET-Process/pull/66): Add triangle theory design methods for SMB systems. |
| 96 | +- [114](https://github.com/fau-advanced-separations/CADET-Process/pull/114): Improve optimization post processing |
| 97 | +- [115](https://github.com/fau-advanced-separations/CADET-Process/pull/115): Allow specifying objectives as maximization problem. |
| 98 | +- [116](https://github.com/fau-advanced-separations/CADET-Process/pull/116): Fix/non linear variables uninvolved in linear rules. |
0 commit comments