rbbt-dm 1.1.7 → 1.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/network/paths.rb +63 -2
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a64441aa1cd02aa113a218e75d8a45e8679404d
4
- data.tar.gz: 3d8ec7e4202bdb5ec1f79baa95e534ad84270369
3
+ metadata.gz: 2d622e348e2b667b9a7a50d72b838b052a901ee1
4
+ data.tar.gz: 52aa969ad1244db73caa9869c7aac95ba676d8ea
5
5
  SHA512:
6
- metadata.gz: 79dde04bbfa4955f595c6bc702c9c5791029ed0a52e5720cf8e453036cfa6279ac1aea49fd5eba399fc68e1a8fcdc2db7428beba21cf5fec68bb3f93653b5533
7
- data.tar.gz: f43dc00fa73c817da58a807163feba66b3ce2275ff4b1c51f42ba458f3c8448047cc013da82c8be6aadd3cd57111dbe376a39166985497328867e34c0c0880ab
6
+ metadata.gz: ffc9db25cf186b73e846075f71704c48e2cd0287543d85c949a7ebaeef272351bdd064ed110dcdab6acbccf1e2819133e7a0a7ee74c3a65e7cfc2a42d9c3e070
7
+ data.tar.gz: a17ba0299410b15b3ca4baedae8b2b85821782f3217809a99f7353f09249a90b86bd4005b30413d8612700cb05d15f4d38f5521976d7de2704bc52c2c2a1fca8
@@ -61,9 +61,9 @@ module Paths
61
61
  distances[u] = distance
62
62
  path = extract_path(parents, start_node, u)
63
63
  next if path.length > max_steps if max_steps
64
- next if not adjacency.include?(u) or adjacency[u].nil? or adjacency[u].empty?
64
+ next if not adjacency.include?(u) or (adjacency[u].nil? or adjacency[u].empty? )
65
65
  Misc.zip_fields(adjacency[u]).each do |v,node_dist|
66
- next if threshold and node_dist > threshold
66
+ next if node_dist.nil? or (threshold and node_dist > threshold)
67
67
  d = distance + node_dist
68
68
  next unless d < distances[v] and d < best # we can't relax this one
69
69
  active[v] << d
@@ -102,6 +102,7 @@ module Paths
102
102
  distances[u] = distance
103
103
  next if not adjacency.include?(u) or adjacency[u].nil? or adjacency[u].empty?
104
104
  Misc.zip_fields(adjacency[u]).each do |v,node_dist|
105
+ next if node_dist.nil?
105
106
  d = distance + (node_dist * (l + rand))
106
107
  next unless d < distances[v] and d < best # we can't relax this one
107
108
  active[v] << distances[v] = d
@@ -152,3 +153,63 @@ module Entity
152
153
  end
153
154
  end
154
155
  end
156
+
157
+ module AssociationItem
158
+
159
+ def self.dijkstra(matches, start_node, end_node = nil, threshold = nil, max_steps = nil, &block)
160
+ adjacency = {}
161
+
162
+ matches.each do |m|
163
+ s, t, undirected = m.split "~"
164
+ next m if s.nil? or t.nil? or s.strip.empty? or t.strip.empty?
165
+ adjacency[s] ||= Set.new
166
+ adjacency[s] << t
167
+ next unless m.undirected
168
+ adjacency[t] ||= Set.new
169
+ adjacency[t] << s
170
+ end
171
+
172
+ return nil unless adjacency.include? start_node
173
+
174
+ active = PriorityQueue.new
175
+ distances = Hash.new { 1.0 / 0.0 }
176
+ parents = Hash.new
177
+
178
+ active[start_node] << 0
179
+ best = 1.0 / 0.0
180
+ found = false
181
+ node_dist_cache = {}
182
+
183
+ until active.empty?
184
+ u = active.priorities.first
185
+ distance = active.shift
186
+ distances[u] = distance
187
+ path = Paths.extract_path(parents, start_node, u)
188
+ next if path.length > max_steps if max_steps
189
+ next if not adjacency.include?(u) or (adjacency[u].nil? or adjacency[u].empty? )
190
+ adjacency[u].each do |v|
191
+ node_dist = node_dist_cache[[u,v]] ||= (block_given? ? block.call(u,v) : 1)
192
+ next if node_dist.nil? or (threshold and node_dist > threshold)
193
+ d = distance + node_dist
194
+ next unless d < distances[v] and d < best # we can't relax this one
195
+ active[v] << d
196
+ distances[v] = d
197
+ parents[v] = u
198
+ if (String === end_node ? end_node == v : end_node.include?(v))
199
+ best = d
200
+ found = true
201
+ end
202
+ end
203
+ end
204
+
205
+ return nil unless found
206
+
207
+ if end_node
208
+ end_node = (end_node & parents.keys).first unless String === end_node
209
+ return nil if not parents.include? end_node
210
+ Paths.extract_path(parents, start_node, end_node)
211
+ else
212
+ parents
213
+ end
214
+ end
215
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-dm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-15 00:00:00.000000000 Z
11
+ date: 2014-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbbt-util