Announcing version 1.0 of

Jon and I are pleased to announce version 1.0 of, the free, open-source ε-nondominated sorting utility. Find the ε-nondominated solutions in your data today! ε-nondominated sorting lets you specify the resolution of your objectives to obtain a set of meaningfully distinct efficient points in your data set. (Confused? See this post for more context.)

ε-nondominated sorting

ε-nondominated sorting: Red ε-boxes are dominated, yellow solutions are ε-nondominated.

  • available on GitHub
  • licensed under LGPL
  • pure Python implementation with minimal dependencies (only standard library, does not require numpy)
  • ε-nondominated sorting
  • “importable”: use pareto.pyfrom other Python scripts
  • “pipelineable”: include in a Unix pipeline
  • tag-along variables: columns (even non-numeric ones) other than those to be sorted may be retained in the output
  • verbatim transcription of input: nondominated rows in the output appear exactly the same as they did in the input
  • flexible column specification: e.g. 0-5 6 10-7
  • mix minimization and maximization objectives
  • skip header rows, commented rows, and blank lines
  • annotate each row in the output with the file it came from, including stdin
  • add line numbers to annotations
  • index columns from the end of the row, allowing rows of varying lengths to be sorted together

(source code for the impatient)

(previous announcement: version 0.2)

2 thoughts on “Announcing version 1.0 of

  1. I was debating on whether to add this to the main body of the post but instead I’ll just comment for the time being!

    In order to run this program with the command line interface, you need to open up a terminal (on a mac or Linux machine) or the cmd command prompt (on Windows). Let’s say you have some Borg MOEA output data files on a folder called Data, that is a subfolder of where you have stored. And you have python successfully installed on your computer, and it’s part of your computer’s path. Assume you have 8 decision variables and 6 objectives. Borg outputs the decision variables first, then the objectives. And it does so by having # in front of ‘comments’ at the beginning of the file. And you want an output called output.txt. Then, the command to run the sort would be:


    python .\Data\your_first_filename_here.txt .\Data\your_second_filename_here.txt -o 8-13 -c “#” -e your epsilon values go here –output output.txt


    python ./Data/your_first_filename_here.txt ./Data/your_second_filename_here.txt -o 8-13 -c “#” -e your epsilon values go here –output output.txt

    The hangup is that the file name character is / on Linux and Mac, whereas it is \ on Windows. But the code does work well in Windows, as I can verify.

  2. Pingback: Water Programming Blog Guide (Part I) – Water Programming: A Collaborative Research Blog

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s