pso 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: 4c638f93201545f2cc9b6df97e74bcd32a9e5c33abd478d79525a01a73a125fb
4
- data.tar.gz: 724062befc0037ce7548a0a379c8c8da1e10b78eb93924c6f8095660f45f36c9
3
+ metadata.gz: 494a9e31cc52065c8b22eea253e6721fe52ac0a991a655b952d7cb23ef25dbdd
4
+ data.tar.gz: 8ffebd21cb02c8238bb4b29910134092c86583def6ed7d0926dcd2c3dd9c7c03
5
5
  SHA512:
6
- metadata.gz: 80bd1ad7e0875e9fbd94cbea03e7327ab9b39995a9c1433d68d0e5dc07bd22ec2113ff5dea38369f196093015d3d1f3ee3d25cc90315d62dbb6623b8305d6cbe
7
- data.tar.gz: 9a9f14196e96c535201510ebcd933c05c20b8e01d3ed8ef9c3dd9eeeccb643522dc0fb45ca5dabfb9e1a5c075a848b0b797b405260a58d947f4c9c8127da01db
6
+ metadata.gz: f6c895b7958f867561203cd298e94c775dae38b0b4a665e281edd54f9eb73d645513049df7275fb704bbb2294328a3e4b02c72bba1c4e910dd8d5bcf457eb456
7
+ data.tar.gz: 29e57ddf40635f9763e95f67fb0607366120077b99946453dd081543d602612da84e079793a474bae5bb1fc30d910ce7f283412fdd55d51ee5bbe43fb7413358
@@ -1,12 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pso (0.1.0)
4
+ pso (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ coderay (1.1.2)
9
10
  diff-lcs (1.3)
11
+ method_source (0.9.0)
12
+ pry (0.11.3)
13
+ coderay (~> 1.1.0)
14
+ method_source (~> 0.9.0)
10
15
  rake (10.5.0)
11
16
  rspec (3.7.0)
12
17
  rspec-core (~> 3.7.0)
@@ -27,6 +32,7 @@ PLATFORMS
27
32
 
28
33
  DEPENDENCIES
29
34
  bundler (~> 1.16)
35
+ pry
30
36
  pso!
31
37
  rake (~> 10.0)
32
38
  rspec (~> 3.0)
@@ -1,10 +1,11 @@
1
1
  require 'thread'
2
2
  require 'pso/zero_vector'
3
3
  require 'pso/functions/rastrigin'
4
+ require 'pry'
4
5
 
5
6
  module Pso
6
7
  class Solver
7
- def initialize(din: 5, density: 5000, f: Pso::Rastrigin, center: ZeroVector[0,0,0,0,0], radius: 5.12, method: :min_by)
8
+ def initialize(din: 5, density: 50, f: Pso::Rastrigin, center: ZeroVector[0,0,0,0,0], radius: 5.12, method: :min_by)
8
9
  @f = f.new
9
10
  @din = din
10
11
  @center = center
@@ -19,6 +20,7 @@ module Pso
19
20
  Array.new(@density)
20
21
  @swarm = Array.new(@density) { generate_random_particle }
21
22
  @swarm_best = @swarm.map { |particle| [@f.f(particle), particle] }
23
+ @swarm_speed = @swarm.map { generate_random_particle }
22
24
  end
23
25
 
24
26
  def generate_random_noise_particle
@@ -41,18 +43,16 @@ module Pso
41
43
  end
42
44
  end
43
45
 
44
- def solve(precision: 2000, threads: 4)
46
+ def solve(precision: 200000, threads: 1)
45
47
  Array.new(threads).map do
46
48
  Thread.new do
47
- (precision / threads).times do
48
- perfect = perfect_particle
49
- for index in 0...@din
50
- new_vector = normalize(interate(@swarm[index], @swarm_best[index].last, perfect))
51
-
52
- if is_best(@swarm_best[index].first, @f.f(new_vector))
53
- @swarm_best[index] = [@f.f(new_vector), new_vector]
54
- end
55
-
49
+ ((precision / @swarm.size) / threads).times do |interation_number|
50
+ for index in 0...@density
51
+ perfect = perfect_particle
52
+ puts @f.f perfect
53
+ new_vector = normalize(interate(@swarm[index], @swarm_best[index].last, perfect, @swarm_speed[index]))
54
+ @swarm_best[index] = [@f.f(new_vector), new_vector] if is_best(@swarm_best[index].first, @f.f(new_vector))
55
+ @swarm_speed[index] = (new_vector - @swarm[index]).normalize
56
56
  @swarm[index] = new_vector
57
57
  end
58
58
  end
@@ -83,8 +83,13 @@ module Pso
83
83
  vector
84
84
  end
85
85
 
86
- def interate(vector, best, perfect)
87
- return vector + (generate_random_noise_particle) + (best - vector).normalize + (perfect - vector).normalize
86
+ def interate(vector, best, perfect, speed)
87
+ if vector == perfect
88
+ new_vec = vector + (best - vector).normalize * 0.2 + (generate_random_noise_particle) * rand * 0.05 + speed * 0.05
89
+ minimal = @f.f(vector) > @f.f(new_vec)
90
+ return @method == :min_by ? (minimal ? new_vec : vector) : ( minimal ? vector : new_vec)
91
+ end
92
+ vector + (generate_random_noise_particle) * rand * 0.1 + (best - vector).normalize * 0.5 + (perfect - vector).normalize + speed
88
93
  end
89
94
  end
90
95
  end
@@ -1,3 +1,3 @@
1
1
  module Pso
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.1.1'.freeze
3
3
  end
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'bundler', '~> 1.16'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
28
  spec.add_development_dependency 'rspec', '~> 3.0'
29
+ spec.add_development_dependency 'pry'
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Schweigert
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-22 00:00:00.000000000 Z
11
+ date: 2018-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Particle Swarm Optimization
56
70
  email:
57
71
  - marlon.henry@magrathealabs.com