-
Notifications
You must be signed in to change notification settings - Fork 2
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
[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 |
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 |
[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. |
[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 |
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() |
- Prerequisites
- Installing PARODIS
- Creating an Ansatz
- Setting up an Agent
- Setting up a Simulation
- Setting up Figures
Pareto Optimization
Modules
- Simulation
- Agent
- Model
- Controllers
- Cost Functions
- Sources
- Plotting
Other