opt-alg-framework is a framework to work with and build optimization algorithm. The basic idea is: you will have a codificated problem with a method to calculate its fitness, an algorithm to improve this fitness and operators used with the algorithm to build new solutions.
What is already implemented:
-
Problems:
- Flow Shop Permutation
-
Algorithms:
- Local Searches:
- Hill-Climbing
- Simulated Annealing
- Tabu Search
- Local Searches:
-
Operators
- Crossover:
- Two Point Crossover (permutational)
- Selector:
- Tournament Selection
- Tweak:
- Random Swap
- Crossover:
Add this line to your application's Gemfile:
gem 'opt_alg_framework'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install opt_alg_framework
Example: Read two instances of FSP problem (about the instances format, read README in problem directory!) and get its best results with SimulatedAnnealing algorithm, using RandomSwap operator.
operator = Operator::Tweak::RandomSwap.new
problem = Problem::FSP.new
problem.load_schedule("path to instance file")
algorithm = Algorithm::LocalSearch::SimulatedAnnealing.new max_iterations: 10,
cooling_rate: 0.009,
problem: problem,
tweak_operator: operator
puts algorithm.start # It will return a hash with the best solution found and its fitness
After checking out the repo, run bin/setup
to install dependencies. Then, run bin/console
or, alternatively, bundle console
for an interactive prompt that will allow you to experiment.
This gem can deal with a lot of stuff, and everything must be simple to use (a.k.a generic). Before start to code, take a look in the README inside the folder of what you want to code (algorithms, problems, etc), some tips of what your class should have are there. Sugestions are welcome too! (;
- Fork it ( https://github.com/[my-github-username]/opt_alg_framework/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request