Skip to content

bbopt/styrene

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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/:

Compilation:

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).

Usage:

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/.

Best solution:

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.

Solvers:

The solvers/ directory includes executions of the two solvers NOMAD and PSwarm. Note that the latter showcases an interface between STYRENE and MATLAB.

References:

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}
}