drp 0.0.6

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.
@@ -0,0 +1,32 @@
1
+
2
+ require 'rubygems'
3
+ require 'drp'
4
+
5
+ class ParameterizationExample
6
+
7
+ extend DRP::RuleEngine
8
+
9
+ begin_rules
10
+
11
+ max_depth 3
12
+
13
+ def foo n
14
+ "[" + foo(n + 1) + "]"
15
+ end
16
+ def foo n
17
+ "<#{n}>" + foo(n)
18
+ end
19
+
20
+ end_rules
21
+
22
+ def default_rule_method n
23
+ "<<#{n * 2}>>!!"
24
+ end
25
+
26
+ end
27
+
28
+ pe = ParameterizationExample.new
29
+ 3.times do
30
+ puts pe.foo(0)
31
+ end
32
+
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'drp'
3
+
4
+ class ToyExample
5
+
6
+ extend DRP::RuleEngine
7
+
8
+ begin_rules
9
+
10
+ def foobar
11
+ "foo #{foobar}"
12
+ end
13
+ def foobar
14
+ "bar!"
15
+ end
16
+
17
+ end_rules
18
+
19
+ end
20
+
21
+ toy = ToyExample.new
22
+ puts Array.new(3) { toy.foobar } # -> [ 'foo foo foo bar!', 'bar!', 'foo bar!' ]
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'drp'
3
+
4
+ class WeightFromCurrentDepthExample
5
+
6
+ extend DRP::RuleEngine
7
+
8
+ begin_rules
9
+
10
+ max_depth 25
11
+ weight_fcd 20..0.1
12
+
13
+ def foo
14
+ "foo #{foo}"
15
+ end
16
+
17
+ weight 1
18
+
19
+ def foo
20
+ "bar!"
21
+ end
22
+
23
+ def mama
24
+ "mama #{mama}"
25
+ end
26
+ def mama
27
+ "mia!"
28
+ end
29
+
30
+ end_rules
31
+
32
+ end
33
+
34
+ 3.times do
35
+ wfcde = WeightFromCurrentDepthExample.new
36
+ 3.times do
37
+ puts wfcde.foo
38
+ end
39
+ puts
40
+ 3.times do
41
+ puts wfcde.mama
42
+ end
43
+ puts
44
+ end
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'drp'
3
+
4
+ class WeightsExample
5
+
6
+ extend DRP::RuleEngine
7
+
8
+ begin_rules
9
+
10
+ max_depth 3
11
+ weight 1
12
+
13
+ def foo
14
+ "foo1 #{foo}"
15
+ end
16
+
17
+ weight 8
18
+
19
+ def foo
20
+ "foo2 #{foo}"
21
+ end
22
+
23
+ end_rules
24
+
25
+ end
26
+
27
+ 3.times do
28
+ we = WeightsExample.new
29
+ 3.times do
30
+ puts we.foo
31
+ end
32
+ puts
33
+ end
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'drp'
3
+
4
+ class WeightsExample2
5
+
6
+ extend DRP::RuleEngine
7
+
8
+ begin_rules
9
+
10
+ max_depth 2
11
+ weight 0..1
12
+
13
+ def foo
14
+ "foo1 #{foo}"
15
+ end
16
+ def foo
17
+ "foo2 #{foo}"
18
+ end
19
+
20
+ end_rules
21
+
22
+ end
23
+
24
+ 3.times do
25
+ we2 = WeightsExample2.new
26
+ 3.times do
27
+ puts we2.foo
28
+ end
29
+ puts
30
+ end
@@ -0,0 +1,127 @@
1
+
2
+ =begin
3
+
4
+ DRP, Genetic Programming + Grammatical Evolution = Directed Ruby Programming
5
+ Copyright (C) 2006, Christophe McKeon
6
+
7
+ This program is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU General Public License
9
+ as published by the Free Software Foundation; either version 2
10
+ of the License, or (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Softwar Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+
20
+ =end
21
+
22
+ require 'rubygems'
23
+ require 'drp'
24
+
25
+ class SymbolicRegressionExample
26
+
27
+ extend DRP::RuleEngine
28
+
29
+ GREATEST_FLOAT_SMALLER_THAN_1 = 1 - Float::EPSILON
30
+
31
+ def initialize codons
32
+ @codons = codons
33
+ @num_codons = codons.size
34
+ @index = 0
35
+ end
36
+
37
+ def next_codon
38
+ res = @codons[@index]
39
+ @index += 1
40
+ @index = 0 if @index == @num_codons
41
+ clamp res
42
+ end
43
+
44
+ def clamp float
45
+ return GREATEST_FLOAT_SMALLER_THAN_1 if float > GREATEST_FLOAT_SMALLER_THAN_1
46
+ return 0.0 if float < 0.0
47
+ float
48
+ end
49
+
50
+ def test value
51
+ @index = 0
52
+ @input = value
53
+ expr
54
+ end
55
+
56
+ begin_rules
57
+
58
+ max_depth 2..4
59
+
60
+ def op x, y
61
+ x + y
62
+ end
63
+ def op x, y
64
+ x * y
65
+ end
66
+ def op x, y
67
+ x - y
68
+ end
69
+ def op x, y
70
+ if y == 0
71
+ 1
72
+ else
73
+ x / y
74
+ end
75
+ end
76
+
77
+ def expr
78
+ #puts "op(expr,expr)"
79
+ op(expr, expr)
80
+ end
81
+ def expr
82
+ #puts "@input"
83
+ @input
84
+ end
85
+ def expr
86
+ #puts "map"
87
+ map -5..5, :i_lin
88
+ end
89
+
90
+ end_rules
91
+
92
+ end
93
+
94
+ #############################################
95
+
96
+ NUM_TEST_VALUES = 10
97
+ SWARM_SIZE = 250
98
+ VECTOR_SIZE = 16
99
+ NUM_ITER = 1000
100
+ REBIRTH = 0.0
101
+
102
+ pso_class = DRP::SearchAlgorithms::PSO::ParticleSwarmOptimizer
103
+ pso = pso_class.new SWARM_SIZE, VECTOR_SIZE, REBIRTH
104
+
105
+ expr = proc { |x| x**2 + 1 }
106
+ values = Array.new(NUM_TEST_VALUES) { rand * 2 - 1 }
107
+ solutions = values.collect &expr
108
+
109
+ NUM_ITER.times do |iter|
110
+ pso.each do |codons|
111
+ error = 0
112
+ sr = SymbolicRegressionExample.new codons
113
+ values.each_with_index do |val, i|
114
+ error += (sr.test(val) - solutions[i]).abs
115
+ end
116
+ error
117
+ end
118
+ gbe = pso.global_best_error
119
+ puts "iter #{iter+1}, best error: #{gbe}"
120
+ break if gbe < 0.000001
121
+ end
122
+
123
+ winner = SymbolicRegressionExample.new(pso.global_best_vector)
124
+ puts "winning error: #{pso.global_best_error}"
125
+ NUM_TEST_VALUES.times do |i|
126
+ puts "#{values[i]} -> #{winner.test(values[i])} [#{solutions[i]}]"
127
+ end
@@ -0,0 +1,30 @@
1
+
2
+ =begin
3
+
4
+ DRP, Genetic Programming + Grammatical Evolution = Directed Ruby Programming
5
+ Copyright (C) 2006, Christophe McKeon
6
+
7
+ This program is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU General Public License
9
+ as published by the Free Software Foundation; either version 2
10
+ of the License, or (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Softwar Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+
20
+ =end
21
+
22
+ module DRP
23
+
24
+ DEFAULT = {
25
+ :max_depth => 10,
26
+ :weight => 1.0,
27
+ :test_for_extend_name_clashes => true
28
+ }
29
+
30
+ end
@@ -0,0 +1,30 @@
1
+
2
+ =begin
3
+
4
+ DRP, Genetic Programming + Grammatical Evolution = Directed Ruby Programming
5
+ Copyright (C) 2006, Christophe McKeon
6
+
7
+ This program is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU General Public License
9
+ as published by the Free Software Foundation; either version 2
10
+ of the License, or (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Softwar Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+
20
+ =end
21
+
22
+ require 'defaults'
23
+ require 'info'
24
+ require 'error'
25
+ require 'pso'
26
+ require 'utils'
27
+ require 'weights_and_max_depths'
28
+ require 'instance_methods'
29
+ require 'rule_engine'
30
+
@@ -0,0 +1,69 @@
1
+
2
+ =begin
3
+
4
+ DRP, Genetic Programming + Grammatical Evolution = Directed Ruby Programming
5
+ Copyright (C) 2006, Christophe McKeon
6
+
7
+ This program is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU General Public License
9
+ as published by the Free Software Foundation; either version 2
10
+ of the License, or (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Softwar Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+
20
+ =end
21
+
22
+ module DRP
23
+
24
+ class DRPError < StandardError
25
+ end
26
+
27
+ class DRPNameClashError < DRPError
28
+
29
+ CLASHING_INSTANCE_METHODS = %w{
30
+ # default_rule_method
31
+ # next_codon
32
+ # next_meta_codon
33
+ depth
34
+ max_depth
35
+ map
36
+ }
37
+ CLASHING_CLASS_METHODS = %w{
38
+ begin_rules
39
+ end_rules
40
+ max_depth
41
+ weight
42
+ weight_fcd
43
+ }
44
+
45
+ def self.test extended_klass
46
+ k = extended_klass
47
+ CLASHING_INSTANCE_METHODS.each do |m|
48
+ if k.method_defined?(m) or k.protected_method_defined?(m) or k.private_method_defined?(m)
49
+ raise(
50
+ self,
51
+ "the class you are extending already defines instance method '#{m}'",
52
+ caller
53
+ )
54
+ end
55
+ end
56
+ class_methods = k.methods + k.protected_methods + k.private_methods
57
+ CLASHING_CLASS_METHODS.each do |name|
58
+ if class_methods.include? name
59
+ raise(
60
+ self,
61
+ "the class you are extending already defines class method #{name}",
62
+ caller
63
+ )
64
+ end
65
+ end
66
+ end
67
+ end # DRPNameClashError
68
+
69
+ end # module DRP
@@ -0,0 +1,30 @@
1
+
2
+ =begin
3
+
4
+ DRP, Genetic Programming + Grammatical Evolution = Directed Ruby Programming
5
+ Copyright (C) 2006, Christophe McKeon
6
+
7
+ This program is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU General Public License
9
+ as published by the Free Software Foundation; either version 2
10
+ of the License, or (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Softwar Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+
20
+ =end
21
+
22
+ module DRP
23
+
24
+ VERSION_MAJOR = 0
25
+ VERSION_MINOR = 0
26
+ VERSION_TWEAK = 6
27
+ Version = "#{VERSION_MAJOR}.#{VERSION_MINOR}.#{VERSION_TWEAK}"
28
+ Copyright = 'Copyright (c) 2006 by Chritophe McKeon <polypus@yahoo.com>'
29
+
30
+ end