CooCoo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/CooCoo.gemspec +47 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +88 -0
  6. data/README.md +123 -0
  7. data/Rakefile +81 -0
  8. data/bin/cuda-dev-info +25 -0
  9. data/bin/cuda-free +28 -0
  10. data/bin/cuda-free-trend +7 -0
  11. data/bin/ffi-gen +267 -0
  12. data/bin/spec_runner_html.sh +42 -0
  13. data/bin/trainer +198 -0
  14. data/bin/trend-cost +13 -0
  15. data/examples/char-rnn.rb +405 -0
  16. data/examples/cifar/cifar.rb +94 -0
  17. data/examples/img-similarity.rb +201 -0
  18. data/examples/math_ops.rb +57 -0
  19. data/examples/mnist.rb +365 -0
  20. data/examples/mnist_classifier.rb +293 -0
  21. data/examples/mnist_dream.rb +214 -0
  22. data/examples/seeds.rb +268 -0
  23. data/examples/seeds_dataset.txt +210 -0
  24. data/examples/t10k-images-idx3-ubyte +0 -0
  25. data/examples/t10k-labels-idx1-ubyte +0 -0
  26. data/examples/train-images-idx3-ubyte +0 -0
  27. data/examples/train-labels-idx1-ubyte +0 -0
  28. data/ext/buffer/Rakefile +50 -0
  29. data/ext/buffer/buffer.pre.cu +727 -0
  30. data/ext/buffer/matrix.pre.cu +49 -0
  31. data/lib/CooCoo.rb +1 -0
  32. data/lib/coo-coo.rb +18 -0
  33. data/lib/coo-coo/activation_functions.rb +344 -0
  34. data/lib/coo-coo/consts.rb +5 -0
  35. data/lib/coo-coo/convolution.rb +298 -0
  36. data/lib/coo-coo/core_ext.rb +75 -0
  37. data/lib/coo-coo/cost_functions.rb +91 -0
  38. data/lib/coo-coo/cuda.rb +116 -0
  39. data/lib/coo-coo/cuda/device_buffer.rb +240 -0
  40. data/lib/coo-coo/cuda/device_buffer/ffi.rb +109 -0
  41. data/lib/coo-coo/cuda/error.rb +51 -0
  42. data/lib/coo-coo/cuda/host_buffer.rb +117 -0
  43. data/lib/coo-coo/cuda/runtime.rb +157 -0
  44. data/lib/coo-coo/cuda/vector.rb +315 -0
  45. data/lib/coo-coo/data_sources.rb +2 -0
  46. data/lib/coo-coo/data_sources/xournal.rb +25 -0
  47. data/lib/coo-coo/data_sources/xournal/bitmap_stream.rb +197 -0
  48. data/lib/coo-coo/data_sources/xournal/document.rb +377 -0
  49. data/lib/coo-coo/data_sources/xournal/loader.rb +144 -0
  50. data/lib/coo-coo/data_sources/xournal/renderer.rb +101 -0
  51. data/lib/coo-coo/data_sources/xournal/saver.rb +99 -0
  52. data/lib/coo-coo/data_sources/xournal/training_document.rb +78 -0
  53. data/lib/coo-coo/data_sources/xournal/training_document/constants.rb +15 -0
  54. data/lib/coo-coo/data_sources/xournal/training_document/document_maker.rb +89 -0
  55. data/lib/coo-coo/data_sources/xournal/training_document/document_reader.rb +105 -0
  56. data/lib/coo-coo/data_sources/xournal/training_document/example.rb +37 -0
  57. data/lib/coo-coo/data_sources/xournal/training_document/sets.rb +76 -0
  58. data/lib/coo-coo/debug.rb +8 -0
  59. data/lib/coo-coo/dot.rb +129 -0
  60. data/lib/coo-coo/drawing.rb +4 -0
  61. data/lib/coo-coo/drawing/cairo_canvas.rb +100 -0
  62. data/lib/coo-coo/drawing/canvas.rb +68 -0
  63. data/lib/coo-coo/drawing/chunky_canvas.rb +101 -0
  64. data/lib/coo-coo/drawing/sixel.rb +214 -0
  65. data/lib/coo-coo/enum.rb +17 -0
  66. data/lib/coo-coo/from_name.rb +58 -0
  67. data/lib/coo-coo/fully_connected_layer.rb +205 -0
  68. data/lib/coo-coo/generation_script.rb +38 -0
  69. data/lib/coo-coo/grapher.rb +140 -0
  70. data/lib/coo-coo/image.rb +286 -0
  71. data/lib/coo-coo/layer.rb +67 -0
  72. data/lib/coo-coo/layer_factory.rb +26 -0
  73. data/lib/coo-coo/linear_layer.rb +59 -0
  74. data/lib/coo-coo/math.rb +607 -0
  75. data/lib/coo-coo/math/abstract_vector.rb +121 -0
  76. data/lib/coo-coo/math/functions.rb +39 -0
  77. data/lib/coo-coo/math/interpolation.rb +7 -0
  78. data/lib/coo-coo/network.rb +264 -0
  79. data/lib/coo-coo/neuron.rb +112 -0
  80. data/lib/coo-coo/neuron_layer.rb +168 -0
  81. data/lib/coo-coo/option_parser.rb +18 -0
  82. data/lib/coo-coo/platform.rb +17 -0
  83. data/lib/coo-coo/progress_bar.rb +11 -0
  84. data/lib/coo-coo/recurrence/backend.rb +99 -0
  85. data/lib/coo-coo/recurrence/frontend.rb +101 -0
  86. data/lib/coo-coo/sequence.rb +187 -0
  87. data/lib/coo-coo/shell.rb +2 -0
  88. data/lib/coo-coo/temporal_network.rb +291 -0
  89. data/lib/coo-coo/trainer.rb +21 -0
  90. data/lib/coo-coo/trainer/base.rb +67 -0
  91. data/lib/coo-coo/trainer/batch.rb +82 -0
  92. data/lib/coo-coo/trainer/batch_stats.rb +27 -0
  93. data/lib/coo-coo/trainer/momentum_stochastic.rb +59 -0
  94. data/lib/coo-coo/trainer/stochastic.rb +47 -0
  95. data/lib/coo-coo/transformer.rb +272 -0
  96. data/lib/coo-coo/vector_layer.rb +194 -0
  97. data/lib/coo-coo/version.rb +3 -0
  98. data/lib/coo-coo/weight_deltas.rb +23 -0
  99. data/prototypes/convolution.rb +116 -0
  100. data/prototypes/linear_drop.rb +51 -0
  101. data/prototypes/recurrent_layers.rb +79 -0
  102. data/www/images/screamer.png +0 -0
  103. data/www/images/screamer.xcf +0 -0
  104. data/www/index.html +82 -0
  105. metadata +373 -0
