ruby-jgap 0.0.2-java → 0.0.3-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/JGAP/problem.rb +13 -8
- data/lib/JGAP/salesman.rb +27 -8
- data/ruby-jgap.gemspec +1 -1
- data/salesman_test.rb +16 -23
- data/test.rb +1 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9aa49148ce53319cbbaf0da2f9a73ec6810e546
|
4
|
+
data.tar.gz: b55811369919a6374621068f2a02f141440b755c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 875ebd2d014740e7e0693c5f91fc92df874a654c6254efdac00d6aa3f32960370a07062bf87e60a29e8d936bec3c94e4b6da4322c931b247d2aa70835ae2bf79
|
7
|
+
data.tar.gz: 0408d1f318923d8a82f5d3984aa1f461ad1753fef9c74693e42e245e4a936fec60db1654ca66c08c1f117e38cf4dff34eedcf39fe957ea109c64b16d049b47f2
|
data/lib/JGAP/problem.rb
CHANGED
@@ -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)
|
data/lib/JGAP/salesman.rb
CHANGED
@@ -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
|
data/ruby-jgap.gemspec
CHANGED
data/salesman_test.rb
CHANGED
@@ -1,36 +1,29 @@
|
|
1
1
|
require 'ruby-jgap'
|
2
2
|
|
3
|
-
$table =
|
4
|
-
[0, 0],
|
5
|
-
[
|
6
|
-
[
|
7
|
-
[
|
8
|
-
[
|
9
|
-
[
|
10
|
-
[
|
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
|
17
|
+
population_size 1000
|
16
18
|
|
17
19
|
# define our solution chromosome
|
18
20
|
chromosome do
|
19
|
-
salesman :
|
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
|
29
|
-
|
30
|
-
|
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
|
-
|
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.
|
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-
|
11
|
+
date: 2015-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|