X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=lib%2Fgraph.njae%2Fgraph.rb;h=3029cebd6c403d69d97aa9bf465d50c176d4af56;hb=f23b3d51ee9618aeaa1ac35153b275b91d3ef972;hp=288fc74f569481388a2f1f56ea272402b6f600b6;hpb=95b8572d01c0b9c3aa8fc5a1e85a045c33d4ecf1;p=graph.njae.git diff --git a/lib/graph.njae/graph.rb b/lib/graph.njae/graph.rb index 288fc74..3029ceb 100644 --- a/lib/graph.njae/graph.rb +++ b/lib/graph.njae/graph.rb @@ -1,5 +1,9 @@ require 'ostruct' +require 'logger' +$log = Logger.new(STDERR) +$log.level = Logger::WARN + # A simple graph library module GraphNjae @@ -81,19 +85,23 @@ module GraphNjae iteration = 1 residual = max_residual + 1 while residual > max_residual and iteration <= max_iterations -# puts "Starting iteration #{iteration}" + $log.debug { "Starting iteration #{iteration}" } self.vertices.each do |v| v.last_similarity = v.similarity end self.vertices.each do |v| -# puts "Processing vertex #{v.name}" - edge_groups = v.edges.group_by {|e| e.type } -# puts " Edge groups {#{edge_groups.keys.map {|t| t.to_s + ' => {' + edge_groups[t].map {|e| e.to_s}.join(', ')}.join('; ')}}" - edge_groups.each do |type, edges| -# puts " Processing group type #{type}" - n = edges.length - edges.each do |e| - e.other_end(v).similarity += v.last_similarity / n + if block_given? + v.similarity = yield v + else + $log.debug { "Processing vertex #{v.name}" } + edge_groups = v.edges.group_by {|e| e.type } + $log.debug { " Edge groups {#{edge_groups.keys.map {|t| t.to_s + ' => {' + edge_groups[t].map {|e| e.to_s}.join(', ')}.join('; ')}}" } + edge_groups.each do |type, edges| + $log.debug { " Processing group type #{type}" } + n = edges.length + edges.each do |e| + e.other_end(v).similarity += v.last_similarity / n + end end end end @@ -108,7 +116,7 @@ module GraphNjae v.similarity = v.similarity / max_similarity end residual = Math.sqrt(self.vertices.reduce(0) {|a, v| a += (v.similarity - v.last_similarity) ** 2}) -# puts "Residual = #{residual.round(3)}, sims = #{self.vertices.map {|v| v.name + " = " + v.similarity.round(2).to_s}}" + $log.debug { puts "Residual = #{residual.round(3)}, sims = #{self.vertices.map {|v| v.name + " = " + v.similarity.round(2).to_s}}" } iteration += 1 end