@@ -0,0 +1,268 @@
1
+ #!/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require 'net/http'
5
+ require 'coo-coo'
6
+
7
+ class Seed
8
+ attr_accessor :area
9
+ attr_accessor :perimeter
10
+ attr_accessor :compactness
11
+ attr_accessor :length
12
+ attr_accessor :width
13
+ attr_accessor :asymetry_coeff
14
+ attr_accessor :groove_length
15
+ attr_accessor :type
16
+
17
+ def initialize(area = 0.0,
18
+ perimeter = 0.0,
19
+ compactness = 0.0,
20
+ length = 0.0,
21
+ width = 0.0,
22
+ asymetry_coeff = 0.0,
23
+ groove_length = 0.0,
24
+ type = -1)
25
+ @area = area
26
+ @perimeter = perimeter
27
+ @compactness = compactness
28
+ @length = length
29
+ @width = width
30
+ @asymetry_coeff = asymetry_coeff
31
+ @groove_length = groove_length
32
+ @type = type.to_i
33
+ end
34
+
35
+ def values
36
+ CooCoo::Vector[[ area,
37
+ perimeter,
38
+ compactness,
39
+ length,
40
+ width,
41
+ asymetry_coeff,
42
+ groove_length
43
+ ]]
44
+ end
45
+ end
46
+
47
+ class SeedData
48
+ def initialize(path)
49
+ load_data(path)
50
+ end
51
+
52
+ def load_data(path)
53
+ max_seed = Seed.new
54
+
55
+ @seeds = File.readlines(path).collect do |line|
56
+ Seed.new(*line.split.collect(&:to_f))
57
+ end
58
+
59
+ @max_seed = Seed.new(@seeds.collect(&:area).max,
60
+ @seeds.collect(&:perimeter).max,
61
+ @seeds.collect(&:compactness).max,
62
+ @seeds.collect(&:length).max,
63
+ @seeds.collect(&:width).max,
64
+ @seeds.collect(&:asymetry_coeff).max,
65
+ @seeds.collect(&:groove_length).max,
66
+ @seeds.collect(&:type).max)
67
+ end
68
+
69
+ def each(&block)
70
+ return enum_for(:each) unless block_given?
71
+
72
+ @seeds.each do |seed|
73
+ block.call(seed)
74
+ end
75
+ end
76
+
77
+ def encode_type(type)
78
+ raise ArgumentError.new("bad seed type #{type}") if type > num_types
79
+
80
+ t = CooCoo::Vector.zeros(num_types)
81
+ t[type - 1] = 1.0
82
+ t
83
+ end
84
+
85
+ def normalize_seed(seed)
86
+ seed.values / @max_seed.values
87
+ end
88
+
89
+ def each_example(&block)
90
+ return enum_for(:each_example) unless block_given?
91
+
92
+ @seeds.each do |seed|
93
+ t = encode_type(seed.type)
94
+ block.call([ t, normalize_seed(seed) ])
95
+ end
96
+ end
97
+
98
+ def num_types
99
+ @max_seed.type
100
+ end
101
+ end
102
+
103
+ require 'fileutils'
104
+
105
+ def backup(path)
106
+ if File.exists?(path)
107
+ backup = path.to_s + "~"
108
+ if File.exists?(backup)
109
+ File.delete(backup)
110
+ end
111
+ FileUtils.copy(path, backup)
112
+ end
113
+ end
114
+
115
+ require 'coo-coo/neuron_layer'
116
+ require 'ostruct'
117
+ require 'optparse'
118
+
119
+ DATA_FILE = Pathname.new(__FILE__).dirname.join("seeds_dataset.txt") # via http://archive.ics.uci.edu/ml/datasets/seeds
120
+
121
+ options = OpenStruct.new
122
+ options.model_path = nil
123
+ options.epochs = nil
124
+ options.data_path = DATA_FILE
125
+ options.activation_function = CooCoo.default_activation
126
+ options.hidden_size = 21
127
+ options.num_layers = 2
128
+ options.trainer = 'Stochastic'
129
+
130
+ op = CooCoo::OptionParser.new do |o|
131
+ o.on('-m', '--model PATH') do |path|
132
+ options.model_path = Pathname.new(path)
133
+ end
134
+
135
+ o.on('-t', '--train NUMBER') do |epochs|
136
+ options.epochs = epochs.to_i
137
+ end
138
+
139
+ o.on('-d', '--data PATH') do |path|
140
+ options.data_path = Pathname.new(path)
141
+ end
142
+
143
+ o.on('-f', '--activation FUNC') do |func|
144
+ options.activation_function = CooCoo::ActivationFunctions.from_name(func)
145
+ end
146
+
147
+ o.on('--hidden-size NUMBER') do |num|
148
+ options.hidden_size = num.to_i
149
+ end
150
+
151
+ o.on('--num-layers NUMBER') do |num|
152
+ options.num_layers = num.to_i
153
+ end
154
+
155
+ o.on('--trainer NAME') do |trainer|
156
+ options.trainer = trainer
157
+ end
158
+
159
+ o.on('--softmax') do
160
+ options.softmax = true
161
+ options.cost_function = CooCoo::CostFunctions.from_name('CrossEntropy')
162
+ end
163
+
164
+ o.on('-h', '--help') do
165
+ puts(o)
166
+ if options.trainer
167
+ t = CooCoo::Trainer.from_name(options.trainer)
168
+ raise NameError.new("Unknown trainer #{options.trainer}") unless t
169
+ opts, _ = t.options
170
+ puts(opts)
171
+ end
172
+ exit
173
+ end
174
+ end
175
+
176
+ args = op.parse!(ARGV)
177
+
178
+ trainer = nil
179
+ trainer_options = nil
180
+ if options.trainer
181
+ trainer = CooCoo::Trainer.from_name(options.trainer)
182
+ raise NameError.new("Unknown trainer #{options.trainer}") unless trainer
183
+ t_opts, trainer_options = trainer.options
184
+ argv = t_opts.parse!(args)
185
+ end
186
+
187
+ Random.srand(123)
188
+
189
+ training_data = SeedData.new(options.data_path)
190
+ model = CooCoo::Network.new()
191
+
192
+ puts("Using CUDA") if CooCoo::CUDA.available?
193
+
194
+ if options.model_path && File.exists?(options.model_path)
195
+ model.load!(options.model_path)
196
+ puts("Loaded model #{options.model_path}")
197
+ else
198
+ options.num_layers.times do |i|
199
+ inputs = case i
200
+ when 0 then 7
201
+ else options.hidden_size
202
+ end
203
+ outputs = case i
204
+ when (options.num_layers - 1) then training_data.num_types
205
+ else options.hidden_size
206
+ end
207
+ model.layer(CooCoo::Layer.new(inputs, outputs, options.activation_function))
208
+ end
209
+
210
+ if options.softmax
211
+ model.layer(CooCoo::LinearLayer.new(training_data.num_types, CooCoo::ActivationFunctions.from_name('ShiftedSoftMax')))
212
+ end
213
+
214
+ #model.layer(CooCoo::Layer.new(7, options.hidden_size, options.activation_function))
215
+ #model.layer(CooCoo::Layer.new(10, 5))
216
+ #model.layer(CooCoo::Layer.new(options.hidden_size, training_data.num_types, options.activation_function))
217
+ end
218
+
219
+ if options.epochs
220
+ puts("Training for #{options.epochs} epochs")
221
+ now = Time.now
222
+ bar = CooCoo::ProgressBar.create(:total => options.epochs.to_i)
223
+ errors = Array.new
224
+ options.epochs.to_i.times do |epoch|
225
+ trainer.train({ network: model,
226
+ data: training_data.each_example,
227
+ }.merge(trainer_options.to_h)) do |stats|
228
+ errors << stats.average_loss
229
+ end
230
+ cost = CooCoo::Sequence[errors].average
231
+ bar.log("Cost #{cost.average} #{cost}")
232
+ if options.model_path
233
+ backup(options.model_path)
234
+ model.save(options.model_path)
235
+ bar.log("Saved to #{options.model_path}")
236
+ end
237
+ bar.increment
238
+ end
239
+ puts("\n\tElapsed #{(Time.now - now) / 60.0} min.")
240
+ puts("Trained!")
241
+ end
242
+
243
+ puts("Predicting:")
244
+ puts("Seed values\t\t\t\t\tExpecting\tPrediction\tOutputs")
245
+
246
+ def try_seed(model, td, seed)
247
+ output, hidden_state = model.predict(td.normalize_seed(seed))
248
+ type = 1 + output.each_with_index.max[1]
249
+ puts("#{seed.values}\t#{seed.type}\t#{type}\t#{output}")
250
+ return(seed.type == type ? 0.0 : 1.0)
251
+ end
252
+
253
+ n_errors = training_data.each.first(4).collect { |seed|
254
+ try_seed(model, training_data, seed)
255
+ }.sum
256
+
257
+ n_errors += training_data.each.
258
+ select { |s| s.type == 2 }.
259
+ first(4).
260
+ collect { |seed| try_seed(model, training_data, seed) }.
261
+ sum
262
+
263
+ n_errors += training_data.each.
264
+ select { |s| s.type == 3 }.
265
+ first(4).
266
+ collect { |seed| try_seed(model, training_data, seed) }.
267
+ sum
268
+ puts("Errors: #{n_errors / 12.0 * 100.0}%")
@@ -0,0 +1,210 @@
1
+ 15.26 14.84 0.871 5.763 3.312 2.221 5.22 1
2
+ 14.88 14.57 0.8811 5.554 3.333 1.018 4.956 1
3
+ 14.29 14.09 0.905 5.291 3.337 2.699 4.825 1
4
+ 13.84 13.94 0.8955 5.324 3.379 2.259 4.805 1
5
+ 16.14 14.99 0.9034 5.658 3.562 1.355 5.175 1
6
+ 14.38 14.21 0.8951 5.386 3.312 2.462 4.956 1
7
+ 14.69 14.49 0.8799 5.563 3.259 3.586 5.219 1
8
+ 14.11 14.1 0.8911 5.42 3.302 2.7 5 1
9
+ 16.63 15.46 0.8747 6.053 3.465 2.04 5.877 1
10
+ 16.44 15.25 0.888 5.884 3.505 1.969 5.533 1
11
+ 15.26 14.85 0.8696 5.714 3.242 4.543 5.314 1
12
+ 14.03 14.16 0.8796 5.438 3.201 1.717 5.001 1
13
+ 13.89 14.02 0.888 5.439 3.199 3.986 4.738 1
14
+ 13.78 14.06 0.8759 5.479 3.156 3.136 4.872 1
15
+ 13.74 14.05 0.8744 5.482 3.114 2.932 4.825 1
16
+ 14.59 14.28 0.8993 5.351 3.333 4.185 4.781 1
17
+ 13.99 13.83 0.9183 5.119 3.383 5.234 4.781 1
18
+ 15.69 14.75 0.9058 5.527 3.514 1.599 5.046 1
19
+ 14.7 14.21 0.9153 5.205 3.466 1.767 4.649 1
20
+ 12.72 13.57 0.8686 5.226 3.049 4.102 4.914 1
21
+ 14.16 14.4 0.8584 5.658 3.129 3.072 5.176 1
22
+ 14.11 14.26 0.8722 5.52 3.168 2.688 5.219 1
23
+ 15.88 14.9 0.8988 5.618 3.507 0.7651 5.091 1
24
+ 12.08 13.23 0.8664 5.099 2.936 1.415 4.961 1
25
+ 15.01 14.76 0.8657 5.789 3.245 1.791 5.001 1
26
+ 16.19 15.16 0.8849 5.833 3.421 0.903 5.307 1
27
+ 13.02 13.76 0.8641 5.395 3.026 3.373 4.825 1
28
+ 12.74 13.67 0.8564 5.395 2.956 2.504 4.869 1
29
+ 14.11 14.18 0.882 5.541 3.221 2.754 5.038 1
30
+ 13.45 14.02 0.8604 5.516 3.065 3.531 5.097 1
31
+ 13.16 13.82 0.8662 5.454 2.975 0.8551 5.056 1
32
+ 15.49 14.94 0.8724 5.757 3.371 3.412 5.228 1
33
+ 14.09 14.41 0.8529 5.717 3.186 3.92 5.299 1
34
+ 13.94 14.17 0.8728 5.585 3.15 2.124 5.012 1
35
+ 15.05 14.68 0.8779 5.712 3.328 2.129 5.36 1
36
+ 16.12 15 0.9 5.709 3.485 2.27 5.443 1
37
+ 16.2 15.27 0.8734 5.826 3.464 2.823 5.527 1
38
+ 17.08 15.38 0.9079 5.832 3.683 2.956 5.484 1
39
+ 14.8 14.52 0.8823 5.656 3.288 3.112 5.309 1
40
+ 14.28 14.17 0.8944 5.397 3.298 6.685 5.001 1
41
+ 13.54 13.85 0.8871 5.348 3.156 2.587 5.178 1
42
+ 13.5 13.85 0.8852 5.351 3.158 2.249 5.176 1
43
+ 13.16 13.55 0.9009 5.138 3.201 2.461 4.783 1
44
+ 15.5 14.86 0.882 5.877 3.396 4.711 5.528 1
45
+ 15.11 14.54 0.8986 5.579 3.462 3.128 5.18 1
46
+ 13.8 14.04 0.8794 5.376 3.155 1.56 4.961 1
47
+ 15.36 14.76 0.8861 5.701 3.393 1.367 5.132 1
48
+ 14.99 14.56 0.8883 5.57 3.377 2.958 5.175 1
49
+ 14.79 14.52 0.8819 5.545 3.291 2.704 5.111 1
50
+ 14.86 14.67 0.8676 5.678 3.258 2.129 5.351 1
51
+ 14.43 14.4 0.8751 5.585 3.272 3.975 5.144 1
52
+ 15.78 14.91 0.8923 5.674 3.434 5.593 5.136 1
53
+ 14.49 14.61 0.8538 5.715 3.113 4.116 5.396 1
54
+ 14.33 14.28 0.8831 5.504 3.199 3.328 5.224 1
55
+ 14.52 14.6 0.8557 5.741 3.113 1.481 5.487 1
56
+ 15.03 14.77 0.8658 5.702 3.212 1.933 5.439 1
57
+ 14.46 14.35 0.8818 5.388 3.377 2.802 5.044 1
58
+ 14.92 14.43 0.9006 5.384 3.412 1.142 5.088 1
59
+ 15.38 14.77 0.8857 5.662 3.419 1.999 5.222 1
60
+ 12.11 13.47 0.8392 5.159 3.032 1.502 4.519 1
61
+ 11.42 12.86 0.8683 5.008 2.85 2.7 4.607 1
62
+ 11.23 12.63 0.884 4.902 2.879 2.269 4.703 1
63
+ 12.36 13.19 0.8923 5.076 3.042 3.22 4.605 1
64
+ 13.22 13.84 0.868 5.395 3.07 4.157 5.088 1
65
+ 12.78 13.57 0.8716 5.262 3.026 1.176 4.782 1
66
+ 12.88 13.5 0.8879 5.139 3.119 2.352 4.607 1
67
+ 14.34 14.37 0.8726 5.63 3.19 1.313 5.15 1
68
+ 14.01 14.29 0.8625 5.609 3.158 2.217 5.132 1
69
+ 14.37 14.39 0.8726 5.569 3.153 1.464 5.3 1
70
+ 12.73 13.75 0.8458 5.412 2.882 3.533 5.067 1
71
+ 17.63 15.98 0.8673 6.191 3.561 4.076 6.06 2
72
+ 16.84 15.67 0.8623 5.998 3.484 4.675 5.877 2
73
+ 17.26 15.73 0.8763 5.978 3.594 4.539 5.791 2
74
+ 19.11 16.26 0.9081 6.154 3.93 2.936 6.079 2
75
+ 16.82 15.51 0.8786 6.017 3.486 4.004 5.841 2
76
+ 16.77 15.62 0.8638 5.927 3.438 4.92 5.795 2
77
+ 17.32 15.91 0.8599 6.064 3.403 3.824 5.922 2
78
+ 20.71 17.23 0.8763 6.579 3.814 4.451 6.451 2
79
+ 18.94 16.49 0.875 6.445 3.639 5.064 6.362 2
80
+ 17.12 15.55 0.8892 5.85 3.566 2.858 5.746 2
81
+ 16.53 15.34 0.8823 5.875 3.467 5.532 5.88 2
82
+ 18.72 16.19 0.8977 6.006 3.857 5.324 5.879 2
83
+ 20.2 16.89 0.8894 6.285 3.864 5.173 6.187 2
84
+ 19.57 16.74 0.8779 6.384 3.772 1.472 6.273 2
85
+ 19.51 16.71 0.878 6.366 3.801 2.962 6.185 2
86
+ 18.27 16.09 0.887 6.173 3.651 2.443 6.197 2
87
+ 18.88 16.26 0.8969 6.084 3.764 1.649 6.109 2
88
+ 18.98 16.66 0.859 6.549 3.67 3.691 6.498 2
89
+ 21.18 17.21 0.8989 6.573 4.033 5.78 6.231 2
90
+ 20.88 17.05 0.9031 6.45 4.032 5.016 6.321 2
91
+ 20.1 16.99 0.8746 6.581 3.785 1.955 6.449 2
92
+ 18.76 16.2 0.8984 6.172 3.796 3.12 6.053 2
93
+ 18.81 16.29 0.8906 6.272 3.693 3.237 6.053 2
94
+ 18.59 16.05 0.9066 6.037 3.86 6.001 5.877 2
95
+ 18.36 16.52 0.8452 6.666 3.485 4.933 6.448 2
96
+ 16.87 15.65 0.8648 6.139 3.463 3.696 5.967 2
97
+ 19.31 16.59 0.8815 6.341 3.81 3.477 6.238 2
98
+ 18.98 16.57 0.8687 6.449 3.552 2.144 6.453 2
99
+ 18.17 16.26 0.8637 6.271 3.512 2.853 6.273 2
100
+ 18.72 16.34 0.881 6.219 3.684 2.188 6.097 2
101
+ 16.41 15.25 0.8866 5.718 3.525 4.217 5.618 2
102
+ 17.99 15.86 0.8992 5.89 3.694 2.068 5.837 2
103
+ 19.46 16.5 0.8985 6.113 3.892 4.308 6.009 2
104
+ 19.18 16.63 0.8717 6.369 3.681 3.357 6.229 2
105
+ 18.95 16.42 0.8829 6.248 3.755 3.368 6.148 2
106
+ 18.83 16.29 0.8917 6.037 3.786 2.553 5.879 2
107
+ 18.85 16.17 0.9056 6.152 3.806 2.843 6.2 2
108
+ 17.63 15.86 0.88 6.033 3.573 3.747 5.929 2
109
+ 19.94 16.92 0.8752 6.675 3.763 3.252 6.55 2
110
+ 18.55 16.22 0.8865 6.153 3.674 1.738 5.894 2
111
+ 18.45 16.12 0.8921 6.107 3.769 2.235 5.794 2
112
+ 19.38 16.72 0.8716 6.303 3.791 3.678 5.965 2
113
+ 19.13 16.31 0.9035 6.183 3.902 2.109 5.924 2
114
+ 19.14 16.61 0.8722 6.259 3.737 6.682 6.053 2
115
+ 20.97 17.25 0.8859 6.563 3.991 4.677 6.316 2
116
+ 19.06 16.45 0.8854 6.416 3.719 2.248 6.163 2
117
+ 18.96 16.2 0.9077 6.051 3.897 4.334 5.75 2
118
+ 19.15 16.45 0.889 6.245 3.815 3.084 6.185 2
119
+ 18.89 16.23 0.9008 6.227 3.769 3.639 5.966 2
120
+ 20.03 16.9 0.8811 6.493 3.857 3.063 6.32 2
121
+ 20.24 16.91 0.8897 6.315 3.962 5.901 6.188 2
122
+ 18.14 16.12 0.8772 6.059 3.563 3.619 6.011 2
123
+ 16.17 15.38 0.8588 5.762 3.387 4.286 5.703 2
124
+ 18.43 15.97 0.9077 5.98 3.771 2.984 5.905 2
125
+ 15.99 14.89 0.9064 5.363 3.582 3.336 5.144 2
126
+ 18.75 16.18 0.8999 6.111 3.869 4.188 5.992 2
127
+ 18.65 16.41 0.8698 6.285 3.594 4.391 6.102 2
128
+ 17.98 15.85 0.8993 5.979 3.687 2.257 5.919 2
129
+ 20.16 17.03 0.8735 6.513 3.773 1.91 6.185 2
130
+ 17.55 15.66 0.8991 5.791 3.69 5.366 5.661 2
131
+ 18.3 15.89 0.9108 5.979 3.755 2.837 5.962 2
132
+ 18.94 16.32 0.8942 6.144 3.825 2.908 5.949 2
133
+ 15.38 14.9 0.8706 5.884 3.268 4.462 5.795 2
134
+ 16.16 15.33 0.8644 5.845 3.395 4.266 5.795 2
135
+ 15.56 14.89 0.8823 5.776 3.408 4.972 5.847 2
136
+ 15.38 14.66 0.899 5.477 3.465 3.6 5.439 2
137
+ 17.36 15.76 0.8785 6.145 3.574 3.526 5.971 2
138
+ 15.57 15.15 0.8527 5.92 3.231 2.64 5.879 2
139
+ 15.6 15.11 0.858 5.832 3.286 2.725 5.752 2
140
+ 16.23 15.18 0.885 5.872 3.472 3.769 5.922 2
141
+ 13.07 13.92 0.848 5.472 2.994 5.304 5.395 3
142
+ 13.32 13.94 0.8613 5.541 3.073 7.035 5.44 3
143
+ 13.34 13.95 0.862 5.389 3.074 5.995 5.307 3
144
+ 12.22 13.32 0.8652 5.224 2.967 5.469 5.221 3
145
+ 11.82 13.4 0.8274 5.314 2.777 4.471 5.178 3
146
+ 11.21 13.13 0.8167 5.279 2.687 6.169 5.275 3
147
+ 11.43 13.13 0.8335 5.176 2.719 2.221 5.132 3
148
+ 12.49 13.46 0.8658 5.267 2.967 4.421 5.002 3
149
+ 12.7 13.71 0.8491 5.386 2.911 3.26 5.316 3
150
+ 10.79 12.93 0.8107 5.317 2.648 5.462 5.194 3
151
+ 11.83 13.23 0.8496 5.263 2.84 5.195 5.307 3
152
+ 12.01 13.52 0.8249 5.405 2.776 6.992 5.27 3
153
+ 12.26 13.6 0.8333 5.408 2.833 4.756 5.36 3
154
+ 11.18 13.04 0.8266 5.22 2.693 3.332 5.001 3
155
+ 11.36 13.05 0.8382 5.175 2.755 4.048 5.263 3
156
+ 11.19 13.05 0.8253 5.25 2.675 5.813 5.219 3
157
+ 11.34 12.87 0.8596 5.053 2.849 3.347 5.003 3
158
+ 12.13 13.73 0.8081 5.394 2.745 4.825 5.22 3
159
+ 11.75 13.52 0.8082 5.444 2.678 4.378 5.31 3
160
+ 11.49 13.22 0.8263 5.304 2.695 5.388 5.31 3
161
+ 12.54 13.67 0.8425 5.451 2.879 3.082 5.491 3
162
+ 12.02 13.33 0.8503 5.35 2.81 4.271 5.308 3
163
+ 12.05 13.41 0.8416 5.267 2.847 4.988 5.046 3
164
+ 12.55 13.57 0.8558 5.333 2.968 4.419 5.176 3
165
+ 11.14 12.79 0.8558 5.011 2.794 6.388 5.049 3
166
+ 12.1 13.15 0.8793 5.105 2.941 2.201 5.056 3
167
+ 12.44 13.59 0.8462 5.319 2.897 4.924 5.27 3
168
+ 12.15 13.45 0.8443 5.417 2.837 3.638 5.338 3
169
+ 11.35 13.12 0.8291 5.176 2.668 4.337 5.132 3
170
+ 11.24 13 0.8359 5.09 2.715 3.521 5.088 3
171
+ 11.02 13 0.8189 5.325 2.701 6.735 5.163 3
172
+ 11.55 13.1 0.8455 5.167 2.845 6.715 4.956 3
173
+ 11.27 12.97 0.8419 5.088 2.763 4.309 5 3
174
+ 11.4 13.08 0.8375 5.136 2.763 5.588 5.089 3
175
+ 10.83 12.96 0.8099 5.278 2.641 5.182 5.185 3
176
+ 10.8 12.57 0.859 4.981 2.821 4.773 5.063 3
177
+ 11.26 13.01 0.8355 5.186 2.71 5.335 5.092 3
178
+ 10.74 12.73 0.8329 5.145 2.642 4.702 4.963 3
179
+ 11.48 13.05 0.8473 5.18 2.758 5.876 5.002 3
180
+ 12.21 13.47 0.8453 5.357 2.893 1.661 5.178 3
181
+ 11.41 12.95 0.856 5.09 2.775 4.957 4.825 3
182
+ 12.46 13.41 0.8706 5.236 3.017 4.987 5.147 3
183
+ 12.19 13.36 0.8579 5.24 2.909 4.857 5.158 3
184
+ 11.65 13.07 0.8575 5.108 2.85 5.209 5.135 3
185
+ 12.89 13.77 0.8541 5.495 3.026 6.185 5.316 3
186
+ 11.56 13.31 0.8198 5.363 2.683 4.062 5.182 3
187
+ 11.81 13.45 0.8198 5.413 2.716 4.898 5.352 3
188
+ 10.91 12.8 0.8372 5.088 2.675 4.179 4.956 3
189
+ 11.23 12.82 0.8594 5.089 2.821 7.524 4.957 3
190
+ 10.59 12.41 0.8648 4.899 2.787 4.975 4.794 3
191
+ 10.93 12.8 0.839 5.046 2.717 5.398 5.045 3
192
+ 11.27 12.86 0.8563 5.091 2.804 3.985 5.001 3
193
+ 11.87 13.02 0.8795 5.132 2.953 3.597 5.132 3
194
+ 10.82 12.83 0.8256 5.18 2.63 4.853 5.089 3
195
+ 12.11 13.27 0.8639 5.236 2.975 4.132 5.012 3
196
+ 12.8 13.47 0.886 5.16 3.126 4.873 4.914 3
197
+ 12.79 13.53 0.8786 5.224 3.054 5.483 4.958 3
198
+ 13.37 13.78 0.8849 5.32 3.128 4.67 5.091 3
199
+ 12.62 13.67 0.8481 5.41 2.911 3.306 5.231 3
200
+ 12.76 13.38 0.8964 5.073 3.155 2.828 4.83 3
201
+ 12.38 13.44 0.8609 5.219 2.989 5.472 5.045 3
202
+ 12.67 13.32 0.8977 4.984 3.135 2.3 4.745 3
203
+ 11.18 12.72 0.868 5.009 2.81 4.051 4.828 3
204
+ 12.7 13.41 0.8874 5.183 3.091 8.456 5 3
205
+ 12.37 13.47 0.8567 5.204 2.96 3.919 5.001 3
206
+ 12.19 13.2 0.8783 5.137 2.981 3.631 4.87 3
207
+ 11.23 12.88 0.8511 5.14 2.795 4.325 5.003 3
208
+ 13.2 13.66 0.8883 5.236 3.232 8.315 5.056 3
209
+ 11.84 13.21 0.8521 5.175 2.836 3.598 5.044 3
210
+ 12.3 13.34 0.8684 5.243 2.974 5.637 5.063 3