ruby-jgap
A Ruby DSL for Genetic Algorithms using JGAP.
The JGAP binary JAR file is packaged with this gem.
JGAP is licensed under the GNU Lesser Public license; if you would like to use this gem in commercial applications, you can choose to use the Mozilla Public License and donate 50 euros to JGAP. more details
Install
gem install ruby-jgap
or
jruby -S gem install ruby-jgap
Usage
require 'java'
require 'ruby-jgap'
# subclass JGAP::Problem
class MakeChangeProblem < JGAP::Problem
population_size 500
# define our solution chromosome
chromosome do
integer :quarters, min: 0, max: 3
integer :dimes, min: 0, max: 2
integer :nickels, min: 0, max: 1
integer :pennies, min: 0, max: 4
end
# define our fitness function
fitness_function do |subject|
target = 47 # goal: 47 cents
q = read subject, :quarters
d = read subject, :dimes
n = read subject, :nickels
p = read subject, :pennies
coins = q + d + n + p
value = 25*q + 10*d + 5*n + p
delta = (target - value).abs # how far are we from our goal?
fitness = (99 - delta)
fitness += 100 - (10*coins) if value == target # reward if matches with goal
return fitness
end
end
problem = MakeChangeProblem.new
problem.run(100) # 100 generations
problem.print_best
This outputs (probably):
quarters: 1
dimes: 2
nickels: 0
pennies: 2
Adapted from the Getting Started page on JGAP's site.