Superstructure Optimisation with General Disjunctive Programming and Surrogate Models

In this work we present a framework to generate surrogates from rigorous process models embedded in a modelling environment or a process simulator. These unit operations (i.e. process flowsheet subsystems) are treated as black-box models to generate data for fitting and deriving surrogate functions. Further, the methodology includes the formulation of a superstructure optimisation problem in form of a general disjunctive program (GDP) and the identification of the optimal process flowsheet structure and point of operation from the possible alternatives. The superstructure optimisation incorporates selection and interconnection of each unit operation in form of disjunctions and with the objective to maximize profit or to minimize total cost. In this paper we highlight the surrogate building step of the methodology with a rigorous counter-current spray column model and a continuous stirred tank reactor (CSTR). We assess the performance of different surrogate modelling methods such as multivariate regression splines, polynomial chaos expansion and Gaussian process regression in respect to the coefficient of determination (R2), the mean squared error (MSE) and the learning curve performance. The GDP is either solved by transforming it to a MINLP via convex-hull and then solving the problem with a nonlinear solver or by applying directly the GDPopt solver which makes use of the logic based outer-approximation (OA) algorithm. We show that superstructure generation with surrogate models elevates rigorous process design to the upper layer of optimisation where the best sequence of unit operations is determined and raw material input streams, unit operation conditions and product purity are optimized simultaneously. Our proposed methodology and software tool helps engineers to concentrate on the formulation and data retrieval tasks while trial and error simulations of different process configurations is prevented. A spreadsheet interface allows for easy data input and hides the underlying Fortran, Python and Pyomo scripts which can be accessed if the more sophisticated user wants to add new features to the framework.