silicium 0.0.2 → 0.0.21

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +3 -3
  3. data/.gitignore +13 -13
  4. data/.rakeTasks +8 -0
  5. data/.travis.yml +28 -25
  6. data/CODE_OF_CONDUCT.md +74 -74
  7. data/Gemfile +8 -8
  8. data/LICENSE.txt +21 -21
  9. data/Makefile +269 -269
  10. data/README.md +588 -46
  11. data/Rakefile +16 -16
  12. data/bin/console +14 -14
  13. data/bin/setup +8 -8
  14. data/docs/Object.html +117 -117
  15. data/docs/README_md.html +142 -142
  16. data/docs/Silicium/Combinatorics.html +270 -270
  17. data/docs/Silicium/Dice/Polyhedron.html +315 -315
  18. data/docs/Silicium/Dice/PolyhedronSet.html +321 -321
  19. data/docs/Silicium/Dice.html +99 -99
  20. data/docs/Silicium/Error.html +106 -106
  21. data/docs/Silicium/Geometry/Line2dCanon.html +243 -243
  22. data/docs/Silicium/Geometry/VariablesOrderException.html +106 -106
  23. data/docs/Silicium/Geometry.html +940 -940
  24. data/docs/Silicium/GraphVisualizer.html +226 -0
  25. data/docs/Silicium/Graphs/GraphError.html +106 -106
  26. data/docs/Silicium/Graphs/OrientedGraph.html +901 -775
  27. data/docs/Silicium/Graphs/UnorientedGraph.html +237 -284
  28. data/docs/Silicium/Graphs.html +374 -164
  29. data/docs/Silicium/IntegralDoesntExistError.html +106 -106
  30. data/docs/Silicium/NumericalIntegration.html +521 -521
  31. data/docs/Silicium/Optimization.html +629 -639
  32. data/docs/Silicium/Plotter/Image.html +297 -297
  33. data/docs/Silicium/Plotter.html +186 -186
  34. data/docs/Silicium.html +101 -101
  35. data/docs/created.rid +9 -9
  36. data/docs/css/fonts.css +167 -167
  37. data/docs/css/rdoc.css +619 -619
  38. data/docs/index.html +134 -132
  39. data/docs/js/darkfish.js +84 -84
  40. data/docs/js/navigation.js +105 -105
  41. data/docs/js/search.js +110 -110
  42. data/docs/js/search_index.js +1 -1
  43. data/docs/js/search_index.js.gz +0 -0
  44. data/docs/js/searcher.js +229 -229
  45. data/docs/table_of_contents.html +697 -608
  46. data/lib/algebra.rb +452 -0
  47. data/lib/algebra_diff.rb +258 -0
  48. data/lib/geometry/figure.rb +62 -0
  49. data/lib/geometry.rb +290 -236
  50. data/lib/geometry3d.rb +270 -0
  51. data/lib/graph/dfs.rb +42 -0
  52. data/lib/graph/kruskal.rb +36 -0
  53. data/lib/graph/scc.rb +97 -0
  54. data/lib/graph.rb +350 -164
  55. data/lib/graph_visualizer.rb +287 -0
  56. data/lib/ml_algorithms.rb +181 -0
  57. data/lib/numerical_integration.rb +184 -147
  58. data/lib/optimization.rb +209 -144
  59. data/lib/plotter.rb +256 -96
  60. data/lib/polynomial_division.rb +132 -0
  61. data/lib/polynomial_interpolation.rb +94 -0
  62. data/lib/regression.rb +120 -0
  63. data/lib/silicium/adding.rb +37 -0
  64. data/lib/silicium/conversions.rb +23 -0
  65. data/lib/silicium/multi.rb +82 -0
  66. data/lib/silicium/sparse.rb +76 -0
  67. data/lib/silicium/sugar.rb +37 -0
  68. data/lib/silicium/trans.rb +26 -0
  69. data/lib/silicium/version.rb +3 -3
  70. data/lib/silicium.rb +5 -5
  71. data/lib/theory_of_probability.rb +240 -226
  72. data/lib/topological_sort.rb +50 -0
  73. data/oriented_graph.png +0 -0
  74. data/plot.png +0 -0
  75. data/silicium.gemspec +38 -39
  76. metadata +38 -16
