STYRENE is a blackbox optimization problem offered as a benchmark case for the derivative-free optimization community. It simulates a styrene production process, seen as a blackbox simulation for which derivatives do not exist. The objective is to maximize the net present value subject to several process and economic constraints. The code is standard C++ initially developed by Vincent Béchard.
Two versions are provided in the blackbox/ directory:
blackbox/truth/corresponds to the "true" blackbox, the one to optimize.blackbox/surrogate/corresponds to a static surrogate, i.e. a cheaper but imprecise approximation of the true blackbox. It is typically used to assist an optimization algorithm for the optimization of the true problem.
The problem is defined by 8 optimization variables, all scaled in [0;100], and 11 constraints of the form c_j(x) <= 0, divided in two groups: 4 unrelaxable and nonquantifiable constraints and 7 relaxable and quantifiable constraints, following the taxonomy of constraints defined here.
The blackbox execution gives 12 outputs: The 11 constraints values and the objective. A point is feasible when the 11 first outputs are lower than or equal to zero.
Finally two starting points are provided in points/:
points/x0_feasible.txt: Feasible.points/x0_infeasible.txt: Infeasible.
Makefiles are provided for the true and surrogate problems.
To compile, go to blackbox/truth/ or blackbox/surrogate/ and type make.
This will create the executable files blackbox/truth/truth.exe and blackbox/surrogate/surrogate.exe.
To compile on Windows, it is possible to create a MS Visual project from the C++ source files. For convenience, an already compiled executable of the true problem is provided (blackbox/truth/truth_WINDOWS.exe).
From the top directory of the project, type
./blackbox/truth/truth.exe x.txt
to execute the true blackbox and
./blackbox/surrogate/surrogate.exe x.txt
to execute the surrogate.
x.txt is a text file containing the 8 coordinates of the point to evaluate, each in [0;100], separated by spaces or line breaks. Examples of points can be found in points/.
The current best solution is provided in points/xs.txt. Its coordinates are
99.999953599999997778 94.029649999999946886 95.15957000000000221 0.04209999999999999853 0 50.142644800000006455 32.61161999999998784 51.59949660000002325
The outputs of the blackbox are obtained with the command
./blackbox/truth/truth.exe ./points/xs.txt
which gives
0 0 0 0 -0.00712512 -0.00834278 -0.579333 -0.75 -6691 -0.565971 -0.414844 -3.37137e+07
for an objective value of -3.37137e+07.
This solution has been obtained by Guillaume Lameynardie. The previous best solutions were provided by Solène Kojtych and Mathieu Tanneau.
The solvers/ directory includes executions of the two solvers NOMAD and PSwarm. Note that the latter showcases an interface between STYRENE and MATLAB.
The problem was described in the followind reference. Please cite it if you use STYRENE:
@article{AuBeLe08,
Author = {C. Audet and V. B\'echard and S. {Le~Digabel}},
Title = {{Nonsmooth optimization through Mesh Adaptive Direct Search and Variable Neighborhood Search}},
Journal = {Journal of Global Optimization},
Volume = {41},
Number = {2},
Pages = {299--318},
Year = {2008},
Doi = {10.1007/s10898-007-9234-1},
Url = {http://dx.doi.org/doi:10.1007/s10898-007-9234-1}
}
Also note that a triobjective version of STYRENE is defined in this article:
@article{AuSaZg2010a,
Author = {C. Audet and G. Savard and W. Zghal},
Title = {{A mesh adaptive direct search algorithm for multiobjective optimization}},
Journal = {European Journal of Operational Research},
Volume = {204},
Number = {3},
Pages = {545--556},
Year = {2010},
Doi = {10.1016/j.ejor.2009.11.010},
Url = {https://dx.doi.org/10.1016/j.ejor.2009.11.010}
}