Overview

VTMOP features two distinctly different user-interfaces, with varying levels of flexibility.

The first and simplest user-interface is the driver subroutine VTMOP_SOLVE, which is included in the module VTMOP_LIB. VTMOP_SOLVE accepts problem dimensions, simple bound constraints, an objective function, some (optional) parameter settings, and (optionally) any user-defined surrogate models and optimization routines. The default setting is to perform an adaptive search using the VTDIRECT95 software package, fit LSHEP surrogate models, and optimize the surrogate models using direct search with the polling strategy generalized pattern search (GPS).

In order to use VTMOP_SOLVE, the blackbox multiobjective cost function must be available as a Fortran 2008 subroutine. For information on how to achieve this, including cases where F is an ISO C/C++ function and when F is a command line executable, see Instructions for Writing a Blackbox Multiobjective Function for VTMOP_SOLVE Additional information on VTMOP_SOLVE is provided in the comments around each subroutine definition, in the file vtmop.f90.

The second interface is the return-to-caller interface, which allows advanced users to perform function evaluations in batches, in an independent environment. The return-to-caller interface is contained in the module VTMOP_MOD, and contains four driver subroutines (below). Additional information on these subroutines is provided in the code documentation, in the file vtmop.f90.

VTMOP also includes a checkpointing system, a detailed error handling system, and maintains a database of all function evaluations ever taken, which can be retrieved using optional output arrays.

For more detailed information on usage, see the full usage guide below.

Download, Build, and Test

The VTMOP TOMS download link contains all source code and documentation, exactly as it appeared in ACM TOMS Algorithm 1028.

The VTMOP LATEST download link contains the latest version of the source code, with any modifications (none yet) since the original ACM TOMS release.

From here on, the files samples.f90 and samplep.f90 will be referred to collectively as sample{s|p}.f90.

To build the sample code and test the installation, use the following command, where $(F90) is a Fortran 2008 compiler and $(OPTS) contains the compiler options (including the option to build with OpenMP).

If BLAS and LAPACK exist on your system, then $(LIBS) should contain flags to link those libraries and blas.f and lapack.f can be removed from the following command; otherwise, $(LIBS) can be ignored.

    $(F90) $(OPTS) $(LIBS) shared_modules.f90 blas.f lapack.f slatec.f \
        qnstop.f90 sVTdirect.f90 bVTdirect.f90 delsparse.f90           \
        linear_shepard.f90 vtmop.f90 vtmop_func.f90 sample{s|p}.f90    \
        -o sample{s|p}

To test the installation, use

    ./sample{s|p}

Before running the parallel driver samplep, set the following environment variables:

    export OMP_NESTED=TRUE
    export OMP_NUM_THREADS=T1,T2
where T1 = MAX(NUMBER OF PROCESSORS, NUMBER OF OBJECTIVES) and T2 = CEILING(NUMBER OF PROCESSORS / T1). For the sample code provided, the number of objectives is three.

This code has been tested with the GNU 5.4.0 (and newer) and the Intel 17.0.4 Fortran compilers. Other modern Fortran compilers may not offer full support for the Fortran 2008 standard. If using a different compiler, first check whether it supports

VTMOP Full Usage Guide

VTMOP offers two interfaces for solving blackbox MOPs. They are

In many situations, the objective function F can easily be wrapped in a Fortran subroutine, and the driver subroutine interface is preferred because of its ease of use. However, the return-to-caller interface offers a flexible alternative for situations where the computing environment makes wrapping F in a Fortran subroutine difficult or inefficient. Both interfaces are implemented in ISO Fortran 2008 and support some forms of OpenMP parallelism.

For information on how to implement your objective function as a Fortran function, including cases where F is an ISO C/C++ function and when F is a command line executable, see ``src/OBJ_FUNC_README``.

Further usage information is provided in the comments at the top of each subroutine, in their respective source files.

The VTMOP_SOLVE Driver

The driver subroutine VTMOP_SOLVE implements the same process as in the Return-to-Caller interface (below) but without reading and writing the state and using a Fortran implementation of F. The algorithm flowchart is shown below. For more information on how VTMOP performs these steps, see the TOMS Algorithm paper.

The search phase is performed either via DIRECT or via Latin hypercube design, with the choice being specified as an optional input. For a search via DIRECT, the search budget inputs are used to specify the iteration limit for VTDIRECT95. For a search via Latin hypercube design, the search budgets are used to specify the number of points in the design. In addition, VTMOP_SOLVE offers a checkpointing system and a parallel option.

Remark U.1

The Return-to-Caller Interface

In many real-world blackbox optimization problems, special purpose computing environments and libraries for coordinating the use of parallel resources require the evaluation of F to be decoupled from the optimization algorithm. In these situations, it is convenient to offer a return-to-caller interface, where F is evaluated only from outside of any Fortran subroutine's call stack. Here it is necessary to preserve the entire state of VTMOP's databases and internal variables in between calls to F. The state is recorded in a Fortran derived data type VTMOP_TYPE, created by the subroutine VTMOP_INIT, and stored between invocations of components of VTMOP. The cycle is as follows:

  1. k -> 0;
  2. CALL VTMOP_INIT (this creates a VTMOP_TYPE structure holding the problem parameters and VTMOP's state variables);
  3. CALL VTMOP_LTR (this computes the lower and upper bounds for the next LTR);
  4. evaluate F at user-selected x-values, which are space-filling in the LTR returned by VTMOP_LTR;
  5. CALL VTMOP_OPT (this computes the kth batch of candidate designs);
  6. evaluate the kth batch of candidate designs from VTMOP_OPT with F;
  7. k -> k+1;
  8. check the termination conditions (max budget or iteration limit), and either terminate by calling VTMOP_FINALIZE or return to Step 3.

Parallel Interface

Two opportunities for parallelism are offered in VTMOP.

Remark U.2

Remark U.3

Remark U.4

Remark U.5

Organization and Package Layout

As previously mentioned, the VTMOP TOMS download link contains all source code and documentation, exactly as it appeared in ACM TOMS Algorithm 1028, and the VTMOP LATEST download link contains the latest version of the source code, with any modifications (none yet) since the original ACM TOMS release.

The physical organization of this download is as follows:

The dependency chart for these files is shown below

Remark U.6

Remark U.7

Remark U.8

Remark U.9

Citations and Additional References

VTMOP is available free of charge via a permissive MIT LICENSE. We only ask that if you use VTMOP as part of a published work, please cite the following publication:

    @article{chang2022algorithm,
      author={Chang, Tyler H. and Watson, Layne T. and Larson, Jeffrey and Neveu, Nicole and Thacker, William I. and Deshpande, Shubhangi and Lux, Thomas C. H.},
      year={2022},
      title={Algorithm {1028}: {VTMOP}: {S}olver for blackbox multiobjective optimization problems},
      journal={ACM Transactions on Mathematical Software},
      volume={48},
      number={3},
      articleno={36},
      pages={1-34},
      doi={10.1145/3529258}
    }