gemseo / problems / scalable


A parametric scalable problem.

Based on [TM10], the scalable MDO problem proposed in [AARDL23] aims to minimize the objective \(x_0^Tx_0 + \sum_{i=1}^N y_i^Ty_i\) whilst satisfying the constraints \(t_1-y_1\leq 0,\ldots,t_N-y_N\leq 0\).

See also


\(y_1,\ldots,y_N\) are computed by \(N\) strongly coupled disciplines as \(y_i=a_i-D_{i,0}x_0-D_{i,i}x_i+\sum_{j=1\atop j\neq i}^N C_{i,j}y_j\) where \(a_i\), \(D_{i,0}\), \(D_{i,i}\) and \(C_{i,j}\) are realizations of random matrices whose coefficients are independent random variables identically distributed as the uniform distribution over \([0,1]\).

The design vector \(x=(x_0,x_1,\ldots,x_N)\) belongs to the design space \([0,1]^{d_0}\times[0,1]^{d_1}\ldots[0,1]^{d_N}\).

The implementation proposes a core that is not based on GEMSEO objects (only NumPy and SciPy capabilities) to experiment the scalable problem outside GEMSEO as well as GEMSEO versions of these core elements.

This problem is said to be scalable because several sizing features can be chosen by the user:

  • the number of scalable disciplines \(N\),

  • the number of shared design variables \(x_0\),

  • the number of local design variables \(x_i\) for each scalable discipline,

  • the number of coupling variables \(y_i\) for each scalable discipline.

The scalable problem is particularly useful to compare different MDO formulations with respect to the sizing configuration.

The class ScalableProblem helps to define a scalable problem from ScalableDisciplineSettings, a number of shared design variables and a level of feasibility. It also proposes a method create_scenario() to create a scenario for an MDOFormulation and a method ScalableProblem.create_quadratic_programming_problem() to rewrite the MDO problem as a quadratic OptimizationProblem. Lastly, the problem can be made uncertain by adding a centered random vector per coupling equation: \(Y_i=a_i-D_{i,0}x_0-D_{i,i}x_i+\sum_{j=1\atop j\neq i}^N C_{i,j}y_j+U_i\). These random vectors \(U_1,\ldots,U_N\) are independent and the covariance matrix of \(U_i\) is denoted \(\Sigma_i\).