How to Contribute
This system is developed in Python programming language, using poetry as project and package manager, unittest library for unit testing and Sphinx system for documentation generation. Same tool set should be use for contribution to the project.
Contribution is encouraged in following four domains:
Designing novel optimization methods. Requirements:
Algorithms should be derived from the specified class.
Class that implements metaheuristic optimization should be derived either from the
uo.algorithm.metaheuristic.single_solution_metaheuristic.SingleSolutionMetaheuristic
class, or from theuo.algorithm.metaheuristic.population_based_metaheuristic.PopulationBasedMetaheuristic
. It should be placed into separate directory within/uo/algorithm/metaheuristic/
directory.Class that implements exact optimization should be derived from the
uo.algorithm.Algorithm
class. That class should be placed into separate directory within/uo/algorithm/
directory.
Type hints and documentation.
All programming objects (classes, functions, variables, parameters, optional parameters etc.) should be type-hinted
All programming objects (classes, functions, etc.) should be properly documented using the system Sphinx, reStructuredText and doc comments within the code.
Each of the implemented algorithm should have separate documentation web page, where that algorithm is described and documented. At least, there should be the link from doc comments within implemented functionality toward the web page that explains algorithm and vice versa.
Unit testing coverage.
Implemented programming code should be fully covered with unit tests.
Here, unittest framework used.
Test should be placed into separate sub-directory under
/uo/tests/
directory. Directory structure within/uo/tests/
directory should mirror directory structure of the/uo/
directory.All developed code should be covered with unit test, and test coverage rate should be not less than 80%.
Building application for solving optimization problems. Requirements:
Program code for specific problem should to be put into the respective directory.
Each of the problems should have its own directory, with name equals to problem name.
Code for multi-objective optimization should be placed under
/opt/multi_objective/
directory, while code for single-objective optimization should be placed under/opt/single_objective/
directory.Code for single-objective combinatorial optimization should be placed under
opt/single_objective/comb/
directory, for single-objective constraint optimization within the/opt/single_objective/constraint/
directory, and code for single-objective global optimization in/opt/single_objective/global/
directory.
Implemented applications should have examples of use for every approach contained within application.
Those examples should be placed in root
/
directory, and file name for example should be<problem>_<algorithm>_<representation>_exec.py
.
For each problem under consideration, the problem class for specific problem should have method that read textual file and create instance of that specific problem.
For each problem under consideration, there should be one file (named
solver.py
, within the respective problem directory). That file will be entry point for all the methods aimed at solving the specific problem. All parameters that governs methods execution should be accessible to user through command-line parameters. Command-line parameters should have sufficient and adequate help system.Type hints and documentation.
All programming objects (classes, functions, variables, parameters, optional parameters etc.) should be type-hinted
All programming objects (classes, functions, etc.) should be properly documented using the system Sphinx, reStructuredText and doc comments within the code.
Problem that is solved should have separate documentation web page, where that problem is described and documented. At least, there should be the link from problem web page toward the web page that explains method that is used and vice versa.
Unit testing coverage.
Implemented programming code should be fully covered with unit tests, and unittest framework is used.
Test should be placed into separate sub-directory under
/opt/tests/
directory. Directory structure within/opt/tests/
directory should mirror directory structure of the/opt/
directory.All developed code should be covered with unit test, and test coverage rate should be not less than 80%.
Designing and executing comparison experiments, using previously builded applications. Requirements:
Experiments should use only previously developed applications, not Python programming constructs. Comparison experiments should be invoked by batch/command file.
Comparison experiments should be placed under
/comparison/
directory.
Visualizing experimentally obtained data (either data about comparison, either data about algorithm execution). Requirements:
Developed solution for the problems under consideration should be visualized. Visualizations should be invoked by batch/command file.
Visualization efforts should be placed under
/visualization/
directory.
Contributors
Contribution domains
Contribution in the designing novel optimization methods:
a.1. Library and application:
Initial overall structure and organization - [VladimirFilipovic]
a.2. Total Enumeration (TE) exact algorithm:
Structure, organization and main loop implementation - [VladimirFilipovic]
Implementation with bit-array based complex counters (class
ComplexCounterBitArrayFull
, using bitstring.BitArray class) - [VladimirFilipovic]Implementation with int based complex counters (classes
ComplexCounterUniformFull
andComplexCounterUniformAscending
, using int values) - [VladimirFilipovic]
a.3. Variable Neighborhood Search Variable Neighborhood Search (VNS) metaheuristics:
Structure, organization and main loop implementation - [VladimirFilipovic]
Implementation of shaking and local searches with binary representation (in class
VnsShakingSupportStandardInt
, using int predefined type) - [VladimirFilipovic]Implementation of shaking and local searches with binary representation (in class
VnsShakingSupportStandardBitArray
,usingbitstring.BitArray
class) - [VladimirFilipovic]
a.4. Genetic Algorithms Genetic Algorithm (GA) metaheuristics:
Structure, organization and main loop implementation - [MarkoRadosavljevic], [VladimirFilipovic]
Making class
uo.algorithm.metaheuristic.genetic_algorithm.GaOptimizer
to be abstract and dividing its functionality into non-abstract classesuo.algorithm.metaheuristic.genetic_algorithm.GaOptimizerGenerational
anduo.algorithm.metaheuristic.genetic_algorithm.GaOptimizerSteadyState
- [VladimirFilipovic]Implementation of GA selection methods (in classes:
GaSelectionIdle
,GaSelectionRoulette
) - [MarkoRadosavljevic]Implementation of GA crossover one point method (contained within class:
GaCrossoverSupportOnePointBitArray
), with binary representation (using bitstring.BitArray class) - [MarkoRadosavljevic]Implementation of GA mutation one point method (contained within class:
GaMutationSupportOnePointBitArray
), with binary representation (using bitstring.BitArray class) - [MarkoRadosavljevic]
a.4. Electromagnetism-like Algorithm_Electromagnetism_Like_Metaheuristic (EM) metaheuristics:
Structure, organization and main loop implementation - [AndjelaDamnjanovic]
Contribution in solving combinatorial optimization problems:
b.1. Ones Count Max Problem Ones Count Max Problem:
Representation of the problem (in class
MaxOnesCountProblem
) and solution (BitArray-based in classMaxOnesCountProblemBitArraySolution
and int-based in classMaxOnesCountProblemIntSolution
) - [VladimirFilipovic]Integer Linear Programming method (using linopy library) - [VladimirFilipovic]
Total Enumeration method, with solution that has binary BitArray representation - [VladimirFilipovic]
Variable Neighborhood Search method, with solution that has binary BitArray representation - [VladimirFilipovic]
Variable Neighborhood Search method, with solution that has binary int representation - [VladimirFilipovic]
Genetic Algorithm method, with solution that has binary BitArray representation - [VladimirFilipovic]
Entry point of the all methods for solving this problem, in file
/opt/single_objective/comb/ones_count_max_problem/solver.py
. All parameters that governs method execution are accessible to user through command-line. - [VladimirFilipovic]
b.2. Minimum Multi Cut Problem Minimum Multi Cut Problem:
Representation of the problem (in class
MinMultiCutProblem
, that uses ng.Graph class for class representation) and solution with BitArray-based representation (in classMinMultiCutProblemBitArraySolution
) - [MarkoRadosavljevic]Variable Neighborhood Search method, with solution that has binary BitArray representation - [MarkoRadosavljevic]
Genetic Algorithm method, with solution that has binary BitArray representation - [MarkoRadosavljevic]
b.3. Set Covering Problem Minimum Set Cover Problem:
Representation of the problem (in class
MinSetCoverProblem`and solution with `BitArray
-based representation (in classMinSetCoverProblemBitArraySolution
) - [AndjelaDamnjanovic]Electromagnetism-like Metaheuristic method, with solution that has binary BitArray representation - [AndjelaDamnjanovic]
ILP model, with linopy library and Gurobi solver - [AndjelaDamnjanovic]
Contribution in solving global optimization problems:
c.1. Max Function One Variable Problem:
Variable Neighborhood Search method, with solution that has binary BitArray representation - [VladimirFilipovic]
Variable Neighborhood Search method, with solution that has binary int representation - [VladimirFilipovic]
Entry point of the all methods for solving this problem, in file
/opt/single_objective/glob/max_function_one_variable_problem/solver.py
. All parameters that governs method execution are accessible to user through command-line. - [VladimirFilipovic]
Contributor List
Vladimir Filipović, https://github.com/vladofilipovic e-mail: vladofilipovic@hotmail.com
Marko Radosavljević, https://github.com/Markic01 e-mail: mi20079@alas.matf.bg.ac.rs
Anđela Damjanović, https://github.com/AndjelaDamnjanovic e-mail: mi19059@alas.matf.bg.ac.rs