feldtruby 0.3.18 → 0.4.0

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: 1c76bb7e979470ff22539fc9543ddf008dfe34a0
4
- data.tar.gz: b9215aa49df906e914bd69611fefd0eddd46ae03
3
+ metadata.gz: d26d52d618b786234ccdce29a35965776806697c
4
+ data.tar.gz: 7df492becb40e830a2dfc72099a0f00b14321803
5
5
  SHA512:
6
- metadata.gz: ff95c9ebbca79724d25133f970d3a638d118f624eb72b6601605f697a53c1132d7b7923c670319b547d70006b6dd8f81416aba5498ec4dc75d85e6fe8c16ce63
7
- data.tar.gz: 78b95306f0af7db720989945452304e4bd6977209cb3eb84d4d7faf43807c72b28776bc140be95ea1c5bcb9d9857ecffb0bb5fbf3b04f68fb162715479812496
6
+ metadata.gz: 3780f3a073bfd81db3c25afcd28b464bf04df82445e37ac00a6117eec023b09fa424001cc9aff66a0fc9b0ba3939aeacadf558c118798e7db3f5d18c985a6bc1
7
+ data.tar.gz: 704149c43950a6893da57311593edbd77dc392a27ef83979cf2b88d62d8a495c1878e9748f36f7cb206f74fbdcd12a567c0621003d13c409e869ae1dd54f7de4
data/Rakefile CHANGED
@@ -21,8 +21,18 @@ task :test_sep do
21
21
  end
22
22
  end
23
23
 
24
- desc "Run all tests"
24
+ desc "Run all normal tests"
25
25
  task :test do
26
+ run_tests Dir["test/test*.rb"]
27
+ end
28
+
29
+ desc "Run long-running tests"
30
+ task :testlong do
31
+ run_tests Dir["test/long_running/test*.rb"]
32
+ end
33
+
34
+ desc "Run all tests"
35
+ task :testall do
26
36
  run_tests Dir["test/**/test*.rb"]
27
37
  end
28
38
 
@@ -129,6 +129,11 @@ module BasicStatistics
129
129
  sum
130
130
  end
131
131
 
132
+ # Root mean square from another vector
133
+ def rms_from(other)
134
+ Math.sqrt(sum_squared_error(other))
135
+ end
136
+
132
137
  # Return summary stats for an array of numbers.
133
138
  def summary_stats
134
139
  return "" if length == 0
@@ -8,8 +8,8 @@ module FeldtRuby
8
8
  # Simplest possible logger only prints to STDOUT.
9
9
  class Logger
10
10
  DefaultParams = {
11
- :verbose => true,
12
- :print_frequency => 0.3 # Minimum seconds between consecutive messages printed for the same event type
11
+ :verbose => false,
12
+ :printFrequency => 0.0 # Minimum seconds between consecutive messages printed for the same event type
13
13
  }
14
14
 
15
15
  UnixEpoch = Time.at(0)
@@ -24,7 +24,7 @@ class Logger
24
24
 
25
25
  self.verbose = @params[:verbose]
26
26
 
27
- self.print_frequency = @params[:print_frequency]
27
+ self.print_frequency = @params[:printFrequency]
28
28
 
29
29
  @ios = []
30
30
 
@@ -62,7 +62,7 @@ class Logger
62
62
 
63
63
  # Set the minimum time between printing successive messages of the same type.
64
64
  def print_frequency=(seconds = 1.0)
65
- @print_frequency = @params[:print_frequency] = seconds
65
+ @print_frequency = @params[:printFrequency] = seconds
66
66
  end
67
67
 
68
68
  # Add one more _io_ stream to which events are logged.
@@ -113,7 +113,11 @@ class Logger
113
113
  end
114
114
 
115
115
  # Log a data event.
116
- def log_data eventType, data, message = nil
116
+ def log_data eventType, data, message = nil, tagWithData = false
117
+ if tagWithData
118
+ dstr = data.keys.map {|k| "#{k}: #{data[k]}"}.join("\n ")
119
+ message += "\n #{dstr}"
120
+ end
117
121
  log_event eventType, {"d" => data}, message
118
122
  end
119
123
 
@@ -157,7 +161,7 @@ class Logger
157
161
 
158
162
  elapsed_str = Time.human_readable_timestr elapsed_time(time)
159
163
 
160
- s = time.strftime("\n%H:%M.%S%3N (#{elapsed_str}), ") + message
164
+ s = time.strftime("\n%H:%M.%S (#{elapsed_str}), ") + message
161
165
 
162
166
  @ios.each {|io| io.puts s}
163
167
 
@@ -171,7 +175,15 @@ end
171
175
  module Logging
172
176
  attr_accessor :logger
173
177
 
174
- def setup_logger_and_distribute_to_instance_variables(logger = nil)
178
+ def setup_logger_and_distribute_to_instance_variables(loggerOrOptions = nil)
179
+
180
+ if Hash === loggerOrOptions
181
+ options = loggerOrOptions
182
+ logger = nil
183
+ else
184
+ options = {}
185
+ logger = loggerOrOptions
186
+ end
175
187
 
176
188
  # Precedence for loggers if several has been setup:
177
189
  # 1. One specified as parameter to this method
@@ -179,7 +191,7 @@ module Logging
179
191
  # 3. First one found on an instance var
180
192
  # 4. Create a new standard one
181
193
  self.logger = logger || self.logger || __find_logger_set_on_instance_vars() ||
182
- new_default_logger()
194
+ new_default_logger(options)
183
195
 
184
196
  # Now distribute the preferred logger to all instance vars, recursively.
185
197
  self.instance_variables.each do |ivar_name|
@@ -195,8 +207,8 @@ module Logging
195
207
  end
196
208
 
197
209
  # Override to use another logger as default if no logger is found.
198
- def new_default_logger
199
- FeldtRuby::Logger.new
210
+ def new_default_logger(options = {})
211
+ FeldtRuby::Logger.new(STDOUT, options)
200
212
  end
201
213
 
202
214
  # Find a logger if one has been set on any of my instance vars or their
@@ -60,20 +60,20 @@ class DEOptimizerBase < EvolutionaryOptimizer
60
60
 
61
61
  best, worst = objective.rank_candidates([target, trial])
62
62
 
63
- # Supplant the target vector with the trial vector if better
63
+ # Supplant the target vector with the trial vector if trial vector is better.
64
64
  if best != target
65
65
  logger.log_data :better_candidate_found, {
66
- :better => best,
67
- :quality => @objective.quality_of(best)}, "Trial vector was better"
68
- trial_better = true
66
+ "Trial" => trial,
67
+ "Trial Quality" => @objective.quality_of(trial),
68
+ "Target" => target,
69
+ "Target Quality" => @objective.quality_of(target)
70
+ }, "DE (step #{@num_optimization_steps}): Trial vector was better than target vector"
69
71
  update_candidate_in_population(target_index, trial)
72
+ feedback_on_trial_vs_target(trial, target, true)
70
73
  else
71
- trial_better = false
74
+ feedback_on_trial_vs_target(trial, target, false)
72
75
  end
73
76
 
74
- # Give feedback to strategy since some strategies use this to self-adapt
75
- feedback_on_trial_vs_target(trial, target, trial_better)
76
-
77
77
  [best]
78
78
  end
79
79