Skip to content

mucherino/binMeta

Repository files navigation

binMeta project

This Java project intends collecting, in one unique Java package, several meta-heuristic searches that have 
been proposed over the last years for the solution of combinatorial optimization problems.

The solutions to the optimization problems are represented via the "immutable" objects of the Data class, 
where the representation is essentially given by a bit string. Data objects can be grouped together by using 
a Memory object, which is supposed to automatically manage situations where the limit on storage capacity is 
reached, by using different kinds of algorithms for the selection of the "victims" to be removed.

Every optimization problem, i.e. the class related to its objective function, needs to implement the Objective 
interface.

At the current stage of development, the repository contains the following list of implementations of Objective:
1. BitCounter (trivial problem included in the initial commit of this project)
2. ColorPartition (toy problem with a graphic representation of the solutions in 2D)
3. Fermat (toy problem inspired by the famous "last" Fermat theorem)
4. Pi (toy problem where three real numbers are represented by one unique bit string)
5. SubsetSum
6. NumberPartition
7. Knapsack
8. SetCover
Notice that the last two implementations concern problems with constraints, which have been included in the
objective function by adding penalty terms.  

Every meta-heuristic search needs to inherit from the binMeta abstract class. They can also implement Objective
if one wants to use one meta-heuristic search for finding the optimal parameters of another meta-heuristic
search, either for a particular optimization problem, or for a set of given problems.

At the current stage of development, the repository contains the following list of meta-heuristic searches:
1. RandomWalk
2. WolfSearch
3. MultiStart
4. VariableNeighbourhoodSearch (with several of its variants)

Only exception to the rule: the LocalOpt class inherits from bitMeta but it does not implement a meta-heuristic 
search. LocalOpt implements a simple method for local optimization.

This Java project has begun by collecting some of the best implementations resulting from Master projects at
University of Rennes1. Credit to the students is given in the following way:
-> the mention "proposed by" means that the student has simply proposed the implementation of a method or class, 
   but the published implementation is not his/hers.
-> the mention "initial version coded by" means that the student has submitted a good implementation of the method 
   or the class, but changes have been subsequently performed (this may simply be due to ensure compatibility with 
   the other classes).
-> the mention "coded by" means that the code for the method or the class is the one provided by the student, with 
   very light changes (if any).
The implementations are mainly collected from the projects of the course on "Multi-threading Operating Systems" 
(Master in Computer Science, first year, ISTIC, University of Rennes1), as well as from the professional projects 
of MIAGE Master students (both first and second year, ISTIC, University of Rennes1). More recently, a PhD student
also contributed.

When a commit holds the name of a course, this indicates that it represents the last commit related to the work 
performed in the framework of that course, together with the academic year. 

When a commit holds the name of a conference (or any other scientific publication), this indicates that the code was
used for the computational experiments presented in that scientific publication.

When the contribution of a student is considered to be rather important, the student is invited to make a push request 
on the repository.

And finally: why "binMeta"? Well, the "bin" part can be interpreted as "binary", which is important to point out in 
this project because all the implemented meta-heuristic searches are supposed to directly work with binary 
representations of the data. Moreover, if you know some German, the "bin" may remind you of "(ich) bin" (I am), 
followed by "Meta", which is part of "meta-heuristic", but it can also be interpreted in our case as something beyond 
the simple implementation of one meta-heuristic search.

April 24th, 2023

Antonio Mucherino

About

Java package for meta-heuristic searches

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •