Skip to content

Defining custom Pareto evaluation functions

Jens Engel edited this page Jan 30, 2021 · 1 revision

Defining Custom Pareto-evaluation Functions

PARODIS uses function handles to the four main types of Pareto functions. These are:

  • Extreme Point Functions: Functions for finding the points that minimize exactly one objective
  • Optimizer Functions: Functions for defining the optimizer used in the Front Determination Scheme
  • Front Determination Schemes: Functions for calculating the Pareto front
  • Metric Functions: Functions for selecting a Pareto-optimal point as a solution

Defining Extreme Point Functions

[extremePoints, inputsEP, slacksEP, parametersEP] = initializeExtremePointFunctionName(paretoObj, optimizeConstraints, costExpressions, agent)

Extreme Point Functions are meant to calculate the initial points of the Pareto-evaluation, output them with their respective inputs, slacks and paretoParameters, and set Utopia and Nadir points by any means.

Input Type Description
paretoObj ParetoController ParetoController object for setting Utopia and Nadir point.
optimizeConstraints YALMIP Constraint Constraints the system is subject to.
costExpressions cell array Cell array with cost functions.
agent Agent Calling Agent object.
Output Type Description
inputs n-by-1 cell array Saves the output u of every extreme point evaluation as a cell
paretoParameters matrix Matrix with the paretoParameters for finding each extreme point as a row vector

Defining Optimizer Functions

optimizer = prepareOptimizerMethodName(paretoObj, optimizeConstraints, costExpressions, agent, extremePoints)

Optimizer Functions output the optimizer that is used in the Front Determination method. Optimizer objects are YALMIP objects that presolve the optimization problem. They take numerical values and replace preset symbols with these. For more information regard https://yalmip.github.io/command/optimizer/. These functions take the system's constraints and scalar cost expressions to formulate the scalarization.

Input Type Description
paretoObj ParetoController ParetoController object for accessing config, symbolic weights, etc.
optimizeConstraints sdpvar Constraint output by ParetoController.prepareProblem().
costExpressions sdpvar cell array Cost expressions resulting from ParetoController.prepareProblem().
agent Agent Agent object for accessing model and agent config.
extremePoints k-by-k matrix Optional: Extreme points resulting from the extreme point function.
Output Type Description
optimizer optimizer Optimizer object used in the front determination scheme

Defining Front Determination Schemes

[inputs, slacks, front, parameters] = determinefrontDeterminationSchemeName( paretoObj, agent, optimizer, extremePoints, preselectedParameters )

Front Determination Schemes are functions that calculate the Pareto front by any means and output the newfound points and their respective inputs, slacks and paretoParameters. It can also be useful to update the Nadir point for better normalization.

Input Type Description
paretoObj ParetoController ParetoController object for accessing config, status, etc.
agent Agent Agent object for accessing model and agent config.
optimizer optimizer Optimizer for calculating the new solution by inputing paretoParameters.
extremePoints k-by-k matrix Extreme points resulting from the extreme point method.
preselectedParameters k-by-1 vector Optional: A preset paretoParameters vector to calculate the corresponding solution for.
Output Type Description
inputs m-by-1 cell array Saves the output u of every Pareto-evaluation as a cell array.
slacks m-by-1 cell array Saves the slack variable values of every Pareto-evaluation as a cell array.
front m-by-k matrix Matrix with Pareto optimal points as rows.
paretoParameters matrix Matrix with the paretoParameters of each Pareto-optimal point as a row vector.

Defining Metric Functions

[idx, utility] = selectMetricFunctionName( varargin )

Metric functions are used for automatically selecting a Pareto-optimal point on the Pareto front. They can be used by either inputting a Pareto front to calculate the metric for or by inputting an agent object with a timestep and selecting the corresponding Pareto front.

Input Type Description
agentObj Agent Agent object where the Pareto front is taken from the history.
timeStep integer Timestep to load the Pareto front from.

OR

Input Type Description
Pareto front m-by-k matrix Pareto front with points as row vectors
Output Type Description
idx integer Index of the chosen Pareto-optimal point

Naming Convention

The predefined methods are accessible by setting the corresponding config parameter to a string with matching name. Users can expand this set of strings by following the naming convention for these methods and adding the new function to the ParetoController.

Method type Prefix Example
Extreme Point Function initialize initializeOAA()
Optimizer Methods prepare prepareNBI()
Front Determination Schemes determine determineNBI()
Metric Function select selectCUP()