/DBMOPP_generator

A Distance-Based Many-Objective Visualisable Test Problem Generator

Primary LanguageMATLABMIT LicenseMIT

DBMOPP_generator

Codebase for Distance-based Multi-Objective Point Problem instances.

This repository holds Matlab code for the Distance-Based Multi-Objective Point Problem (DBMOPP) instance generator.

The DBMOPP generator in the DBMOPP.m file is the most recent version of the generator, and follows an object-oriented design.

This is a substantial new version of the generator including the integration of hard and soft constraints and additional features, accepted in IEEE Transactions on Evolutionary Computation.

Jonathan E. Fieldsend, Tinkle Chugh, Richard Allmendinger, and Kaisa Miettinen. 2021. A Visualizable Test Problem Generator for Many-Objective Optimization, IEEE Transactions on Evolutionary Computation, to appear. doi: https://10.1109/TEVC.2021.3084119.

All instance generation functionality is in this single file. Note there some additional plotting functions still being added. Illustrations of usage directly. Details regarding the earlier version of the generator can be found towards the bottom of this page.

DBMOPP class

Public methods

The public methods of this class are as follows:

DBMOPP(numberOfObjectives, numberOfDesignVariables, numberOfLocalParetoSets, numberOfDominanceResistanceRegions, numberOfGlobalParetoSets, proportionOfConstrainedSpaceIfChecker, globalParetoSetType, constraintType, numberOfdiscontinousObjectiveFunctionRegions, variableSolutionDensity, varyingObjectiveScales, proportionOfNeutralSpace, monte_carlo_samples) Which constructs an instance of the problem

plotLandscapeForSingleObjective(index, resolution) which plots the 2D landscape of the objective numbered by index. Plot generated by a grid with resolution samples at each dimension.

plotParetoSetMembers(resolution) Samples points on a grid with resolution samples at each dimension, plots those which are Pareto optimal for this instance.

plotDominanceLandscape(resolution) Plots the dominance landscape of this problem, by generating by a grid with resolution samples at each dimension.

plotProblemInstance() Plots the different regions set up for this problem instance.

plotCorrelation(resolution, corr_type, summary_type) Plots the 2D correlation plot for this problem. Samples points on a grid with resolution samples at each dimension. Uses the corr_type correlation type (Pearson [default], Kendall or Spearman) and summary_type (mean [default], median, max and min). Correlation value/matrix at each grid point is calculated put placing a circle radius 10^-6 around each point and calculating with respect to 100 equally placed samples on the edge of this circle.

isAParetoSetMember(x, suppressWarning) Returns true if x is a Pareto set member, false otherwise. Obviously you should not be using this method during an optimisation! Pass suppressWarning as true if you don't want to be reminded of this...

getAParetoSetMember() Returns a Pareto decision vector uniformly at random for this instance. It also returns the corresonding 2D projection for the design location.

evaluate(x) evaluates a design vector x

Help information can be accessed at the command line for each of the public methods, e.g. the command

help DBMOPP/evaluate

will display

    [objective_vector, soft_constraint_violation, hard_constraint_violation] = evaluate(obj,x)
 
    Evalutes the design vector x under this instance of the problem
 
    INPUTS
    x = design vector to evaluate, should adhere to the box
      constraints of the problem, i.e. between -1 and +1 on all
      dimensions
 
    OUTPUTS
  
    objective_vector = vector of objective values associated with
      x for this DBMOPP problem. If x violates any soft or hard
      constraints will be a vector of NaNs
    soft_constraint_violation = Soft constraint violation. 0 if
      no violation, otherwise value increases with distance to the
      boundary from the constrain/legal space
      hard_constraint_violation = Hard constraint violation. Value
      of true if there is a violation, false otherwise 

Example usage

First let's create an instance from the generator, this is done with the constructor, which creates a DBMOPP instance based on the arguments. Default values are used when arguments are missing (see documentation in code). An example would be

my_instance = DBMOPP(4,2,0,0,5,0,1,0,0,false,false,0);

This creates my_instance which has 4 objectives, 2 decision variables, 5 disconnected Pareto set regions which have global Pareto set type '1', meaning they are partially intersecting -- the entire Pareto front can be described by fewer than five of the regions, but not one alone.

Calling

my_instance.plotProblemInstance();

plots a helpful visualisation of the problem as constructed, in this case,

Constructed problem instance

As we don't have e.g. any constrained space, or neutral space in this instance example, it is showing the attractor locations (labelled with the objective they minimise) and the convex hull of the region they bound.

Calling my_instance.plotParetoSetMembers() plots which samples on the default resolution (a 500 by 500 grid) are Pareto optimal. As we have set up a partially intersecting Pareto set type, some areas in the convex hull are additionally penalised (the objective values increased), meaning they are not Pareto optimal, this plot shows us the Pareto optimal locations from the grid of samples

Pareto optimal points from grid

If we look at the fitness landscape for objectve 1, by calling

my_instance.plotLandscapeForSingleObjective(1);

we can see how this is affected both by the attractors in each region, and the offset applied inside the convex hull of the attractor groupings defining the regions, to induce the partially overlapping Pareto sets.

Objective 1 landscape

The evaluate method allows you to utilise the generated instance to assess the quality of a design, it returns the objective vector, and the soft and hard constrain violation values. E.g.

x = [0.6 0.4];
[y, sc, hc] = my_instance.evaluate(x);

Evaluates the design x. This instance has no constraints (bar box constraints), so the sc and hc values are both zero.

y
y =

    0.3218    0.1977    0.5040    0.4860
sc

sc =

     0

hc

hc =

     0
 

The number of solutions found which are Pareto optimal under the instance configuration can be assessed using the isAParetoSetMember method:

my_instance.isAParetoSetMember(x,true)

ans =

  logical

   0

In this case, x is not Pareto optimal (as can also be seen in the earlier plots), a close neighbour is though:

my_instance.isAParetoSetMember([-0.487,0.4],true)

ans =

  logical

   1

Let us generate a more complicated instance

my_complex_instance = DBMOPP(3,10,3,3,2,0.3,2,8,2,false,true,0.2);

This is a 10-dimensional problem, with three competing objectives. 30% of the design space is soft constraint violating, 20% is neutral, there are 2 global Pareto set regions, which do not duplicate performance. There are also local fronts and domainace resistance regions.

Complex problem instance

plotDominanceLandscape -- will plot the dominance landscape of an instance

Older GECCO 2019 generator

Previous version of the generator with a subset of the functionality is described here:

Jonathan E. Fieldsend, Tinkle Chugh, Richard Allmendinger, and Kaisa Miettinen. 2019. A Feature Rich Distance-Based Many-Objective Visualisable Test Problem Generator. In Genetic and Evolutionary Computation Conference (GECCO ’19), July 13–17, 2019, Prague, Czech Republic. ACM, New York

Paper availabale from

Insititutional repository: https://ore.exeter.ac.uk/repository/handle/10871/36824

Publisher Doi: https://doi.org/10.1145/3321707.3321727

The codebase for this earlier paper is in the GECCO2019 folder.

USAGE:

Two main functions are

distance_problem_generator -- this generates a problem instance (please see its help documentation)

distance_points_problem -- this takes a design vector and a problem instance and returns its quality vector (please see its help documentation)

Other .m files are helper/plotter functions.