feldtruby 0.4.11 → 0.4.12
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 +7 -0
- data/archive.json +124 -0
- data/lib/feldtruby/optimize/archive.rb +75 -5
- data/lib/feldtruby/optimize/objective.rb +10 -2
- data/{test/long_running → lib/feldtruby/optimize/problems}/multi_objective_problems.rb +0 -0
- data/{test/long_running → lib/feldtruby/optimize/problems}/single_objective_problems.rb +0 -0
- data/lib/feldtruby/statistics.rb +17 -0
- data/lib/feldtruby/statistics/design_of_experiments.rb +48 -0
- data/lib/feldtruby/version.rb +1 -1
- data/spikes/archive.json +147 -0
- data/spikes/long_running_search.rb +4 -2
- data/spikes/simple_de_run.rb +3 -1
- data/test/long_running/test_single_objective_optimization.rb +2 -2
- data/test/test_statistics_design_of_experiments.rb +35 -0
- metadata +24 -33
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 80276e85ca35677642bd949c9c7c55d5647f040d
|
|
4
|
+
data.tar.gz: f15ba5e0a5b4d6ff60e2c974a5c6560723a318ab
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 05e6499886ac5c29c2de3848ef24387c138ed14fb4f1a05af9a7a4dfd9e763203b9dc34d8e2705cab6e841bd5501bc2f7eadbc553de932dc8d38c2826938df61
|
|
7
|
+
data.tar.gz: fff4b90d0b79589ad20839b71692e0c265296989a642d089d4cfa156e4db5f167f4c5b7afb64a39b9da112c00da31fffa341d7e95145c7a0e05e904367e2115d
|
data/archive.json
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"json_class": "FeldtRuby::Optimize::Archive",
|
|
3
|
+
"data": {
|
|
4
|
+
"generalists": {
|
|
5
|
+
"json_class": "FeldtRuby::Optimize::Archive::GlobalTopList",
|
|
6
|
+
"data": {
|
|
7
|
+
"max_size": 20,
|
|
8
|
+
"top_list": [
|
|
9
|
+
"Vector[495.6220472008826, 426.35485642424766]",
|
|
10
|
+
"Vector[495.62205148094733, 426.354855256089]",
|
|
11
|
+
"Vector[495.62206987534034, 426.35501558097434]",
|
|
12
|
+
"Vector[495.62206987534034, 426.35501558097434]",
|
|
13
|
+
"Vector[495.6222720656514, 426.3550214881676]",
|
|
14
|
+
"Vector[495.62243252506755, 426.3551965381708]",
|
|
15
|
+
"Vector[495.6225366749033, 426.35541061734784]",
|
|
16
|
+
"Vector[495.62212266198037, 426.35508493132687]",
|
|
17
|
+
"Vector[495.6221285692303, 426.35482208453755]",
|
|
18
|
+
"Vector[495.62193937576654, 426.3546416267843]",
|
|
19
|
+
"Vector[495.6217543885617, 426.3547529062279]",
|
|
20
|
+
"Vector[495.6218500005808, 426.3545574537555]",
|
|
21
|
+
"Vector[495.62205148094733, 426.35473354022747]",
|
|
22
|
+
"Vector[495.6224622727039, 426.35513589259864]",
|
|
23
|
+
"Vector[495.6219540985794, 426.3549875733886]",
|
|
24
|
+
"Vector[495.6213699750297, 426.3542789980689]",
|
|
25
|
+
"Vector[495.6216018228837, 426.3546210939662]",
|
|
26
|
+
"Vector[495.6213463241329, 426.3542924512532]",
|
|
27
|
+
"Vector[495.6226218518193, 426.3556277556064]",
|
|
28
|
+
"Vector[495.6229365324784, 426.3556566577018]"
|
|
29
|
+
],
|
|
30
|
+
"quality_values": [
|
|
31
|
+
"100.0% (SubQs = [6.14e-09], ver. 43)",
|
|
32
|
+
"100.0% (SubQs = [7.38e-09], ver. 43)",
|
|
33
|
+
"100.0% (SubQs = [2.65e-08], ver. 43)",
|
|
34
|
+
"100.0% (SubQs = [2.65e-08], ver. 43)",
|
|
35
|
+
"100.0% (SubQs = [2.84e-08], ver. 43)",
|
|
36
|
+
"100.0% (SubQs = [3.16e-08], ver. 43)",
|
|
37
|
+
"100.0% (SubQs = [3.63e-08], ver. 43)",
|
|
38
|
+
"100.0% (SubQs = [3.72e-08], ver. 43)",
|
|
39
|
+
"100.0% (SubQs = [6.82e-08], ver. 43)",
|
|
40
|
+
"100.0% (SubQs = [7.38e-08], ver. 43)",
|
|
41
|
+
"100.0% (SubQs = [7.61e-08], ver. 43)",
|
|
42
|
+
"100.0% (SubQs = [8.0e-08], ver. 43)",
|
|
43
|
+
"100.0% (SubQs = [8.29e-08], ver. 43)",
|
|
44
|
+
"100.0% (SubQs = [9.39e-08], ver. 43)",
|
|
45
|
+
"100.0% (SubQs = [9.58e-08], ver. 43)",
|
|
46
|
+
"100.0% (SubQs = [1.04e-07], ver. 43)",
|
|
47
|
+
"100.0% (SubQs = [1.12e-07], ver. 43)",
|
|
48
|
+
"100.0% (SubQs = [1.21e-07], ver. 43)",
|
|
49
|
+
"100.0% (SubQs = [1.37e-07], ver. 43)",
|
|
50
|
+
"100.0% (SubQs = [1.44e-07], ver. 43)"
|
|
51
|
+
],
|
|
52
|
+
"objective": "#<MinEggHolder:0x007fe62a945878>"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"specialists": [
|
|
56
|
+
{
|
|
57
|
+
"json_class": "FeldtRuby::Optimize::Archive::GoalTopList",
|
|
58
|
+
"data": {
|
|
59
|
+
"max_size": 5,
|
|
60
|
+
"top_list": [
|
|
61
|
+
"Vector[495.6220472008826, 426.35485642424766]",
|
|
62
|
+
"Vector[495.62205148094733, 426.354855256089]",
|
|
63
|
+
"Vector[495.62206987534034, 426.35501558097434]",
|
|
64
|
+
"Vector[495.62206987534034, 426.35501558097434]",
|
|
65
|
+
"Vector[495.6222720656514, 426.3550214881676]"
|
|
66
|
+
],
|
|
67
|
+
"quality_values": [
|
|
68
|
+
"100.0% (SubQs = [6.14e-09], ver. 43)",
|
|
69
|
+
"100.0% (SubQs = [7.38e-09], ver. 43)",
|
|
70
|
+
"100.0% (SubQs = [2.65e-08], ver. 43)",
|
|
71
|
+
"100.0% (SubQs = [2.65e-08], ver. 43)",
|
|
72
|
+
"100.0% (SubQs = [2.84e-08], ver. 43)"
|
|
73
|
+
],
|
|
74
|
+
"objective": "#<MinEggHolder:0x007fe62a945878>",
|
|
75
|
+
"objective_index": 0,
|
|
76
|
+
"objective_name": "objective_min_func"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"weirdos": {
|
|
81
|
+
"json_class": "FeldtRuby::Optimize::Archive::WeirdoTopList",
|
|
82
|
+
"data": {
|
|
83
|
+
"max_size": 10,
|
|
84
|
+
"top_list": [
|
|
85
|
+
"Vector[507.3847536905826, -428.24322756547286]",
|
|
86
|
+
"Vector[508.6757864296741, -425.8072060429839]",
|
|
87
|
+
"Vector[511.8607587787378, -424.7094976121834]",
|
|
88
|
+
"Vector[500.3795974754322, -424.47828024297644]",
|
|
89
|
+
"Vector[511.7927496243458, -423.6663163699823]",
|
|
90
|
+
"Vector[505.7249524392083, -421.85963040462264]",
|
|
91
|
+
"Vector[509.5386880993205, -421.0315337832495]",
|
|
92
|
+
"Vector[507.3309830642148, -418.7568618991539]",
|
|
93
|
+
"Vector[507.72601159816423, -417.65978621902434]",
|
|
94
|
+
"Vector[505.48809715871784, -417.65978621902434]"
|
|
95
|
+
],
|
|
96
|
+
"quality_values": [
|
|
97
|
+
"95.1569% (SubQs = [92.1], ver. 43)",
|
|
98
|
+
"95.7011% (SubQs = [81.8], ver. 43)",
|
|
99
|
+
"96.0874% (SubQs = [74.4], ver. 43)",
|
|
100
|
+
"94.0684% (SubQs = [113.0], ver. 43)",
|
|
101
|
+
"96.0299% (SubQs = [75.5], ver. 43)",
|
|
102
|
+
"95.2259% (SubQs = [90.8], ver. 43)",
|
|
103
|
+
"95.5442% (SubQs = [84.7], ver. 43)",
|
|
104
|
+
"94.8863% (SubQs = [97.2], ver. 43)",
|
|
105
|
+
"94.6025% (SubQs = [103.0], ver. 43)",
|
|
106
|
+
"94.4247% (SubQs = [106.0], ver. 43)"
|
|
107
|
+
],
|
|
108
|
+
"objective": "#<FeldtRuby::Optimize::EuclideanDistanceToBest:0x007fe62b86c900>",
|
|
109
|
+
"diversity_quality_values": [
|
|
110
|
+
"95.4506% (SubQs = [855.0], ver. 26)",
|
|
111
|
+
"95.1807% (SubQs = [852.0], ver. 26)",
|
|
112
|
+
"95.0642% (SubQs = [851.0], ver. 26)",
|
|
113
|
+
"95.0226% (SubQs = [851.0], ver. 26)",
|
|
114
|
+
"94.9476% (SubQs = [850.0], ver. 26)",
|
|
115
|
+
"94.7354% (SubQs = [848.0], ver. 26)",
|
|
116
|
+
"94.6489% (SubQs = [848.0], ver. 26)",
|
|
117
|
+
"94.3912% (SubQs = [845.0], ver. 26)",
|
|
118
|
+
"94.2693% (SubQs = [844.0], ver. 26)",
|
|
119
|
+
"94.2661% (SubQs = [844.0], ver. 26)"
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'feldtruby/optimize'
|
|
2
2
|
require 'feldtruby/logger'
|
|
3
|
+
require 'json'
|
|
3
4
|
|
|
4
5
|
module FeldtRuby::Optimize
|
|
5
6
|
|
|
@@ -90,7 +91,7 @@ class Archive
|
|
|
90
91
|
|
|
91
92
|
@generalists = GlobalTopList.new(@params[:NumTopAggregate], @objective)
|
|
92
93
|
|
|
93
|
-
@weirdos =
|
|
94
|
+
@weirdos = WeirdoTopList.new(@params[:NumTopDiversityAggregate], @diversity_objective, @objective)
|
|
94
95
|
end
|
|
95
96
|
|
|
96
97
|
# Add a candidate to the top lists if it is good enough to be there. Throws
|
|
@@ -113,7 +114,19 @@ class Archive
|
|
|
113
114
|
"Old best" => prev_best,
|
|
114
115
|
"Old quality" => prev_qv}, "Archive: New best solution found", true
|
|
115
116
|
|
|
116
|
-
|
|
117
|
+
# We must delete weirdos that are no longer good enough to be on the
|
|
118
|
+
# weirdos list.
|
|
119
|
+
to_delete = []
|
|
120
|
+
@weirdos.each {|w|
|
|
121
|
+
# Invalidate quality since it must now be re-calculated (since it will
|
|
122
|
+
# typically depend on the best and we have a new best...)
|
|
123
|
+
@diversity_objective.invalidate_quality_of(w)
|
|
124
|
+
|
|
125
|
+
to_delete << w unless good_enough_quality_to_be_interesting?(w)
|
|
126
|
+
}
|
|
127
|
+
#puts "Deleting #{to_delete.length} out of #{@weirdos.length} weirdos"
|
|
128
|
+
#@weirdos.delete_candidates(to_delete)
|
|
129
|
+
|
|
117
130
|
elsif good_enough_quality_to_be_interesting?(candidate)
|
|
118
131
|
# When we add a new one this will lead to re-calc of the diversity quality
|
|
119
132
|
# of the previous ones if there has been a new best since last time.
|
|
@@ -124,13 +137,16 @@ class Archive
|
|
|
124
137
|
# Is quality of candidate good enough (within MaxPercentDistanceToBestForDiversity
|
|
125
138
|
# from quality of best candidate)
|
|
126
139
|
def good_enough_quality_to_be_interesting?(candidate)
|
|
127
|
-
qv_best = @objective.quality_of(best).
|
|
128
|
-
|
|
140
|
+
qv_best = @objective.quality_of(best).display_value
|
|
141
|
+
qv = @objective.quality_of(candidate).display_value
|
|
142
|
+
res = ((qv_best - qv).abs / qv_best) <= @params[:MaxPercentDistanceToBestForDiversity]
|
|
143
|
+
#puts "qvbest = #{qv_best}, qv = #{qv}, res = #{res}"
|
|
144
|
+
res
|
|
129
145
|
end
|
|
130
146
|
|
|
131
147
|
# A top list is an array of a fixed size that saves the top candidates
|
|
132
148
|
# based on their (aggregate) quality values.
|
|
133
|
-
class GlobalTopList
|
|
149
|
+
class GlobalTopList
|
|
134
150
|
def initialize(maxSize, objective)
|
|
135
151
|
@max_size =maxSize
|
|
136
152
|
@top_list = Array.new
|
|
@@ -159,6 +175,10 @@ class Archive
|
|
|
159
175
|
@objective.is_better_than?(candidate1, candidate2)
|
|
160
176
|
end
|
|
161
177
|
|
|
178
|
+
def delete_candidates(candidates)
|
|
179
|
+
@top_list = @top_list - candidates
|
|
180
|
+
end
|
|
181
|
+
|
|
162
182
|
def sort_top_list
|
|
163
183
|
@top_list.sort_by {|c| @objective.quality_of(c).value}
|
|
164
184
|
end
|
|
@@ -166,6 +186,38 @@ class Archive
|
|
|
166
186
|
def inspect
|
|
167
187
|
self.class.inspect + @top_list.inspect
|
|
168
188
|
end
|
|
189
|
+
|
|
190
|
+
def to_json(*a)
|
|
191
|
+
{
|
|
192
|
+
'json_class' => self.class.name,
|
|
193
|
+
'data' => data_to_json_hash,
|
|
194
|
+
}.to_json(*a)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def data_to_json_hash
|
|
198
|
+
{
|
|
199
|
+
'max_size' => @max_size,
|
|
200
|
+
'top_list' => @top_list,
|
|
201
|
+
'quality_values' => @top_list.map {|c| @objective.quality_of(c)},
|
|
202
|
+
'objective' => @objective
|
|
203
|
+
}
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
class WeirdoTopList < GlobalTopList
|
|
208
|
+
def initialize(maxSize, diversityObjective, qualityObjective)
|
|
209
|
+
super(maxSize, diversityObjective)
|
|
210
|
+
@quality_objective = qualityObjective
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def data_to_json_hash
|
|
214
|
+
h = super()
|
|
215
|
+
# Since the diversity objective is used to sort the weirdos their
|
|
216
|
+
# 'quality_values' are actually the diversity quality values.
|
|
217
|
+
h['diversity_quality_values'] = h['quality_values']
|
|
218
|
+
h['quality_values'] = @top_list.map {|c| @quality_objective.quality_of(c)}
|
|
219
|
+
h
|
|
220
|
+
end
|
|
169
221
|
end
|
|
170
222
|
|
|
171
223
|
class GoalTopList < GlobalTopList
|
|
@@ -182,6 +234,24 @@ class Archive
|
|
|
182
234
|
qv.sub_quality(@index, true) # We want the sub quality value posed as a minimization goal regardless of whether it is a min or max goal
|
|
183
235
|
}
|
|
184
236
|
end
|
|
237
|
+
|
|
238
|
+
# We add additional data about which goal/objective we are a top list for.
|
|
239
|
+
def data_to_json_hash
|
|
240
|
+
h = super()
|
|
241
|
+
h['objective_index'] = @index
|
|
242
|
+
h['objective_name'] = @objective.goal_methods[@index]
|
|
243
|
+
h
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def to_json(*a)
|
|
248
|
+
{
|
|
249
|
+
'json_class' => self.class.name,
|
|
250
|
+
'data' => {
|
|
251
|
+
'generalists' => @generalists,
|
|
252
|
+
'specialists' => @specialists,
|
|
253
|
+
'weirdos' => @weirdos},
|
|
254
|
+
}.to_json(*a)
|
|
185
255
|
end
|
|
186
256
|
end
|
|
187
257
|
|
|
@@ -473,8 +473,13 @@ class QualityValue
|
|
|
473
473
|
-(@sub_qualities[index])
|
|
474
474
|
end
|
|
475
475
|
|
|
476
|
+
# The value to display. For this default class we just use the quality value.
|
|
477
|
+
def display_value
|
|
478
|
+
value
|
|
479
|
+
end
|
|
480
|
+
|
|
476
481
|
def value_to_s
|
|
477
|
-
"#{
|
|
482
|
+
"#{display_value.to_significant_digits(4)}"
|
|
478
483
|
end
|
|
479
484
|
|
|
480
485
|
def to_s
|
|
@@ -486,9 +491,12 @@ class QualityValue
|
|
|
486
491
|
end
|
|
487
492
|
|
|
488
493
|
class PercentageQualityValue < QualityValue
|
|
494
|
+
def display_value
|
|
495
|
+
(1.0 - value) * 100.0
|
|
496
|
+
end
|
|
489
497
|
def value_to_s
|
|
490
498
|
return "N/A" if @sub_qualities.any? {|sq| sq.nil?}
|
|
491
|
-
"%s%%" %
|
|
499
|
+
"%s%%" % display_value.to_significant_digits(6).to_s
|
|
492
500
|
end
|
|
493
501
|
end
|
|
494
502
|
|
|
File without changes
|
|
File without changes
|
data/lib/feldtruby/statistics.rb
CHANGED
|
@@ -110,6 +110,23 @@ class RCommunicator
|
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
112
|
|
|
113
|
+
# Pull a matrix variable into a hash and name the columns according to
|
|
114
|
+
# values in columnNames.
|
|
115
|
+
def pull_matrix_variable_to_hash_with_column_names(variableName, columnNames)
|
|
116
|
+
var = arg_name(rand(1e5), variableName)
|
|
117
|
+
RC.eval "#{var} <- toJSON(data.frame(#{variableName}));"
|
|
118
|
+
hash = pull_json_variable(var).to_h
|
|
119
|
+
|
|
120
|
+
# Now convert back to the proper parameter names and delete the ones generated by lhs.
|
|
121
|
+
index = 0
|
|
122
|
+
columnNames.each do |p|
|
|
123
|
+
name_of_column = "X#{index += 1}"
|
|
124
|
+
hash[p] = hash[name_of_column]
|
|
125
|
+
hash.delete(name_of_column)
|
|
126
|
+
end
|
|
127
|
+
hash
|
|
128
|
+
end
|
|
129
|
+
|
|
113
130
|
# Convert a Ruby object of one of the types String, Symbol, Array, Integer
|
|
114
131
|
# or Float to a String that can be used in R code/scripts to
|
|
115
132
|
# represent the object.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module FeldtRuby::Statistics
|
|
2
|
+
|
|
3
|
+
# Functions for designing parameter exploration experiments using Bayesian
|
|
4
|
+
# Treed Gaussian Process models.
|
|
5
|
+
#
|
|
6
|
+
# Parameters are assumed to be given in a hash, mapping a parameter name to its
|
|
7
|
+
# range of allowed values, like:
|
|
8
|
+
#
|
|
9
|
+
# IndependenVars = {
|
|
10
|
+
# :PopulationSize => [5, 500],
|
|
11
|
+
# :PopulationSamplerRadius => [4, 500], # must actually be smaller than the population size or it makes no difference, how to spec such constraints?
|
|
12
|
+
# :F => [0.0, 1.0],
|
|
13
|
+
# :CR => [0.0, 1.0],
|
|
14
|
+
# :numEvals => [1e3, 1e5] # Or should we vary this for each setting of the others and just measure the outputs at several points of numEvals?
|
|
15
|
+
# }
|
|
16
|
+
#
|
|
17
|
+
# DependentVars = {
|
|
18
|
+
# Y1 = # execution_time for running the algorithm
|
|
19
|
+
# Y2 = # best model RMS error
|
|
20
|
+
# }
|
|
21
|
+
module DesignOfExperiments
|
|
22
|
+
# Do a latin hypercube sampling of the parameter space with bouding box per
|
|
23
|
+
# parameter specified in _parameters_.
|
|
24
|
+
def latin_hypercube_sample_of_parameters(parameters, numSamples)
|
|
25
|
+
include_library("tgp")
|
|
26
|
+
param_order = parameters.keys.sort
|
|
27
|
+
script = <<-EOS
|
|
28
|
+
params <- #{parameters_to_R_data_frame(parameters, param_order)};
|
|
29
|
+
x_candidates <- lhs(#{numSamples}, params);
|
|
30
|
+
EOS
|
|
31
|
+
subst_eval script, {}
|
|
32
|
+
pull_matrix_variable_to_hash_with_column_names "x_candidates", param_order
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def parameters_to_R_data_frame(parameters, param_order = parameter.keys)
|
|
36
|
+
s = param_order.map do |p|
|
|
37
|
+
lim = parameters[p]
|
|
38
|
+
"c(#{lim[0]}, #{lim[1]})"
|
|
39
|
+
end.join(", ")
|
|
40
|
+
"rbind(#{s})"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class FeldtRuby::RCommunicator
|
|
47
|
+
include FeldtRuby::Statistics::DesignOfExperiments
|
|
48
|
+
end
|
data/lib/feldtruby/version.rb
CHANGED
data/spikes/archive.json
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
{
|
|
2
|
+
"json_class": "FeldtRuby::Optimize::Archive",
|
|
3
|
+
"data": {
|
|
4
|
+
"generalists": {
|
|
5
|
+
"json_class": "FeldtRuby::Optimize::Archive::GlobalTopList",
|
|
6
|
+
"data": {
|
|
7
|
+
"max_size": 20,
|
|
8
|
+
"top_list": [
|
|
9
|
+
"Vector[3.92978592984352e-34, 3.177186083763661e-35, -6.705768207338718e-34, -1.6854383035496224e-34]",
|
|
10
|
+
"Vector[1.5144596966432141e-34, 3.2854085523776127e-34, -4.919007599874781e-34, -5.254279363766363e-34]",
|
|
11
|
+
"Vector[5.690616393750528e-34, -2.3355528642494594e-34, 4.643573191513474e-34, -1.917310422255142e-34]",
|
|
12
|
+
"Vector[5.841696796512456e-34, 5.961044199327782e-34, 1.493847002166183e-35, -1.0898686439738699e-33]",
|
|
13
|
+
"Vector[-1.430133126940755e-34, -9.3610480250286e-34, 2.1346746119941773e-34, -1.5536563098293578e-34]",
|
|
14
|
+
"Vector[-7.985448841993761e-34, -4.650702542519649e-34, 1.0333041708593775e-34, -1.715732599374026e-34]",
|
|
15
|
+
"Vector[-3.2974922751978836e-34, -1.1378942343472195e-33, 1.2433783562274253e-34, 1.2911154676479549e-33]",
|
|
16
|
+
"Vector[-4.316734242818529e-34, -1.1378942343472195e-33, 1.2433783562274253e-34, 1.2911154676479549e-33]",
|
|
17
|
+
"Vector[7.714498498702072e-34, 1.4732439530231907e-34, 4.776830230246573e-34, 1.319508569506661e-34]",
|
|
18
|
+
"Vector[6.123633511609725e-34, -2.62755936793382e-34, -1.3377160149401275e-33, 3.895644744559003e-34]",
|
|
19
|
+
"Vector[-4.176201753482501e-34, 7.954221933754592e-34, -1.5160566450653443e-33, 3.7883757691656654e-34]",
|
|
20
|
+
"Vector[-7.723590455216934e-34, -2.3355528642494594e-34, 4.643573191513474e-34, 1.4410131568651712e-33]",
|
|
21
|
+
"Vector[1.436165919956631e-33, 2.9867170288833136e-34, -1.5906202273547187e-33, -3.6632624990326594e-34]",
|
|
22
|
+
"Vector[1.5144596966432141e-34, 1.626004974771429e-33, -4.919007599874781e-34, -3.23180762074661e-34]",
|
|
23
|
+
"Vector[-1.430133126940755e-34, -9.3610480250286e-34, 2.1346746119941773e-34, -9.510504303572618e-34]",
|
|
24
|
+
"Vector[-1.5350491811590863e-33, -5.341963141796802e-34, 1.5575490243063648e-33, -1.1393839558555175e-35]",
|
|
25
|
+
"Vector[-1.5350491811590863e-33, -5.341963141796802e-34, 8.732015868384436e-34, -1.1393839558555175e-35]",
|
|
26
|
+
"Vector[2.1481152051158145e-34, -1.1561136621745396e-33, 1.1802401093042232e-33, -1.1926088222499382e-33]",
|
|
27
|
+
"Vector[5.4468703973847035e-34, 1.3947548738235502e-33, 4.244444951915549e-34, -1.5154918934744699e-33]",
|
|
28
|
+
"Vector[4.407040152206215e-34, -2.6755349121192108e-34, -7.009651291770463e-34, -1.374288578447605e-33]"
|
|
29
|
+
],
|
|
30
|
+
"quality_values": [
|
|
31
|
+
"100.0% (SubQs = [4.14e-34, 3.98e-34], ver. 420)",
|
|
32
|
+
"100.0% (SubQs = [5.37e-34, 4.03e-34], ver. 420)",
|
|
33
|
+
"100.0% (SubQs = [6.08e-34, 3.97e-34], ver. 420)",
|
|
34
|
+
"100.0% (SubQs = [1.05e-34, 6.86e-34], ver. 420)",
|
|
35
|
+
"100.0% (SubQs = [1.02e-33, 4.92e-34], ver. 420)",
|
|
36
|
+
"100.0% (SubQs = [1.33e-33, 4.73e-34], ver. 420)",
|
|
37
|
+
"100.0% (SubQs = [5.22e-35, 8.78e-34], ver. 420)",
|
|
38
|
+
"100.0% (SubQs = [1.54e-34, 8.89e-34], ver. 420)",
|
|
39
|
+
"100.0% (SubQs = [1.53e-33, 4.64e-34], ver. 420)",
|
|
40
|
+
"100.0% (SubQs = [5.99e-34, 7.72e-34], ver. 420)",
|
|
41
|
+
"100.0% (SubQs = [7.59e-34, 9.01e-34], ver. 420)",
|
|
42
|
+
"100.0% (SubQs = [8.99e-34, 8.58e-34], ver. 420)",
|
|
43
|
+
"100.0% (SubQs = [2.22e-34, 1.1e-33], ver. 420)",
|
|
44
|
+
"100.0% (SubQs = [9.62e-34, 8.68e-34], ver. 420)",
|
|
45
|
+
"100.0% (SubQs = [1.82e-33, 6.79e-34], ver. 420)",
|
|
46
|
+
"100.0% (SubQs = [5.23e-34, 1.13e-33], ver. 420)",
|
|
47
|
+
"100.0% (SubQs = [1.21e-33, 9.23e-34], ver. 420)",
|
|
48
|
+
"100.0% (SubQs = [9.54e-34, 1.02e-33], ver. 420)",
|
|
49
|
+
"100.0% (SubQs = [8.48e-34, 1.09e-33], ver. 420)",
|
|
50
|
+
"100.0% (SubQs = [1.9e-33, 8.13e-34], ver. 420)"
|
|
51
|
+
],
|
|
52
|
+
"objective": "#<MinimizeRMSAndSum:0x007fe9a184be70>"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"specialists": [
|
|
56
|
+
{
|
|
57
|
+
"json_class": "FeldtRuby::Optimize::Archive::GoalTopList",
|
|
58
|
+
"data": {
|
|
59
|
+
"max_size": 5,
|
|
60
|
+
"top_list": [
|
|
61
|
+
"Vector[-9.615930905072786e-33, 4.59127418428953e-33, 1.5234591770668713e-32, -1.0213910705788213e-32]",
|
|
62
|
+
"Vector[2.9703517549037285e-33, -1.248167005887202e-32, 1.1288694472406572e-32, -1.7718788688711247e-33]",
|
|
63
|
+
"Vector[1.1474528493196208e-32, -2.7528425396866883e-33, 2.6715836582877643e-33, -1.1400340625482263e-32]",
|
|
64
|
+
"Vector[4.449719771038471e-33, 1.850578404606684e-32, -1.372599097841034e-32, -9.215288004790806e-33]",
|
|
65
|
+
"Vector[-3.571926477368521e-32, 3.244495926808932e-32, -5.418334544872519e-33, 8.713179387296223e-33]"
|
|
66
|
+
],
|
|
67
|
+
"quality_values": [
|
|
68
|
+
"100.0% (SubQs = [3.98e-36, 1.06e-32], ver. 420)",
|
|
69
|
+
"100.0% (SubQs = [5.5e-36, 8.59e-33], ver. 420)",
|
|
70
|
+
"100.0% (SubQs = [7.07e-36, 8.31e-33], ver. 420)",
|
|
71
|
+
"100.0% (SubQs = [1.42e-35, 1.26e-32], ver. 420)",
|
|
72
|
+
"100.0% (SubQs = [2.05e-35, 2.47e-32], ver. 420)"
|
|
73
|
+
],
|
|
74
|
+
"objective": "#<MinimizeRMSAndSum:0x007fe9a184be70>",
|
|
75
|
+
"objective_index": 0,
|
|
76
|
+
"objective_name": "objective_min_sum"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"json_class": "FeldtRuby::Optimize::Archive::GoalTopList",
|
|
81
|
+
"data": {
|
|
82
|
+
"max_size": 5,
|
|
83
|
+
"top_list": [
|
|
84
|
+
"Vector[5.690616393750528e-34, -2.3355528642494594e-34, 4.643573191513474e-34, -1.917310422255142e-34]",
|
|
85
|
+
"Vector[3.92978592984352e-34, 3.177186083763661e-35, -6.705768207338718e-34, -1.6854383035496224e-34]",
|
|
86
|
+
"Vector[1.5144596966432141e-34, 3.2854085523776127e-34, -4.919007599874781e-34, -5.254279363766363e-34]",
|
|
87
|
+
"Vector[7.714498498702072e-34, 1.4732439530231907e-34, 4.776830230246573e-34, 1.319508569506661e-34]",
|
|
88
|
+
"Vector[-7.985448841993761e-34, -4.650702542519649e-34, 1.0333041708593775e-34, -1.715732599374026e-34]"
|
|
89
|
+
],
|
|
90
|
+
"quality_values": [
|
|
91
|
+
"100.0% (SubQs = [6.08e-34, 3.97e-34], ver. 420)",
|
|
92
|
+
"100.0% (SubQs = [4.14e-34, 3.98e-34], ver. 420)",
|
|
93
|
+
"100.0% (SubQs = [5.37e-34, 4.03e-34], ver. 420)",
|
|
94
|
+
"100.0% (SubQs = [1.53e-33, 4.64e-34], ver. 420)",
|
|
95
|
+
"100.0% (SubQs = [1.33e-33, 4.73e-34], ver. 420)"
|
|
96
|
+
],
|
|
97
|
+
"objective": "#<MinimizeRMSAndSum:0x007fe9a184be70>",
|
|
98
|
+
"objective_index": 1,
|
|
99
|
+
"objective_name": "objective_min_rms"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"weirdos": {
|
|
104
|
+
"json_class": "FeldtRuby::Optimize::Archive::WeirdoTopList",
|
|
105
|
+
"data": {
|
|
106
|
+
"max_size": 10,
|
|
107
|
+
"top_list": [
|
|
108
|
+
"Vector[-0.0019044882512560613, 0.009481335601935582, -0.024299149058169944, 0.01644621882943969]",
|
|
109
|
+
"Vector[-0.002336002098539184, -0.0011328152153534908, -0.002919457015502706, 0.005384406255801217]",
|
|
110
|
+
"Vector[-0.000212713252898527, -0.00026116276684590893, -0.00015700863312597923, 0.0006925169327167096]",
|
|
111
|
+
"Vector[-0.0006292872425139322, 0.00028433348523478833, -3.296307630564648e-05, 0.00025614364670802737]",
|
|
112
|
+
"Vector[-0.00044589271102821995, 0.0001507180794986237, 0.0005375696283590799, -0.00012391959968973396]",
|
|
113
|
+
"Vector[0.0002685510741798464, -0.00018255262169129994, 0.00011099055409430846, 0.00033646021393768475]",
|
|
114
|
+
"Vector[-2.9171529527878796e-05, -6.5003814421593835e-06, -8.256851193381469e-06, 5.0270287068797815e-05]",
|
|
115
|
+
"Vector[1.1999984048880376e-05, -3.223391818033675e-05, 1.1715098248587656e-05, -1.80284782645308e-06]",
|
|
116
|
+
"Vector[1.285250921671595e-07, -7.961342736434783e-08, -5.3641724601111016e-08, -1.4897905737316017e-07]",
|
|
117
|
+
"Vector[3.857240621811628e-08, 9.77694067874942e-08, -1.2780417924260806e-07, 3.661084070782956e-07]"
|
|
118
|
+
],
|
|
119
|
+
"quality_values": [
|
|
120
|
+
"99.1567% (SubQs = [0.000276, 0.0154], ver. 420)",
|
|
121
|
+
"99.8024% (SubQs = [0.001, 0.00333], ver. 420)",
|
|
122
|
+
"99.9776% (SubQs = [6.16e-05, 0.000393], ver. 420)",
|
|
123
|
+
"99.9779% (SubQs = [0.000122, 0.000369], ver. 420)",
|
|
124
|
+
"99.9783% (SubQs = [0.000118, 0.000363], ver. 420)",
|
|
125
|
+
"99.9779% (SubQs = [0.000533, 0.00024], ver. 420)",
|
|
126
|
+
"99.9983% (SubQs = [6.34e-06, 2.95e-05], ver. 420)",
|
|
127
|
+
"99.9988% (SubQs = [1.03e-05, 1.82e-05], ver. 420)",
|
|
128
|
+
"100.0% (SubQs = [1.54e-07, 1.09e-07], ver. 420)",
|
|
129
|
+
"100.0% (SubQs = [3.75e-07, 2.01e-07], ver. 420)"
|
|
130
|
+
],
|
|
131
|
+
"objective": "#<FeldtRuby::Optimize::EuclideanDistanceToBest:0x007fe9a1853ff8>",
|
|
132
|
+
"diversity_quality_values": [
|
|
133
|
+
"90.3578% (SubQs = [0.0309], ver. 39)",
|
|
134
|
+
"19.4568% (SubQs = [0.00665], ver. 39)",
|
|
135
|
+
"2.29865% (SubQs = [0.000786], ver. 39)",
|
|
136
|
+
"2.15629% (SubQs = [0.000737], ver. 39)",
|
|
137
|
+
"2.12095% (SubQs = [0.000725], ver. 39)",
|
|
138
|
+
"1.40562% (SubQs = [0.000481], ver. 39)",
|
|
139
|
+
"0.172746% (SubQs = [5.91e-05], ver. 39)",
|
|
140
|
+
"0.106403% (SubQs = [3.64e-05], ver. 39)",
|
|
141
|
+
"0.000640308% (SubQs = [2.19e-07], ver. 39)",
|
|
142
|
+
"0.00117507% (SubQs = [4.02e-07], ver. 39)"
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -15,7 +15,9 @@ def best_from_de_on_objective(objective, dimensions, numSteps = 25_000,
|
|
|
15
15
|
best = de.optimize().to_a
|
|
16
16
|
elapsed = Time.now - start_time
|
|
17
17
|
|
|
18
|
-
return best, objective, elapsed
|
|
18
|
+
return best, objective, elapsed, de
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
best, obj, time = best_from_de_on_objective MinSphere.new, 30, 220_000
|
|
21
|
+
#best, obj, time, de = best_from_de_on_objective MinSphere.new, 30, 220_000
|
|
22
|
+
best, obj, time, de = best_from_de_on_objective MinEggHolder.new, nil, 15_000
|
|
23
|
+
File.open("archive.json", "w") {|fh| fh.puts(JSON.pretty_generate(de.archive))}
|
data/spikes/simple_de_run.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require File.join(FeldtRubyLongTestDir, "single_objective_problems")
|
|
2
1
|
require 'feldtruby/optimize/differential_evolution'
|
|
2
|
+
require 'feldtruby/optimize/problems/single_objective_problems'
|
|
3
3
|
include FeldtRuby::Optimize
|
|
4
4
|
|
|
5
5
|
module MiniTest::Assertions
|
|
@@ -79,7 +79,7 @@ end
|
|
|
79
79
|
|
|
80
80
|
describe "Easom function" do
|
|
81
81
|
it 'can optimize the Easom function' do
|
|
82
|
-
best, obj, time = best_from_de_on_objective MinEasom.new, nil,
|
|
82
|
+
best, obj, time = best_from_de_on_objective MinEasom.new, nil, 15_000, false, FeldtRuby::Optimize::DEOptimizer_Best_1_Bin
|
|
83
83
|
best.must_be_close_to_one_solution_of obj
|
|
84
84
|
time.must_be :<, 1.5
|
|
85
85
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'feldtruby/statistics/design_of_experiments'
|
|
2
|
+
|
|
3
|
+
describe 'Latin Hypercube Sampling' do
|
|
4
|
+
it "can sample in a rectangular multi-dim bounding box" do
|
|
5
|
+
params = {
|
|
6
|
+
:a => [0,100],
|
|
7
|
+
:b => [0,50],
|
|
8
|
+
:c => [0.0, 1.0]
|
|
9
|
+
}
|
|
10
|
+
candidates = RC.latin_hypercube_sample_of_parameters(params, 100)
|
|
11
|
+
candidates.must_be_instance_of Hash
|
|
12
|
+
candidates.keys.sort.must_equal params.keys.sort
|
|
13
|
+
|
|
14
|
+
candidates[:a].must_be_instance_of Array
|
|
15
|
+
candidates[:a].length.must_equal 100
|
|
16
|
+
candidates[:a].each do |a|
|
|
17
|
+
a.must_be :>=, 0
|
|
18
|
+
a.must_be :<=, 100
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
candidates[:b].must_be_instance_of Array
|
|
22
|
+
candidates[:b].length.must_equal 100
|
|
23
|
+
candidates[:b].each do |b|
|
|
24
|
+
b.must_be :>=, 0
|
|
25
|
+
b.must_be :<=, 50
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
candidates[:c].must_be_instance_of Array
|
|
29
|
+
candidates[:c].length.must_equal 100
|
|
30
|
+
candidates[:c].each do |b|
|
|
31
|
+
b.must_be :>=, 0.0
|
|
32
|
+
b.must_be :<=, 1.0
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
metadata
CHANGED
|
@@ -1,94 +1,83 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: feldtruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.4.12
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Robert Feldt
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date: 2013-04-
|
|
11
|
+
date: 2013-04-21 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rinruby
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
17
|
+
- - '>='
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
19
|
version: '0'
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
|
-
- -
|
|
24
|
+
- - '>='
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
26
|
version: '0'
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: json
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
|
-
- -
|
|
31
|
+
- - '>='
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
37
33
|
version: '0'
|
|
38
34
|
type: :runtime
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
|
-
- -
|
|
38
|
+
- - '>='
|
|
44
39
|
- !ruby/object:Gem::Version
|
|
45
40
|
version: '0'
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
|
47
42
|
name: nokogiri
|
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
44
|
requirements:
|
|
51
|
-
- -
|
|
45
|
+
- - '>='
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
53
47
|
version: '0'
|
|
54
48
|
type: :runtime
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
51
|
requirements:
|
|
59
|
-
- -
|
|
52
|
+
- - '>='
|
|
60
53
|
- !ruby/object:Gem::Version
|
|
61
54
|
version: '0'
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
|
63
56
|
name: mongo
|
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
58
|
requirements:
|
|
67
|
-
- -
|
|
59
|
+
- - '>='
|
|
68
60
|
- !ruby/object:Gem::Version
|
|
69
61
|
version: '0'
|
|
70
62
|
type: :runtime
|
|
71
63
|
prerelease: false
|
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
65
|
requirements:
|
|
75
|
-
- -
|
|
66
|
+
- - '>='
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
77
68
|
version: '0'
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
|
79
70
|
name: bson_ext
|
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
72
|
requirements:
|
|
83
|
-
- -
|
|
73
|
+
- - '>='
|
|
84
74
|
- !ruby/object:Gem::Version
|
|
85
75
|
version: '0'
|
|
86
76
|
type: :runtime
|
|
87
77
|
prerelease: false
|
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
79
|
requirements:
|
|
91
|
-
- -
|
|
80
|
+
- - '>='
|
|
92
81
|
- !ruby/object:Gem::Version
|
|
93
82
|
version: '0'
|
|
94
83
|
description: Robert Feldt's Common Ruby Code lib
|
|
@@ -106,6 +95,7 @@ files:
|
|
|
106
95
|
- README.md
|
|
107
96
|
- Rakefile
|
|
108
97
|
- TODO
|
|
98
|
+
- archive.json
|
|
109
99
|
- feldtruby.gemspec
|
|
110
100
|
- lib/feldtruby.rb
|
|
111
101
|
- lib/feldtruby/annotations.rb
|
|
@@ -128,6 +118,8 @@ files:
|
|
|
128
118
|
- lib/feldtruby/optimize/max_steps_termination_criterion.rb
|
|
129
119
|
- lib/feldtruby/optimize/objective.rb
|
|
130
120
|
- lib/feldtruby/optimize/optimizer.rb
|
|
121
|
+
- lib/feldtruby/optimize/problems/multi_objective_problems.rb
|
|
122
|
+
- lib/feldtruby/optimize/problems/single_objective_problems.rb
|
|
131
123
|
- lib/feldtruby/optimize/random_search.rb
|
|
132
124
|
- lib/feldtruby/optimize/search_space.rb
|
|
133
125
|
- lib/feldtruby/optimize/stdout_logger.rb
|
|
@@ -136,6 +128,7 @@ files:
|
|
|
136
128
|
- lib/feldtruby/statistics.rb
|
|
137
129
|
- lib/feldtruby/statistics/array_archive.rb
|
|
138
130
|
- lib/feldtruby/statistics/clustering.rb
|
|
131
|
+
- lib/feldtruby/statistics/design_of_experiments.rb
|
|
139
132
|
- lib/feldtruby/statistics/distance.rb
|
|
140
133
|
- lib/feldtruby/statistics/distance/string_distance.rb
|
|
141
134
|
- lib/feldtruby/statistics/euclidean_distance.rb
|
|
@@ -149,6 +142,7 @@ files:
|
|
|
149
142
|
- lib/feldtruby/visualization/circos.rb
|
|
150
143
|
- lib/feldtruby/word_counter.rb
|
|
151
144
|
- old/event_logger.rb
|
|
145
|
+
- spikes/archive.json
|
|
152
146
|
- spikes/comparing_samplers_on_classic_optimization_functions/analyze_sampler_comparison_results.R
|
|
153
147
|
- spikes/comparing_samplers_on_classic_optimization_functions/compare_samplers.rb
|
|
154
148
|
- spikes/comparing_samplers_on_classic_optimization_functions/results_comparing_samplers_130405_175934.csv
|
|
@@ -160,8 +154,6 @@ files:
|
|
|
160
154
|
- spikes/simple_de_run.rb
|
|
161
155
|
- spikes/zlib_for_short_strings.rb
|
|
162
156
|
- test/helper.rb
|
|
163
|
-
- test/long_running/multi_objective_problems.rb
|
|
164
|
-
- test/long_running/single_objective_problems.rb
|
|
165
157
|
- test/long_running/test_single_objective_optimization.rb
|
|
166
158
|
- test/skip_test_array_archive.rb
|
|
167
159
|
- test/test_array.rb
|
|
@@ -187,6 +179,7 @@ files:
|
|
|
187
179
|
- test/test_optimize_stochastic_hill_climber.rb
|
|
188
180
|
- test/test_sax.rb
|
|
189
181
|
- test/test_statistics.rb
|
|
182
|
+
- test/test_statistics_design_of_experiments.rb
|
|
190
183
|
- test/test_string_distance.rb
|
|
191
184
|
- test/test_sub_qualitites_comparator.rb
|
|
192
185
|
- test/test_time.rb
|
|
@@ -196,32 +189,29 @@ files:
|
|
|
196
189
|
- test/tmp_shorter.csv
|
|
197
190
|
homepage: https://github.com/robertfeldt/feldtruby
|
|
198
191
|
licenses: []
|
|
192
|
+
metadata: {}
|
|
199
193
|
post_install_message:
|
|
200
194
|
rdoc_options: []
|
|
201
195
|
require_paths:
|
|
202
196
|
- lib
|
|
203
197
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
|
-
none: false
|
|
205
198
|
requirements:
|
|
206
|
-
- -
|
|
199
|
+
- - '>='
|
|
207
200
|
- !ruby/object:Gem::Version
|
|
208
201
|
version: '0'
|
|
209
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
|
-
none: false
|
|
211
203
|
requirements:
|
|
212
|
-
- -
|
|
204
|
+
- - '>='
|
|
213
205
|
- !ruby/object:Gem::Version
|
|
214
206
|
version: '0'
|
|
215
207
|
requirements: []
|
|
216
208
|
rubyforge_project:
|
|
217
|
-
rubygems_version:
|
|
209
|
+
rubygems_version: 2.0.0
|
|
218
210
|
signing_key:
|
|
219
|
-
specification_version:
|
|
211
|
+
specification_version: 4
|
|
220
212
|
summary: Robert Feldt's Common Ruby Code lib
|
|
221
213
|
test_files:
|
|
222
214
|
- test/helper.rb
|
|
223
|
-
- test/long_running/multi_objective_problems.rb
|
|
224
|
-
- test/long_running/single_objective_problems.rb
|
|
225
215
|
- test/long_running/test_single_objective_optimization.rb
|
|
226
216
|
- test/skip_test_array_archive.rb
|
|
227
217
|
- test/test_array.rb
|
|
@@ -247,6 +237,7 @@ test_files:
|
|
|
247
237
|
- test/test_optimize_stochastic_hill_climber.rb
|
|
248
238
|
- test/test_sax.rb
|
|
249
239
|
- test/test_statistics.rb
|
|
240
|
+
- test/test_statistics_design_of_experiments.rb
|
|
250
241
|
- test/test_string_distance.rb
|
|
251
242
|
- test/test_sub_qualitites_comparator.rb
|
|
252
243
|
- test/test_time.rb
|