Skip to content

svrama/ParetoRecipes.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ParetoRecipes

Documentation Build Status
Stable Dev Build Status Build Status Build Status Coverage Coverage

Summary

ParetoRecipes generates Pareto plots from a set of points in a multiobjective optimization problem using Plots.jl. A Pareto plot consists of the set of points together with a Pareto front (alternatively, Pareto frontier or Pareto set). Colloquially, we will refer to such plots as Paretos.

ParetoRecipes does not focus on the multiobjective optimization itself, or even on breadth of exact and approximate algorithms to trace out Pareto fronts for optimization problems. You can find such features and more in the MultiJuMP package.

Currently, ParetoRecipes only supports two-dimensional (2D) Paretos with an extremely inefficient brute-force algorithm for finding the Pareto front.

Example

We plot a simple Pareto for a minimization problem with four points: (1, 0), (0, 1), (1, 1), and (2, 2). The Pareto front consists of the first two points, (1, 0) and (0, 1).

using ParetoRecipes
using Plots

pareto([[1, 0], [0, 1], [1, 1], [2, 2]])

Pareto with four points using PGFPlotsX backend

Implementation: Recipes

Thomas Breloff (@tbreloff) created the lightweight RecipesBase package that inspired the design of ParetoRecipes.

ParetoRecipes offers a set of recipes. Recipes abstract away the dependencies on plotting libraries like Plots.jl. Each recipe is a @recipe macro from RecipesBase. There are different kinds of recipes. The @recipe for a Pareto plot in ParetoRecipes is a series recipe (@series) that composes two plots: a scatter plot (:scatter) and a line plot (:path).

The GraphRecipes.jl repo has many more examples of the power of series recipes.

Disambiguation

ParetoRecipes does not currently support other concepts named after the economist Vilfredo Pareto:

Acknowledgments

This work was supported in part by the United States government under the DARPA DSSoC program.