ruby-jgap 0.0.2-java → 0.0.3-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da1f5d18e0a46faaca1b2436d0c25b5017d15f2b
4
- data.tar.gz: 7689a9b162d30599dcae4f29fda432135b3d1261
3
+ metadata.gz: e9aa49148ce53319cbbaf0da2f9a73ec6810e546
4
+ data.tar.gz: b55811369919a6374621068f2a02f141440b755c
5
5
  SHA512:
6
- metadata.gz: 6d715b18d2df55f9415f7dc2bfbc93e52dc9012e579c403b2ed7db67b1341b3072236eece58ad960ebc8be509ff47987797bbdcb61dbac4e268241d93e29e259
7
- data.tar.gz: e2059b74fd96d9584d239b8d9ac410e43e74f69ca915bcaf794d5b23565152277a38b58a519ea70271ba78af6d6a7f15e1aa99678c3a4a9da7c8fe376505fa92
6
+ metadata.gz: 875ebd2d014740e7e0693c5f91fc92df874a654c6254efdac00d6aa3f32960370a07062bf87e60a29e8d936bec3c94e4b6da4322c931b247d2aa70835ae2bf79
7
+ data.tar.gz: 0408d1f318923d8a82f5d3984aa1f461ad1753fef9c74693e42e245e4a936fec60db1654ca66c08c1f117e38cf4dff34eedcf39fe957ea109c64b16d049b47f2
@@ -30,13 +30,6 @@ module JGAP
30
30
  subject.gene(@names[name]).allele
31
31
  end
32
32
 
33
- def salesman(name, cities)
34
- new_gene = IntegerGene.new(@config, 0, cities - 1)
35
- new_gene.set_allele java.lang.Integer.new(@genes.length)
36
- @names[name] = @genes.length
37
- @genes << new_gene
38
- end
39
-
40
33
  def integer(name, opts={})
41
34
  @names[name] = @genes.length
42
35
  unless opts.empty?
@@ -92,7 +85,7 @@ module JGAP
92
85
  chromosome
93
86
  population_size
94
87
  end
95
-
88
+
96
89
 
97
90
  def setup
98
91
  # Override me!
@@ -120,6 +113,18 @@ module JGAP
120
113
  end
121
114
  end
122
115
 
116
+ def minimize(value)
117
+ 1.0/(1 + value.abs)
118
+ end
119
+
120
+ def maximize(value)
121
+ if value <= 0
122
+ 1/value.abs
123
+ else
124
+ value
125
+ end
126
+ end
127
+
123
128
  ## MACROS
124
129
 
125
130
  def self.population_size(size)
@@ -12,6 +12,23 @@ java_import %w(
12
12
 
13
13
  module JGAP
14
14
 
15
+ class ChromosomeBuilder
16
+
17
+ def salesman(names)
18
+ names.each do |name|
19
+ new_gene = IntegerGene.new(@config, 0, names.length)
20
+ new_gene.set_allele java.lang.Integer.new(@genes.length)
21
+ @names[name] = @genes.length
22
+ @genes << new_gene
23
+ end
24
+ end
25
+
26
+ def get_name(num)
27
+ @names.invert[num]
28
+ end
29
+
30
+ end
31
+
15
32
  class Salesman < org.jgap.impl.salesman.Salesman
16
33
  attr_reader :best_solution
17
34
 
@@ -25,7 +42,14 @@ module JGAP
25
42
  chromosome
26
43
  population_size
27
44
  end
28
-
45
+
46
+ def distance(from, to)
47
+ distance_function(from.allele, to.allele)
48
+ end
49
+
50
+ def get_name(num)
51
+ @builder.get_name(num)
52
+ end
29
53
 
30
54
  def setup
31
55
  # Override me!
@@ -54,15 +78,12 @@ module JGAP
54
78
  end
55
79
  end
56
80
 
57
- def distance(from, to)
58
- # Override me!
59
- end
60
-
61
81
  ## MACROS
62
82
 
63
83
  def self.population_size(size)
64
84
  define_method(:population_size) do
65
85
  @population_size = size
86
+ set_population_size(@population_size)
66
87
  @config.set_population_size(@population_size)
67
88
  end
68
89
  end
@@ -77,10 +98,8 @@ module JGAP
77
98
  @chromosome
78
99
  end
79
100
  end
101
+
80
102
 
81
- def self.fitness_function(&block)
82
- define_method(:evaluate, &block)
83
- end
84
103
  end
85
104
 
86
105
  end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "ruby-jgap"
7
- spec.version = "0.0.2"
7
+ spec.version = "0.0.3"
8
8
  spec.platform = "java"
9
9
  spec.authors = ["William Chen"]
10
10
  spec.email = ["wchen298@gmail.com"]
@@ -1,36 +1,29 @@
1
1
  require 'ruby-jgap'
2
2
 
3
- $table = [
4
- [0, 0],
5
- [-1, 1],
6
- [-7, -1],
7
- [-8, -2],
8
- [2, -1],
9
- [10, 2],
10
- [7, -1]
11
- ]
3
+ $table = {
4
+ A: [0, 0],
5
+ B: [1, 1],
6
+ C: [2, 2],
7
+ D: [3, 3],
8
+ E: [4, 4],
9
+ F: [5, 5],
10
+ G: [6, 6],
11
+ H: [7, 7],
12
+ I: [8, 8]
13
+ }
12
14
 
13
15
  class TSP < JGAP::Salesman
14
16
 
15
- population_size 100000
17
+ population_size 1000
16
18
 
17
19
  # define our solution chromosome
18
20
  chromosome do
19
- salesman :paris, 7
20
- salesman :london, 7
21
- salesman :new_york, 7
22
- salesman :boston, 7
23
- salesman :berlin, 7
24
- salesman :tokyo, 7
25
- salesman :shanghai, 7
21
+ salesman [:A, :B, :C, :D, :E, :F, :G, :H, :I]
26
22
  end
27
23
 
28
- def distance(from, to)
29
- f = from.allele
30
- t = to.allele
31
- x1, y1 = $table[f]
32
- x2, y2 = $table[t]
33
-
24
+ def distance_function(from, to)
25
+ x1, y1 = $table[get_name from]
26
+ x2, y2 = $table[get_name to]
34
27
  Math.sqrt((x1 - x2)**2 + (y1-y2)**2)
35
28
  end
36
29
 
data/test.rb CHANGED
@@ -26,9 +26,7 @@ class MakeChangeProblem < JGAP::Problem
26
26
  value = 25*q + 10*d + 5*n + p
27
27
  delta = (target - value).abs # how far are we from our goal?
28
28
 
29
- fitness = (99 - delta)
30
- fitness += 100 - (10*coins) if value == target # reward if matches with goal
31
- return fitness
29
+ minimize(coins + 2*delta)
32
30
  end
33
31
 
34
32
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-jgap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: java
6
6
  authors:
7
7
  - William Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-09 00:00:00.000000000 Z
11
+ date: 2015-02-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: