victory 0.4.1 → 0.5.0
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 +4 -4
- data/USAGE.md +29 -0
- data/lib/algorithms/simulated_annealing.rb +43 -0
- data/lib/victory.rb +1 -0
- data/lib/victory/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f873e67c8889c379447f6b51603f66162098507e7b9c7627bbe042c39a30d2c7
|
4
|
+
data.tar.gz: f4fcfeb27cbd400a202be5c49c20434694c936bde1f2f8077541f7abb5b6f2c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 743beca5ef5ee4fd41095016bdd1806517c18279443e7e35f9dc9c95f31a910e1d4b1715d0a5ec2c58647309846efe5f7566b9192595ef831dd7d7398c9515d1
|
7
|
+
data.tar.gz: 4bc829f6df6fa44b20f9c733d45ca810a74c1bd8af0026ce265ab0754fd791be0b8f2928473ed701fb275c4214e39694258ad3c382c34874824252f0fc30ef0a
|
data/USAGE.md
CHANGED
@@ -551,6 +551,7 @@ Thread-safe variables:
|
|
551
551
|
|
552
552
|
* [Greedy](#greedy)
|
553
553
|
* [Genetic Algorithm](#genetic)
|
554
|
+
* [Simulated Annealing](#simulated-annealing)
|
554
555
|
|
555
556
|
<a name="greedy" />
|
556
557
|
|
@@ -590,6 +591,34 @@ genetic_alg.run(100)
|
|
590
591
|
genetic_alg.best_solution.score
|
591
592
|
```
|
592
593
|
|
594
|
+
<a name="simulated-annealing" />
|
595
|
+
|
596
|
+
## Simulated Annealing
|
597
|
+
|
598
|
+
```ruby
|
599
|
+
class TestSolution
|
600
|
+
include Algorithms::SimulatedAnnealing::Solution
|
601
|
+
|
602
|
+
def score
|
603
|
+
x1, x2 = *@data
|
604
|
+
0.2 + x1 * x1 + x2 * x2 - 0.1 * Math.cos(6 * Math::PI * x1) - 0.1 * Math.cos(6 * Math::PI * x2)
|
605
|
+
end
|
606
|
+
|
607
|
+
def next_solution
|
608
|
+
x1, x2 = *@data
|
609
|
+
new_x1 = (x1 + rand * 2 - 1) / 2
|
610
|
+
new_x2 = (x2 + rand * 2 - 1) / 2
|
611
|
+
new_data = T[new_x1, new_x2]
|
612
|
+
TestSolution.new(new_data)
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
616
|
+
solution = TestSolution.new(T[-1, -1])
|
617
|
+
sim_annealing = Algorithms::SimulatedAnnealing.init(solution)
|
618
|
+
sim_annealing.run(1000)
|
619
|
+
sim_annealing.best_solution
|
620
|
+
```
|
621
|
+
|
593
622
|
# Other useful links
|
594
623
|
|
595
624
|
* https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Algorithms::SimulatedAnnealing
|
2
|
+
module Solution
|
3
|
+
abstract_method :score, :next_solution
|
4
|
+
attr_reader :data
|
5
|
+
|
6
|
+
def initialize(data)
|
7
|
+
@data = data
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.init(solution)
|
12
|
+
Engine.new(solution)
|
13
|
+
end
|
14
|
+
|
15
|
+
class Engine
|
16
|
+
def initialize(solution)
|
17
|
+
@initial_solution = solution
|
18
|
+
@solutions_history = [@initial_solution]
|
19
|
+
end
|
20
|
+
|
21
|
+
def run(iterations)
|
22
|
+
iterations.times do |i|
|
23
|
+
temperature = iterations.to_f / i.to_f
|
24
|
+
current_solution = @solutions_history[-1]
|
25
|
+
next_solution = current_solution.next_solution
|
26
|
+
if acceptance_probability(current_solution.score, next_solution.score, temperature) > rand
|
27
|
+
@solutions_history << next_solution
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def best_solution; @solutions_history[-1] end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def acceptance_probability(current_score, next_score, temperature)
|
37
|
+
if next_score > current_score
|
38
|
+
return 1.0
|
39
|
+
end
|
40
|
+
Math.exp((next_score - current_score) / temperature)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/victory.rb
CHANGED
@@ -14,6 +14,7 @@ require 'algorithms/genetic_algorithm/solutions/bitset'
|
|
14
14
|
require 'algorithms/genetic_algorithm/solutions/array'
|
15
15
|
require 'algorithms/genetic_algorithm/solutions/permutation'
|
16
16
|
require 'algorithms/genetic_algorithm/solutions/combination'
|
17
|
+
require 'algorithms/simulated_annealing'
|
17
18
|
require 'containers/prefix_tree'
|
18
19
|
require 'containers/heap'
|
19
20
|
require 'containers/stack'
|
data/lib/victory/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: victory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arnold Szederjesi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -177,6 +177,7 @@ files:
|
|
177
177
|
- lib/algorithms/genetic_algorithm/solutions/permutation.rb
|
178
178
|
- lib/algorithms/greedy.rb
|
179
179
|
- lib/algorithms/search.rb
|
180
|
+
- lib/algorithms/simulated_annealing.rb
|
180
181
|
- lib/algorithms/sort.rb
|
181
182
|
- lib/algorithms/string.rb
|
182
183
|
- lib/containers/bitset.rb
|