Documentation of the module main.py used for the experimentation of: Towards a 
Pareto Front Shape Invariant Multi-Objective Evolutionary Algorithm Using 
Pair-Potential Functions.

NAME
       main.py - test a multi-objective evolutionary algorithm (MOEA)

SYNOPSIS
       main.py MOEA H1 H2 MOP OBJS GENS RUNS
       main.py OPTION

DESCRIPTION
       This module is used to test a MOEA on a selected multi-objective problem 
       (MOP) with a given number of objective functions for a specific number 
       of independent runs. The required arguments are described as follows:

       MOEA
              It must be a valid MOEA name. The valid MOEA names are: NSGA-III, 
              NSGA-III-RSE, NSGA-III-GAE, NSGA-III-COU, NSGA-III-PT, 
              NSGA-III-MPT, NSGA-III-GPT, and NSGA-III-KRA.

       H1
              It must be an integer greater than zero. It represents the number 
              of divisions per objective function for the boundary layer used
              for the generation of a weight vector-based reference set. The 
              values 12, 6, 3, and 3 are selected for MOPs with 3, 5, 8, and 10 
              objective functions, respectively.

       H2
              It must be an integer greater than or equal to zero. It 
              represents the number of divisions per objective function for the 
              inner layer used for the generation of a weight vector-based 
              reference set. The inner layer is not generated when a value of 
              zero is given. The values 0, 0, 2, and 2 are selected for MOPs 
              with 3, 5, 8, and 10 objective functions, respectively.

       MOP
              It must be a valid MOP name. The valid MOP names are: DTLZ1, 
              DTLZ2, DTLZ3, DTLZ4, DTLZ5, DTLZ6, DTLZ7, DTLZ1_MINUS, 
              DTLZ2_MINUS, DTLZ3_MINUS, DTLZ4_MINUS, DTLZ5_MINUS, DTLZ6_MINUS, 
              and DTLZ7_MINUS.

       OBJS
              It must be an integer greater than one. It represents the number 
              of objective functions of the MOP. In our experiments, all MOPs 
              are scaled to 3, 5, 8, and 10 objective functions.

       GENS
              It must be an integer greater than or equal to zero. It 
              represents the maximum number of generations for the execution of 
              the MOEA. For DTLZ1, DTLZ5, DTLZ6, and DTLZ7 the values 400, 600, 
              750, and 1000 are selected for the versions with 3, 5, 8, and 10 
              objective functions, respectively. For DTLZ2 the values 250, 350, 
              500, and 750 are selected for the versions with 3, 5, 8, and 10 
              objective functions, respectively. For DTLZ3 the values 1000, 
              1000, 1000, and 1500 are selected for the versions with 3, 5, 8, 
              and 10 objective functions, respectively. For DTLZ4 the values 
              600, 1000, 1250, and 2000 are selected for the versions with 3, 
              5, 8, and 10 objective functions, respectively. The same values 
              are used for the MINUS versions of each MOP.

       RUNS
              It must be an integer greater than zero. It represents the number 
              of independent runs that the MOEA will be tested on the selected 
              MOP. In our experiments, all MOEAs are executed for 30 
              independent runs in each MOP.

       The following option can be used:

       --help 
              Display this help and exit.

REQUIREMENTS
       A computer with the installation of Python 3.8 is needed. The modules 
       numpy, matplotlib, and scipy are required.

EXAMPLE
       For running the module main.py, go to NSGA-III-K/ and write:

       IPython console users:
              %run main.py NSGA-III-RSE 12 0 DTLZ1_MINUS 3 400 1

       Windows users:
              python main.py NSGA-III-RSE 12 0 DTLZ1_MINUS 3 400 1

       Linux users:
              python3 main.py NSGA-III-RSE 12 0 DTLZ1_MINUS 3 400 1

       The previous line executes the module main.py to test the NSGA-III-RSE 
       on the DTLZ1_MINUS with three objective functions for one independent 
       run. A boundary layer with twelve divisions per objective function is
       used for the weight vector-based reference set and the inner layer is 
       not required. The maximum number of generations is set to four hundred 
       generations.

RESULTS
       On success, the output files containing the approximation sets are 
       generated in NSGA-III-K/Results/.

CONTENTS
       The folder "NSGA-III-K" contains the source code of the module main.py.
       The folder "Supplementary material" contains the supplementary material
       of the paper: Towards a Pareto Front Shape Invariant Multi-Objective 
       Evolutionary Algorithm Using Pair-Potential Functions.

REFERENCE
       L. A. Márquez-Vega, J. G. Falcón-Cardona, E. Covantes Osuna, Towards a 
       Pareto Front Shape Invariant Multi-Objective Evolutionary Algorithm Using 
       Pair-Potential Functions, in Batyrshin, I., Gelbukh, A., Sidorov, G. (eds) 
       Advances in Computational Intelligence, MICAI 2021, vol 13067 of Lecture 
       Notes in Computer Science, Springer International Publishing, 2021, 
       pp. 369-382. doi: 10.1007/978-3-030-89817-5_28

       Or you can use the following BibTex entry:
       
       @inproceedings{Marquez2021,
              author={M{\'a}rquez-Vega, Luis A. and Falc{\'o}n-Cardona, Jes{\'u}s Guillermo and {Covantes Osuna}, Edgar},
              editor={Batyrshin, Ildar and Gelbukh, Alexander and Sidorov, Grigori},
              title="{Towards a Pareto Front Shape Invariant Multi-Objective Evolutionary Algorithm Using Pair-Potential Functions}",
              booktitle={Advances in Computational Intelligence, MICAI 2021},
              year={2021},
              publisher={Springer International Publishing},
              pages={369--382},
              isbn={978-3-030-89817-5},
              doi={10.1007/978-3-030-89817-5_28},
              volume={13067},
              series={Lecture Notes in Computer Science}
       }