Completed
Push — master ( 3f4b33...e37d52 )
by Michael
03:01
created

WattsStrogatzNetwork.rewire_links()   A

Complexity

Conditions 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1.6296

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 0
loc 11
ccs 1
cts 7
cp 0.1429
crap 1.6296
rs 9.4285
1 1
module NoSE
0 ignored issues
show
coding-style introduced by
Missing frozen string literal comment.
Loading history...
2 1
  module Random
3 1
    class WattsStrogatzNetwork < Network
0 ignored issues
show
Coding Style introduced by
This class should have a documentation comment as per coding style.
Loading history...
4 1
      def initialize(params = {})
5
        super params
6
7
        @beta = params.fetch :beta, 0.5
8
        @node_degree = params.fetch :node_degree, 2
9
        @nodes = 0..(@nodes_nb - 1)
10
11
        @entities = @nodes.map do |node|
12
          create_entity node
13
        end
14
15
        build_initial_links
16
        rewire_links
17
        add_foreign_keys
18
      end
19
20 1
      private
21
22
      # Set up the initial links between all nodes
23
      # @return [void]
24 1
      def build_initial_links
25
        @nodes.each do |node|
26
          (@node_degree / 2).times do |i|
27
            add_link node, (node + i + 1) % @nodes_nb
28
          end
29
        end
30
      end
31
32
      # Rewire all links between nodes
33
      # @return [void]
34 1
      def rewire_links
35
        (@node_degree / 2).times do |i|
36
          @nodes.each do |node|
37
            next unless rand < @beta
38
39
            neighbour = (node + i + 1) % @nodes_nb
40
            remove_link node, neighbour
41
            add_link node, new_neighbour(node, neighbour)
42
          end
43
        end
44
      end
45
    end
46
  end
47
end
48