@@ -1,639 +1,629 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>module Silicium::Optimization - RDoc Documentation</title>
8
-
9
- <script type="text/javascript">
10
- var rdoc_rel_prefix = "../";
11
- var index_rel_prefix = "../";
12
- </script>
13
-
14
- <script src="../js/navigation.js" defer></script>
15
- <script src="../js/search.js" defer></script>
16
- <script src="../js/search_index.js" defer></script>
17
- <script src="../js/searcher.js" defer></script>
18
- <script src="../js/darkfish.js" defer></script>
19
-
20
- <link href="../css/fonts.css" rel="stylesheet">
21
- <link href="../css/rdoc.css" rel="stylesheet">
22
-
23
-
24
-
25
-
26
- <body id="top" role="document" class="module">
27
- <nav role="navigation">
28
- <div id="project-navigation">
29
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
30
- <h2>
31
- <a href="../index.html" rel="home">Home</a>
32
- </h2>
33
-
34
- <div id="table-of-contents-navigation">
35
- <a href="../table_of_contents.html#pages">Pages</a>
36
- <a href="../table_of_contents.html#classes">Classes</a>
37
- <a href="../table_of_contents.html#methods">Methods</a>
38
- </div>
39
- </div>
40
-
41
- <div id="search-section" role="search" class="project-section initially-hidden">
42
- <form action="#" method="get" accept-charset="utf-8">
43
- <div id="search-field-wrapper">
44
- <input id="search-field" role="combobox" aria-label="Search"
45
- aria-autocomplete="list" aria-controls="search-results"
46
- type="text" name="search" placeholder="Search" spellcheck="false"
47
- title="Type to search, Up and Down to navigate, Enter to load">
48
- </div>
49
-
50
- <ul id="search-results" aria-label="Search Results"
51
- aria-busy="false" aria-expanded="false"
52
- aria-atomic="false" class="initially-hidden"></ul>
53
- </form>
54
- </div>
55
-
56
- </div>
57
-
58
-
59
-
60
- <div id="class-metadata">
61
-
62
-
63
-
64
-
65
- <!-- Method Quickref -->
66
- <div id="method-list-section" class="nav-section">
67
- <h3>Methods</h3>
68
-
69
- <ul class="link-list" role="directory">
70
-
71
- <li ><a href="#method-i-accuracy">#accuracy</a>
72
-
73
- <li ><a href="#method-i-bogosort">#bogosort</a>
74
-
75
- <li ><a href="#method-i-bogosort-21">#bogosort!</a>
76
-
77
- <li ><a href="#method-i-half_division">#half_division</a>
78
-
79
- <li ><a href="#method-i-half_division_step">#half_division_step</a>
80
-
81
- <li ><a href="#method-i-hook_jeeves">#hook_jeeves</a>
82
-
83
- <li ><a href="#method-i-hook_jeeves_step">#hook_jeeves_step</a>
84
-
85
- <li ><a href="#method-i-integrating_Monte_Carlo_base">#integrating_Monte_Carlo_base</a>
86
-
87
- <li ><a href="#method-i-middle">#middle</a>
88
-
89
- <li ><a href="#method-i-re_lu">#re_lu</a>
90
-
91
- <li ><a href="#method-i-sigmoid">#sigmoid</a>
92
-
93
- <li ><a href="#method-i-sorted-3F">#sorted?</a>
94
-
95
- <li ><a href="#method-i-switch_step">#switch_step</a>
96
-
97
- </ul>
98
- </div>
99
-
100
- </div>
101
- </nav>
102
-
103
- <main role="main" aria-labelledby="module-Silicium::Optimization">
104
- <h1 id="module-Silicium::Optimization" class="module">
105
- module Silicium::Optimization
106
- </h1>
107
-
108
- <section class="description">
109
-
110
- </section>
111
-
112
-
113
- <section id="5Buntitled-5D" class="documentation-section">
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
- <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
124
- <header>
125
- <h3>Public Instance Methods</h3>
126
- </header>
127
-
128
-
129
- <div id="method-i-accuracy" class="method-detail ">
130
-
131
- <div class="method-heading">
132
- <span class="method-name">accuracy</span><span
133
- class="method-args">(step)</span>
134
-
135
- <span class="method-click-advice">click to toggle source</span>
136
-
137
- </div>
138
-
139
-
140
- <div class="method-description">
141
-
142
- <p>calculate current accuracy in Hook - Jeeves method</p>
143
-
144
-
145
-
146
-
147
- <div class="method-source-code" id="accuracy-source">
148
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 64</span>
149
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">accuracy</span>(<span class="ruby-identifier">step</span>)
150
- <span class="ruby-identifier">acc</span> = <span class="ruby-value">0</span>
151
- <span class="ruby-identifier">step</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-identifier">acc</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> }
152
- <span class="ruby-constant">Math</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">acc</span>)
153
- <span class="ruby-keyword">end</span></pre>
154
- </div>
155
-
156
- </div>
157
-
158
-
159
-
160
-
161
- </div>
162
-
163
-
164
- <div id="method-i-bogosort" class="method-detail ">
165
-
166
- <div class="method-heading">
167
- <span class="method-name">bogosort</span><span
168
- class="method-args">(a)</span>
169
-
170
- <span class="method-click-advice">click to toggle source</span>
171
-
172
- </div>
173
-
174
-
175
- <div class="method-description">
176
-
177
- <p>fastest(but it is not exactly) sort</p>
178
-
179
-
180
-
181
-
182
- <div class="method-source-code" id="bogosort-source">
183
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 52</span>
184
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bogosort</span>(<span class="ruby-identifier">a</span>)
185
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">a</span>.<span class="ruby-identifier">nil?</span>)
186
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Nil array in bogosort&quot;</span>
187
- <span class="ruby-keyword">end</span>
188
- <span class="ruby-identifier">crutch</span> = <span class="ruby-identifier">a</span>
189
- <span class="ruby-keyword">while</span> (<span class="ruby-operator">!</span><span class="ruby-identifier">sorted?</span>(<span class="ruby-identifier">crutch</span>))
190
- <span class="ruby-identifier">crutch</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">shuffle</span>
191
- <span class="ruby-keyword">end</span>
192
- <span class="ruby-identifier">crutch</span>
193
- <span class="ruby-keyword">end</span></pre>
194
- </div>
195
-
196
- </div>
197
-
198
-
199
-
200
-
201
- </div>
202
-
203
-
204
- <div id="method-i-bogosort-21" class="method-detail ">
205
-
206
- <div class="method-heading">
207
- <span class="method-name">bogosort!</span><span
208
- class="method-args">(a)</span>
209
-
210
- <span class="method-click-advice">click to toggle source</span>
211
-
212
- </div>
213
-
214
-
215
- <div class="method-description">
216
-
217
- <p>fastest(but it is not exactly) sort, modify sequance</p>
218
-
219
-
220
-
221
-
222
- <div class="method-source-code" id="bogosort-21-source">
223
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 41</span>
224
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bogosort!</span>(<span class="ruby-identifier">a</span>)
225
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">a</span>.<span class="ruby-identifier">nil?</span>)
226
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Nil array in bogosort&quot;</span>
227
- <span class="ruby-keyword">end</span>
228
- <span class="ruby-keyword">while</span> (<span class="ruby-operator">!</span><span class="ruby-identifier">sorted?</span>(<span class="ruby-identifier">a</span>))
229
- <span class="ruby-identifier">a</span>.<span class="ruby-identifier">shuffle!</span>
230
- <span class="ruby-keyword">end</span>
231
- <span class="ruby-identifier">a</span>
232
- <span class="ruby-keyword">end</span></pre>
233
- </div>
234
-
235
- </div>
236
-
237
-
238
-
239
-
240
- </div>
241
-
242
-
243
- <div id="method-i-half_division" class="method-detail ">
244
-
245
- <div class="method-heading">
246
- <span class="method-name">half_division</span><span
247
- class="method-args">(a, b, eps = 0.001, &amp;block)</span>
248
-
249
- <span class="method-click-advice">click to toggle source</span>
250
-
251
- </div>
252
-
253
-
254
- <div class="method-description">
255
-
256
- <p>find root in [a, b], if he exist, if number of iterations &gt; iters -&gt; error</p>
257
-
258
-
259
-
260
-
261
- <div class="method-source-code" id="half_division-source">
262
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 126</span>
263
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">half_division</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">eps</span> = <span class="ruby-value">0.001</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
264
- <span class="ruby-identifier">iters</span> = <span class="ruby-value">1000000</span>
265
- <span class="ruby-identifier">c</span> = <span class="ruby-identifier">middle</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>)
266
- <span class="ruby-keyword">while</span> ((<span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">abs</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">eps</span>)
267
- <span class="ruby-identifier">tmp</span> = <span class="ruby-identifier">half_division_step</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
268
- <span class="ruby-identifier">a</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">0</span>]
269
- <span class="ruby-identifier">b</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">1</span>]
270
- <span class="ruby-identifier">c</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">2</span>]
271
- <span class="ruby-identifier">iters</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
272
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">iters</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
273
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">RuntimeError</span>, <span class="ruby-string">&quot;Root not found! Check does he exist, or change eps or iters&quot;</span>
274
- <span class="ruby-keyword">end</span>
275
- <span class="ruby-keyword">end</span>
276
- <span class="ruby-identifier">c</span>
277
- <span class="ruby-keyword">end</span></pre>
278
- </div>
279
-
280
- </div>
281
-
282
-
283
-
284
-
285
- </div>
286
-
287
-
288
- <div id="method-i-half_division_step" class="method-detail ">
289
-
290
- <div class="method-heading">
291
- <span class="method-name">half_division_step</span><span
292
- class="method-args">(a, b, c, &amp;block)</span>
293
-
294
- <span class="method-click-advice">click to toggle source</span>
295
-
296
- </div>
297
-
298
-
299
- <div class="method-description">
300
-
301
- <p>do one half division step</p>
302
-
303
-
304
-
305
-
306
- <div class="method-source-code" id="half_division_step-source">
307
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 114</span>
308
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">half_division_step</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
309
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">a</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">c</span>) <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>)
310
- <span class="ruby-identifier">b</span> = <span class="ruby-identifier">c</span>
311
- <span class="ruby-identifier">c</span> = <span class="ruby-identifier">middle</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">c</span>)
312
- <span class="ruby-keyword">else</span>
313
- <span class="ruby-identifier">a</span> = <span class="ruby-identifier">c</span>
314
- <span class="ruby-identifier">c</span> = <span class="ruby-identifier">middle</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>)
315
- <span class="ruby-keyword">end</span>
316
- [<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>]
317
- <span class="ruby-keyword">end</span></pre>
318
- </div>
319
-
320
- </div>
321
-
322
-
323
-
324
-
325
- </div>
326
-
327
-
328
- <div id="method-i-hook_jeeves" class="method-detail ">
329
-
330
- <div class="method-heading">
331
- <span class="method-name">hook_jeeves</span><span
332
- class="method-args">(x, step, eps = 0.1, &amp;block)</span>
333
-
334
- <span class="method-click-advice">click to toggle source</span>
335
-
336
- </div>
337
-
338
-
339
- <div class="method-description">
340
-
341
- <p>Hook - Jeeves method for find minimum point (x - array of start variables, step - step of one iteration, eps - allowable error, alfa - slowdown of step, block - function which takes array x, WAENING function doesn&#39;t control correctness of input</p>
342
-
343
-
344
-
345
-
346
- <div class="method-source-code" id="hook_jeeves-source">
347
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 92</span>
348
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">hook_jeeves</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">step</span>, <span class="ruby-identifier">eps</span> = <span class="ruby-value">0.1</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
349
- <span class="ruby-identifier">prev_f</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
350
- <span class="ruby-identifier">acc</span> = <span class="ruby-identifier">accuracy</span>(<span class="ruby-identifier">step</span>)
351
- <span class="ruby-keyword">while</span> (<span class="ruby-identifier">acc</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">eps</span>)
352
- <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">x</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
353
- <span class="ruby-identifier">tmp</span> = <span class="ruby-identifier">hook_jeeves_step</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">i</span>, <span class="ruby-identifier">step</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
354
- <span class="ruby-identifier">cur_f</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">0</span>]
355
- <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">1</span>]
356
- <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">switch_step</span>(<span class="ruby-identifier">cur_f</span>, <span class="ruby-identifier">prev_f</span>, <span class="ruby-identifier">step</span>, <span class="ruby-identifier">i</span>)
357
- <span class="ruby-identifier">prev_f</span> = <span class="ruby-identifier">cur_f</span>
358
- <span class="ruby-keyword">end</span>
359
- <span class="ruby-identifier">acc</span> = <span class="ruby-identifier">accuracy</span>(<span class="ruby-identifier">step</span>)
360
- <span class="ruby-keyword">end</span>
361
- <span class="ruby-identifier">x</span>
362
- <span class="ruby-keyword">end</span></pre>
363
- </div>
364
-
365
- </div>
366
-
367
-
368
-
369
-
370
- </div>
371
-
372
-
373
- <div id="method-i-hook_jeeves_step" class="method-detail ">
374
-
375
- <div class="method-heading">
376
- <span class="method-name">hook_jeeves_step</span><span
377
- class="method-args">(x, i, step, &amp;block)</span>
378
-
379
- <span class="method-click-advice">click to toggle source</span>
380
-
381
- </div>
382
-
383
-
384
- <div class="method-description">
385
-
386
- <p>do one Hook - Jeeves step</p>
387
-
388
-
389
-
390
-
391
- <div class="method-source-code" id="hook_jeeves_step-source">
392
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 71</span>
393
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">hook_jeeves_step</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">i</span>, <span class="ruby-identifier">step</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
394
- <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>]
395
- <span class="ruby-identifier">tmp1</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
396
- <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">-</span> <span class="ruby-value">2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>]
397
- <span class="ruby-identifier">tmp2</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
398
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">tmp1</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">tmp2</span>)
399
- <span class="ruby-identifier">cur_f</span> = <span class="ruby-identifier">tmp2</span>
400
- <span class="ruby-keyword">else</span>
401
- <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">*</span> <span class="ruby-value">2</span>
402
- <span class="ruby-identifier">cur_f</span> = <span class="ruby-identifier">tmp1</span>
403
- <span class="ruby-keyword">end</span>
404
- [<span class="ruby-identifier">cur_f</span>, <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>]]
405
- <span class="ruby-keyword">end</span></pre>
406
- </div>
407
-
408
- </div>
409
-
410
-
411
-
412
-
413
- </div>
414
-
415
-
416
- <div id="method-i-integrating_Monte_Carlo_base" class="method-detail ">
417
-
418
- <div class="method-heading">
419
- <span class="method-name">integrating_Monte_Carlo_base</span><span
420
- class="method-args">(a, b, n = 100000, &amp;block)</span>
421
-
422
- <span class="method-click-advice">click to toggle source</span>
423
-
424
- </div>
425
-
426
-
427
- <div class="method-description">
428
-
429
- <p>integrating using method Monte Carlo (f - function, a, b - integrating limits, n - amount of random numbers)</p>
430
-
431
-
432
-
433
-
434
- <div class="method-source-code" id="integrating_Monte_Carlo_base-source">
435
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 19</span>
436
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">integrating_Monte_Carlo_base</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">n</span> = <span class="ruby-value">100000</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
437
- <span class="ruby-identifier">res</span> = <span class="ruby-value">0</span>
438
- <span class="ruby-identifier">range</span> = <span class="ruby-identifier">a</span><span class="ruby-operator">..</span><span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_f</span>
439
- <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">1</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">n</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
440
- <span class="ruby-identifier">x</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-identifier">range</span>)
441
- <span class="ruby-identifier">res</span> <span class="ruby-operator">+=</span> (<span class="ruby-identifier">b</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>) <span class="ruby-operator">*</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
442
- <span class="ruby-keyword">end</span>
443
- <span class="ruby-identifier">res</span>
444
- <span class="ruby-keyword">end</span></pre>
445
- </div>
446
-
447
- </div>
448
-
449
-
450
-
451
-
452
- </div>
453
-
454
-
455
- <div id="method-i-middle" class="method-detail ">
456
-
457
- <div class="method-heading">
458
- <span class="method-name">middle</span><span
459
- class="method-args">(a, b)</span>
460
-
461
- <span class="method-click-advice">click to toggle source</span>
462
-
463
- </div>
464
-
465
-
466
- <div class="method-description">
467
-
468
- <p>find centr of interval</p>
469
-
470
-
471
-
472
-
473
- <div class="method-source-code" id="middle-source">
474
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 109</span>
475
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">middle</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>)
476
- (<span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">b</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
477
- <span class="ruby-keyword">end</span></pre>
478
- </div>
479
-
480
- </div>
481
-
482
-
483
-
484
-
485
- </div>
486
-
487
-
488
- <div id="method-i-re_lu" class="method-detail ">
489
-
490
- <div class="method-heading">
491
- <span class="method-name">re_lu</span><span
492
- class="method-args">(x)</span>
493
-
494
- <span class="method-click-advice">click to toggle source</span>
495
-
496
- </div>
497
-
498
-
499
- <div class="method-description">
500
-
501
- <p>reflector function</p>
502
-
503
-
504
-
505
-
506
- <div class="method-source-code" id="re_lu-source">
507
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 9</span>
508
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">re_lu</span>(<span class="ruby-identifier">x</span>)
509
- <span class="ruby-identifier">x</span>.<span class="ruby-identifier">negative?</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">x</span>
510
- <span class="ruby-keyword">end</span></pre>
511
- </div>
512
-
513
- </div>
514
-
515
-
516
-
517
-
518
- </div>
519
-
520
-
521
- <div id="method-i-sigmoid" class="method-detail ">
522
-
523
- <div class="method-heading">
524
- <span class="method-name">sigmoid</span><span
525
- class="method-args">(x)</span>
526
-
527
- <span class="method-click-advice">click to toggle source</span>
528
-
529
- </div>
530
-
531
-
532
- <div class="method-description">
533
-
534
- <p>sigmoid function</p>
535
-
536
-
537
-
538
-
539
- <div class="method-source-code" id="sigmoid-source">
540
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 14</span>
541
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sigmoid</span>(<span class="ruby-identifier">x</span>)
542
- <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> (<span class="ruby-value">1</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">exp</span>(<span class="ruby-operator">-</span><span class="ruby-identifier">x</span>))
543
- <span class="ruby-keyword">end</span></pre>
544
- </div>
545
-
546
- </div>
547
-
548
-
549
-
550
-
551
- </div>
552
-
553
-
554
- <div id="method-i-sorted-3F" class="method-detail ">
555
-
556
- <div class="method-heading">
557
- <span class="method-name">sorted?</span><span
558
- class="method-args">(a)</span>
559
-
560
- <span class="method-click-advice">click to toggle source</span>
561
-
562
- </div>
563
-
564
-
565
- <div class="method-description">
566
-
567
- <p>return true if array is sorted</p>
568
-
569
-
570
-
571
-
572
- <div class="method-source-code" id="sorted-3F-source">
573
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 30</span>
574
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sorted?</span>(<span class="ruby-identifier">a</span>)
575
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">nil?</span>
576
- <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">a</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>
577
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">a</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">a</span>[<span class="ruby-identifier">i</span>])
578
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
579
- <span class="ruby-keyword">end</span>
580
- <span class="ruby-keyword">end</span>
581
- <span class="ruby-keyword">true</span>
582
- <span class="ruby-keyword">end</span></pre>
583
- </div>
584
-
585
- </div>
586
-
587
-
588
-
589
-
590
- </div>
591
-
592
-
593
- <div id="method-i-switch_step" class="method-detail ">
594
-
595
- <div class="method-heading">
596
- <span class="method-name">switch_step</span><span
597
- class="method-args">(cur_f, prev_f, step, i)</span>
598
-
599
- <span class="method-click-advice">click to toggle source</span>
600
-
601
- </div>
602
-
603
-
604
- <div class="method-description">
605
-
606
- <p>switch step if current func value &gt; previous func value</p>
607
-
608
-
609
-
610
-
611
- <div class="method-source-code" id="switch_step-source">
612
- <pre><span class="ruby-comment"># File lib/optimization.rb, line 86</span>
613
- <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">switch_step</span>(<span class="ruby-identifier">cur_f</span>, <span class="ruby-identifier">prev_f</span>, <span class="ruby-identifier">step</span>, <span class="ruby-identifier">i</span>)
614
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">cur_f</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">prev_f</span> <span class="ruby-comment">#you can switch 2.0 on something else</span>
615
- <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>]
616
- <span class="ruby-keyword">end</span></pre>
617
- </div>
618
-
619
- </div>
620
-
621
-
622
-
623
-
624
- </div>
625
-
626
-
627
- </section>
628
-
629
- </section>
630
-
631
- </main>
632
-
633
-
634
- <footer id="validator-badges" role="contentinfo">
635
- <p><a href="https://validator.w3.org/check/referer">Validate</a>
636
- <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.0.
637
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
638
- </footer>
639
-
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>module Silicium::Optimization - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "../";
11
+ var index_rel_prefix = "../";
12
+ </script>
13
+
14
+ <script src="../js/navigation.js" defer></script>
15
+ <script src="../js/search.js" defer></script>
16
+ <script src="../js/search_index.js" defer></script>
17
+ <script src="../js/searcher.js" defer></script>
18
+ <script src="../js/darkfish.js" defer></script>
19
+
20
+ <link href="../css/fonts.css" rel="stylesheet">
21
+ <link href="../css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+
25
+
26
+ <body id="top" role="document" class="module">
27
+ <nav role="navigation">
28
+ <div id="project-navigation">
29
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
30
+ <h2>
31
+ <a href="../index.html" rel="home">Home</a>
32
+ </h2>
33
+
34
+ <div id="table-of-contents-navigation">
35
+ <a href="../table_of_contents.html#pages">Pages</a>
36
+ <a href="../table_of_contents.html#classes">Classes</a>
37
+ <a href="../table_of_contents.html#methods">Methods</a>
38
+ </div>
39
+ </div>
40
+
41
+ <div id="search-section" role="search" class="project-section initially-hidden">
42
+ <form action="#" method="get" accept-charset="utf-8">
43
+ <div id="search-field-wrapper">
44
+ <input id="search-field" role="combobox" aria-label="Search"
45
+ aria-autocomplete="list" aria-controls="search-results"
46
+ type="text" name="search" placeholder="Search" spellcheck="false"
47
+ title="Type to search, Up and Down to navigate, Enter to load">
48
+ </div>
49
+
50
+ <ul id="search-results" aria-label="Search Results"
51
+ aria-busy="false" aria-expanded="false"
52
+ aria-atomic="false" class="initially-hidden"></ul>
53
+ </form>
54
+ </div>
55
+
56
+ </div>
57
+
58
+
59
+
60
+ <div id="class-metadata">
61
+
62
+
63
+
64
+
65
+ <!-- Method Quickref -->
66
+ <div id="method-list-section" class="nav-section">
67
+ <h3>Methods</h3>
68
+
69
+ <ul class="link-list" role="directory">
70
+
71
+ <li ><a href="#method-i-accuracy">#accuracy</a>
72
+
73
+ <li ><a href="#method-i-bogosort">#bogosort</a>
74
+
75
+ <li ><a href="#method-i-bogosort-21">#bogosort!</a>
76
+
77
+ <li ><a href="#method-i-half_division">#half_division</a>
78
+
79
+ <li ><a href="#method-i-half_division_step">#half_division_step</a>
80
+
81
+ <li ><a href="#method-i-hook_jeeves">#hook_jeeves</a>
82
+
83
+ <li ><a href="#method-i-hook_jeeves_step">#hook_jeeves_step</a>
84
+
85
+ <li ><a href="#method-i-integrating_Monte_Carlo_base">#integrating_Monte_Carlo_base</a>
86
+
87
+ <li ><a href="#method-i-middle">#middle</a>
88
+
89
+ <li ><a href="#method-i-re_lu">#re_lu</a>
90
+
91
+ <li ><a href="#method-i-sigmoid">#sigmoid</a>
92
+
93
+ <li ><a href="#method-i-sorted-3F">#sorted?</a>
94
+
95
+ <li ><a href="#method-i-switch_step">#switch_step</a>
96
+
97
+ </ul>
98
+ </div>
99
+
100
+ </div>
101
+ </nav>
102
+
103
+ <main role="main" aria-labelledby="module-Silicium::Optimization">
104
+ <h1 id="module-Silicium::Optimization" class="module">
105
+ module Silicium::Optimization
106
+ </h1>
107
+
108
+ <section class="description">
109
+
110
+ </section>
111
+
112
+
113
+ <section id="5Buntitled-5D" class="documentation-section">
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
124
+ <header>
125
+ <h3>Public Instance Methods</h3>
126
+ </header>
127
+
128
+
129
+ <div id="method-i-accuracy" class="method-detail ">
130
+
131
+ <div class="method-heading">
132
+ <span class="method-name">accuracy</span><span
133
+ class="method-args">(step)</span>
134
+
135
+ <span class="method-click-advice">click to toggle source</span>
136
+
137
+ </div>
138
+
139
+
140
+ <div class="method-description">
141
+
142
+ <p>calculate current accuracy in Hook - Jeeves method</p>
143
+
144
+
145
+
146
+
147
+ <div class="method-source-code" id="accuracy-source">
148
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 56</span>
149
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">accuracy</span>(<span class="ruby-identifier">step</span>)
150
+ <span class="ruby-identifier">acc</span> = <span class="ruby-value">0</span>
151
+ <span class="ruby-identifier">step</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-identifier">acc</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> }
152
+ <span class="ruby-constant">Math</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">acc</span>)
153
+ <span class="ruby-keyword">end</span></pre>
154
+ </div>
155
+
156
+ </div>
157
+
158
+
159
+
160
+
161
+ </div>
162
+
163
+
164
+ <div id="method-i-bogosort" class="method-detail ">
165
+
166
+ <div class="method-heading">
167
+ <span class="method-name">bogosort</span><span
168
+ class="method-args">(a)</span>
169
+
170
+ <span class="method-click-advice">click to toggle source</span>
171
+
172
+ </div>
173
+
174
+
175
+ <div class="method-description">
176
+
177
+ <p>fastest(but it is not exactly) sort</p>
178
+
179
+
180
+
181
+
182
+ <div class="method-source-code" id="bogosort-source">
183
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 48</span>
184
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bogosort</span>(<span class="ruby-identifier">a</span>)
185
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Nil array in bogosort&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">nil?</span>
186
+ <span class="ruby-identifier">crutch</span> = <span class="ruby-identifier">a</span>
187
+ (<span class="ruby-identifier">crutch</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">shuffle</span>) <span class="ruby-keyword">until</span> <span class="ruby-identifier">sorted?</span>(<span class="ruby-identifier">crutch</span>)
188
+ <span class="ruby-identifier">crutch</span>
189
+ <span class="ruby-keyword">end</span></pre>
190
+ </div>
191
+
192
+ </div>
193
+
194
+
195
+
196
+
197
+ </div>
198
+
199
+
200
+ <div id="method-i-bogosort-21" class="method-detail ">
201
+
202
+ <div class="method-heading">
203
+ <span class="method-name">bogosort!</span><span
204
+ class="method-args">(a)</span>
205
+
206
+ <span class="method-click-advice">click to toggle source</span>
207
+
208
+ </div>
209
+
210
+
211
+ <div class="method-description">
212
+
213
+ <p>fastest(but it is not exactly) sort, modify sequance</p>
214
+
215
+
216
+
217
+
218
+ <div class="method-source-code" id="bogosort-21-source">
219
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 41</span>
220
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bogosort!</span>(<span class="ruby-identifier">a</span>)
221
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Nil array in bogosort&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">nil?</span>
222
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">shuffle!</span> <span class="ruby-keyword">until</span> <span class="ruby-identifier">sorted?</span>(<span class="ruby-identifier">a</span>)
223
+ <span class="ruby-identifier">a</span>
224
+ <span class="ruby-keyword">end</span></pre>
225
+ </div>
226
+
227
+ </div>
228
+
229
+
230
+
231
+
232
+ </div>
233
+
234
+
235
+ <div id="method-i-half_division" class="method-detail ">
236
+
237
+ <div class="method-heading">
238
+ <span class="method-name">half_division</span><span
239
+ class="method-args">(a, b, eps = 0.001, &amp;block)</span>
240
+
241
+ <span class="method-click-advice">click to toggle source</span>
242
+
243
+ </div>
244
+
245
+
246
+ <div class="method-description">
247
+
248
+ <p>find root in [a, b], if he exist, if number of iterations &gt; iters -&gt; error</p>
249
+
250
+
251
+
252
+
253
+ <div class="method-source-code" id="half_division-source">
254
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 118</span>
255
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">half_division</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">eps</span> = <span class="ruby-value">0.001</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
256
+ <span class="ruby-identifier">iters</span> = <span class="ruby-value">1000000</span>
257
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">middle</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>)
258
+ <span class="ruby-keyword">while</span> (<span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">abs</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">eps</span>
259
+ <span class="ruby-identifier">tmp</span> = <span class="ruby-identifier">half_division_step</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
260
+ <span class="ruby-identifier">a</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">0</span>]
261
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">1</span>]
262
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">2</span>]
263
+ <span class="ruby-identifier">iters</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
264
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">RuntimeError</span>, <span class="ruby-string">&#39;Root not found! Check does he exist, or change eps or iters&#39;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">iters</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
265
+ <span class="ruby-keyword">end</span>
266
+ <span class="ruby-identifier">c</span>
267
+ <span class="ruby-keyword">end</span></pre>
268
+ </div>
269
+
270
+ </div>
271
+
272
+
273
+
274
+
275
+ </div>
276
+
277
+
278
+ <div id="method-i-half_division_step" class="method-detail ">
279
+
280
+ <div class="method-heading">
281
+ <span class="method-name">half_division_step</span><span
282
+ class="method-args">(a, b, c, &amp;block)</span>
283
+
284
+ <span class="method-click-advice">click to toggle source</span>
285
+
286
+ </div>
287
+
288
+
289
+ <div class="method-description">
290
+
291
+ <p>do one half division step</p>
292
+
293
+
294
+
295
+
296
+ <div class="method-source-code" id="half_division_step-source">
297
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 106</span>
298
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">half_division_step</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
299
+ <span class="ruby-keyword">if</span> (<span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">a</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">c</span>)).<span class="ruby-identifier">negative?</span>
300
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">c</span>
301
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">middle</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">c</span>)
302
+ <span class="ruby-keyword">else</span>
303
+ <span class="ruby-identifier">a</span> = <span class="ruby-identifier">c</span>
304
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">middle</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>)
305
+ <span class="ruby-keyword">end</span>
306
+ [<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">c</span>]
307
+ <span class="ruby-keyword">end</span></pre>
308
+ </div>
309
+
310
+ </div>
311
+
312
+
313
+
314
+
315
+ </div>
316
+
317
+
318
+ <div id="method-i-hook_jeeves" class="method-detail ">
319
+
320
+ <div class="method-heading">
321
+ <span class="method-name">hook_jeeves</span><span
322
+ class="method-args">(x, step, eps = 0.1, &amp;block)</span>
323
+
324
+ <span class="method-click-advice">click to toggle source</span>
325
+
326
+ </div>
327
+
328
+
329
+ <div class="method-description">
330
+
331
+ <p>Hook - Jeeves method for find minimum point (x - array of start variables, step - step of one iteration, eps - allowable error, alfa - slowdown of step, block - function which takes array x, WAENING function doesn&#39;t control correctness of input</p>
332
+
333
+
334
+
335
+
336
+ <div class="method-source-code" id="hook_jeeves-source">
337
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 84</span>
338
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">hook_jeeves</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">step</span>, <span class="ruby-identifier">eps</span> = <span class="ruby-value">0.1</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
339
+ <span class="ruby-identifier">prev_f</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
340
+ <span class="ruby-identifier">acc</span> = <span class="ruby-identifier">accuracy</span>(<span class="ruby-identifier">step</span>)
341
+ <span class="ruby-keyword">while</span> (<span class="ruby-identifier">acc</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">eps</span>)
342
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">x</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
343
+ <span class="ruby-identifier">tmp</span> = <span class="ruby-identifier">hook_jeeves_step</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">i</span>, <span class="ruby-identifier">step</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
344
+ <span class="ruby-identifier">cur_f</span> = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">0</span>]
345
+ <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">tmp</span>[<span class="ruby-value">1</span>]
346
+ <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">switch_step</span>(<span class="ruby-identifier">cur_f</span>, <span class="ruby-identifier">prev_f</span>, <span class="ruby-identifier">step</span>, <span class="ruby-identifier">i</span>)
347
+ <span class="ruby-identifier">prev_f</span> = <span class="ruby-identifier">cur_f</span>
348
+ <span class="ruby-keyword">end</span>
349
+ <span class="ruby-identifier">acc</span> = <span class="ruby-identifier">accuracy</span>(<span class="ruby-identifier">step</span>)
350
+ <span class="ruby-keyword">end</span>
351
+ <span class="ruby-identifier">x</span>
352
+ <span class="ruby-keyword">end</span></pre>
353
+ </div>
354
+
355
+ </div>
356
+
357
+
358
+
359
+
360
+ </div>
361
+
362
+
363
+ <div id="method-i-hook_jeeves_step" class="method-detail ">
364
+
365
+ <div class="method-heading">
366
+ <span class="method-name">hook_jeeves_step</span><span
367
+ class="method-args">(x, i, step, &amp;block)</span>
368
+
369
+ <span class="method-click-advice">click to toggle source</span>
370
+
371
+ </div>
372
+
373
+
374
+ <div class="method-description">
375
+
376
+ <p>do one Hook - Jeeves step</p>
377
+
378
+
379
+
380
+
381
+ <div class="method-source-code" id="hook_jeeves_step-source">
382
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 63</span>
383
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">hook_jeeves_step</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">i</span>, <span class="ruby-identifier">step</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
384
+ <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>]
385
+ <span class="ruby-identifier">tmp1</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
386
+ <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">-</span> <span class="ruby-value">2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>]
387
+ <span class="ruby-identifier">tmp2</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
388
+ <span class="ruby-keyword">if</span> (<span class="ruby-identifier">tmp1</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">tmp2</span>)
389
+ <span class="ruby-identifier">cur_f</span> = <span class="ruby-identifier">tmp2</span>
390
+ <span class="ruby-keyword">else</span>
391
+ <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">*</span> <span class="ruby-value">2</span>
392
+ <span class="ruby-identifier">cur_f</span> = <span class="ruby-identifier">tmp1</span>
393
+ <span class="ruby-keyword">end</span>
394
+ [<span class="ruby-identifier">cur_f</span>, <span class="ruby-identifier">x</span>[<span class="ruby-identifier">i</span>]]
395
+ <span class="ruby-keyword">end</span></pre>
396
+ </div>
397
+
398
+ </div>
399
+
400
+
401
+
402
+
403
+ </div>
404
+
405
+
406
+ <div id="method-i-integrating_Monte_Carlo_base" class="method-detail ">
407
+
408
+ <div class="method-heading">
409
+ <span class="method-name">integrating_Monte_Carlo_base</span><span
410
+ class="method-args">(a, b, n = 100000, &amp;block)</span>
411
+
412
+ <span class="method-click-advice">click to toggle source</span>
413
+
414
+ </div>
415
+
416
+
417
+ <div class="method-description">
418
+
419
+ <p>integrating using method Monte Carlo (f - function, a, b - integrating limits, n - amount of random numbers)</p>
420
+
421
+
422
+
423
+
424
+ <div class="method-source-code" id="integrating_Monte_Carlo_base-source">
425
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 19</span>
426
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">integrating_Monte_Carlo_base</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>, <span class="ruby-identifier">n</span> = <span class="ruby-value">100000</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
427
+ <span class="ruby-identifier">res</span> = <span class="ruby-value">0</span>
428
+ <span class="ruby-identifier">range</span> = <span class="ruby-identifier">a</span><span class="ruby-operator">..</span><span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_f</span>
429
+ (<span class="ruby-value">1</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">n</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span>
430
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-identifier">range</span>)
431
+ <span class="ruby-identifier">res</span> <span class="ruby-operator">+=</span> (<span class="ruby-identifier">b</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>) <span class="ruby-operator">*</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">x</span>)
432
+ <span class="ruby-keyword">end</span>
433
+ <span class="ruby-identifier">res</span>
434
+ <span class="ruby-keyword">end</span></pre>
435
+ </div>
436
+
437
+ </div>
438
+
439
+
440
+
441
+
442
+ </div>
443
+
444
+
445
+ <div id="method-i-middle" class="method-detail ">
446
+
447
+ <div class="method-heading">
448
+ <span class="method-name">middle</span><span
449
+ class="method-args">(a, b)</span>
450
+
451
+ <span class="method-click-advice">click to toggle source</span>
452
+
453
+ </div>
454
+
455
+
456
+ <div class="method-description">
457
+
458
+ <p>find centr of interval</p>
459
+
460
+
461
+
462
+
463
+ <div class="method-source-code" id="middle-source">
464
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 101</span>
465
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">middle</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span>)
466
+ (<span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">b</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
467
+ <span class="ruby-keyword">end</span></pre>
468
+ </div>
469
+
470
+ </div>
471
+
472
+
473
+
474
+
475
+ </div>
476
+
477
+
478
+ <div id="method-i-re_lu" class="method-detail ">
479
+
480
+ <div class="method-heading">
481
+ <span class="method-name">re_lu</span><span
482
+ class="method-args">(x)</span>
483
+
484
+ <span class="method-click-advice">click to toggle source</span>
485
+
486
+ </div>
487
+
488
+
489
+ <div class="method-description">
490
+
491
+ <p>reflector function</p>
492
+
493
+
494
+
495
+
496
+ <div class="method-source-code" id="re_lu-source">
497
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 9</span>
498
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">re_lu</span>(<span class="ruby-identifier">x</span>)
499
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">negative?</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">x</span>
500
+ <span class="ruby-keyword">end</span></pre>
501
+ </div>
502
+
503
+ </div>
504
+
505
+
506
+
507
+
508
+ </div>
509
+
510
+
511
+ <div id="method-i-sigmoid" class="method-detail ">
512
+
513
+ <div class="method-heading">
514
+ <span class="method-name">sigmoid</span><span
515
+ class="method-args">(x)</span>
516
+
517
+ <span class="method-click-advice">click to toggle source</span>
518
+
519
+ </div>
520
+
521
+
522
+ <div class="method-description">
523
+
524
+ <p>sigmoid function</p>
525
+
526
+
527
+
528
+
529
+ <div class="method-source-code" id="sigmoid-source">
530
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 14</span>
531
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sigmoid</span>(<span class="ruby-identifier">x</span>)
532
+ <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> (<span class="ruby-value">1</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">exp</span>(<span class="ruby-operator">-</span><span class="ruby-identifier">x</span>))
533
+ <span class="ruby-keyword">end</span></pre>
534
+ </div>
535
+
536
+ </div>
537
+
538
+
539
+
540
+
541
+ </div>
542
+
543
+
544
+ <div id="method-i-sorted-3F" class="method-detail ">
545
+
546
+ <div class="method-heading">
547
+ <span class="method-name">sorted?</span><span
548
+ class="method-args">(a)</span>
549
+
550
+ <span class="method-click-advice">click to toggle source</span>
551
+
552
+ </div>
553
+
554
+
555
+ <div class="method-description">
556
+
557
+ <p>return true if array is sorted</p>
558
+
559
+
560
+
561
+
562
+ <div class="method-source-code" id="sorted-3F-source">
563
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 30</span>
564
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sorted?</span>(<span class="ruby-identifier">a</span>)
565
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">nil?</span>
566
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">a</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>
567
+ <span class="ruby-keyword">if</span> (<span class="ruby-identifier">a</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">a</span>[<span class="ruby-identifier">i</span>])
568
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
569
+ <span class="ruby-keyword">end</span>
570
+ <span class="ruby-keyword">end</span>
571
+ <span class="ruby-keyword">true</span>
572
+ <span class="ruby-keyword">end</span></pre>
573
+ </div>
574
+
575
+ </div>
576
+
577
+
578
+
579
+
580
+ </div>
581
+
582
+
583
+ <div id="method-i-switch_step" class="method-detail ">
584
+
585
+ <div class="method-heading">
586
+ <span class="method-name">switch_step</span><span
587
+ class="method-args">(cur_f, prev_f, step, i)</span>
588
+
589
+ <span class="method-click-advice">click to toggle source</span>
590
+
591
+ </div>
592
+
593
+
594
+ <div class="method-description">
595
+
596
+ <p>switch step if current func value &gt; previous func value</p>
597
+
598
+
599
+
600
+
601
+ <div class="method-source-code" id="switch_step-source">
602
+ <pre><span class="ruby-comment"># File lib/optimization.rb, line 78</span>
603
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">switch_step</span>(<span class="ruby-identifier">cur_f</span>, <span class="ruby-identifier">prev_f</span>, <span class="ruby-identifier">step</span>, <span class="ruby-identifier">i</span>)
604
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">cur_f</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">prev_f</span> <span class="ruby-comment">#you can switch 2.0 on something else</span>
605
+ <span class="ruby-identifier">step</span>[<span class="ruby-identifier">i</span>]
606
+ <span class="ruby-keyword">end</span></pre>
607
+ </div>
608
+
609
+ </div>
610
+
611
+
612
+
613
+
614
+ </div>
615
+
616
+
617
+ </section>
618
+
619
+ </section>
620
+
621
+ </main>
622
+
623
+
624
+ <footer id="validator-badges" role="contentinfo">
625
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
626
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.0.
627
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
628
+ </footer>
629
+