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 +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:
|