Skip to content

ParetoController

Matthias K. Hoffmann edited this page Jun 1, 2021 · 8 revisions

ParetoController

controller = ParetoController( numScenarios )

The Pareto controller is built on top of the ExplicitController. This means, that at each time step of the simulation (or when getInput is called), the underlying optimization problem is prepared anew using parameter values instead of parameter variables. This base model is then wrapped into YALMIP optimizer objects, depending on the configured Pareto method that shall be used to determine the Pareto fronts.

Having the ParetoController extend the ExplicitController allows for it to be more scalable than the completely symbolic system representation, and the overhead caused by rebuilding the underlying problem at each time step is small compared to the increased performance gained by having a much smaller parametric optimizer, which encodes only parameters necessary for determining a Pareto front.

The ParetoController is interfaced almost identically to the other controller types. The controller will derive a pareto-optimal input trajectory $u(n|k)$ by finding the Pareto frontier of the given optimization problem, i.e. of the given cost functions, and then selecting one solution from this frontier based on a configured metric function. Internally, it uses different problem representations, depending on which front determination scheme to applied.

Properties

Property Description
config Struct with configuration parameters.
status Struct with informations of the current controller status.
evaluatedPoints Matrix with evaluated Pareto-optimal points. Can for example be used in front determination schemes.
paretoCurrentStep Variable with the current step number in front determination scheme. Is used for the Pareto progress bar.
paretoMaxStep Variable with the estimated max number of evaluations. Leave empty if max number cannot be estimated.

Configuration

Field Default value Description
drMin 0.2 Minimal distance ratio, controls resolution of pareto front by predicting future changes
dr2allMin 0.2 Minimal distance to already found points, controls resolution of pareto front by discarding points with a lower distance to at least one other point
minRatioWeights 1e-5 Minimal ratio of weights as results in AWDS to prevent numerical errors
focusPoint 0 Focus point for the FPBI defining the search direction, with 0 marking the utopia point
MWAweights 5e-4 Lower weight for MWA and MWAN to approximate the extreme points
interactivity false Toggles interactive Pareto-optimal point selection from the pareto front
extremePointFunction 'MWAN' Method for deriving extreme points, can be 'lexicographic', 'OAA' or a function handle
metricFunction 'CUP' Metric for selecting solution from pareto front, can be 'CUP', 'AEP', 'ATN', 'RoC' or a function handle
frontDeterminationScheme 'FPBI' Scheme for deriving a pareto front, can be 'AWDS', 'NBI' or a function handle
normalization 'dynamic' Method by which to normalize the front for metric application, can be 'dynamic' or 'fixed'
fixedNormValues [] If normalization is set to 'fixed', objective values are normalised by fixedNormValues, thus fixedNormValues must be a vector of length(N_objectives)
ignoreInPareto [] Indices of cost functions for that are ignored in Pareto optimization. Ignored cost functions are added to the scalarized cost function and weighted by their default weight.
checkRedundancy false Flag to control if the redundancy of the cost functions is checked
redundantCorrelation 0.9 Threshold for the correlation of two objectives. If the correlation coefficient of two cost functions exceeds this they are considered to correlate.
independantCorrelation 0 Threshold for the correlation of two objectives. If the correlation coefficients of a cost functions with all others falls under this threshold it is considered to be independant and thus can be minimized without affecting the other cost functions.

Methods

Extreme Point Function

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

Method to determine the Extreme Points of the optimization problem, meaning the points that minimize exactly one objective. The function can be selected by setting agent.config.pareto.extremePointFcn as a String or Function Handle. Possible functions are:

Function Handle String Description
@initializeLex 'Lex' Minimizes one objective, sets this value as a constraint for the minimization of the next objective and continues this until all objectives are used in lexicographic order.
@initializeMWA 'MWA' Good approximization of the extreme points of a convex problem. Sets one weight to 1 and the rest to ParetoController.config.MWAweights.
@initializeMWAN 'MWAN' Better approximization of the extreme points of a convex problem. Calculates the Utopia and Nadir point first and normalizes the optimization problem before applying MWA.
@ArbitraryFunctionHandle ---- User-defined Extreme Point Function Handle.

Pareto Front Determination Scheme

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

Method for the determination of Pareto-optimal points and thus the Pareto front. The function can be selected by setting agent.config.pareto.frontDeterminationScheme as a String or Function Handle. Possible functions are:

Function Handle String Description
@determineAWDS 'AWDS' Adaptive Weight Determination Scheme: Uses the plane parameters of a hyperplane, spanned by n Pareto-optimal points as weights for the weighted sum method.
@determineNBI 'NBI' Normal Boundary Intersection: Evenly samples the Boundary Plane and projects these points in normal direction onto the Pareto front.
@determineFPBI 'FPBI' Focus Point Boundary Intersection: Uses the same scalarization technqiue as NBI, but the starting points and direction are different. As searching direction the focus vector connecting the planes midpoint with the focusPoint is used.
@determineASBI 'ASBI' Adaptive Search Boundary Intersection: Recursive Boundary Intersection Method, where the starting point is calculated as the mean of k known Pareto optimal points and the search direction as the normal vector of their connection line. Best applied for two objectives.
@ArbitraryFunctionHandle ---- User-defined Pareto Front Determination Scheme Function Handle

Metric Function

[idx, utility] = metricFunction( paretoObj, timeStep )

Method for the automatic selection of a Pareto-optimal solution. The function can be selected by setting agent.config.pareto.metricFunction as a String or Function Handle. Since it proves useful to normalize a given Pareto front a dynamic normalization the Pareto fronts are normalized using the Utopia and Nadir point in any predefined metric. Possible functions are:

Function Handle String Description
@selectCUP CUP Closest to utopia point: Minimizes the distance to the utopia point in the normalized objective space
@selectRoC RoC Radius of Curvature: Selects the point with the smallest radius of curvature in the normalized objective space as the knee point.
@selectATN ATN Angle to Neighbors: Selects the point with the smallest angle to neighbors as the knee point.
@selectAEP AEP Angle to Extreme Points: Calculates the angle from a Pareto optimal point to the extreme points. The point with the AEP most similar to the Utopia points AEP is selected.
@ArbitraryFunctionHandle ---- User-defined Metric Function Handle