Limbo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_FM.cpp
Go to the documentation of this file.
1 
8 #include <iostream>
10 
11 using std::cout;
12 using std::endl;
13 
15 class Node
16 {
17  public:
19  typedef char tie_id_type;
20  typedef int weight_type;
22 
26  Node(weight_type const& w, tie_id_type const& id)
27  {
28  m_weight = w;
29  m_id = id;
30  }
31 
33  tie_id_type tie_id() const {return m_id;}
35  weight_type weight() const {return m_weight;}
36 
37  protected:
38  tie_id_type m_id;
39  weight_type m_weight;
40 };
41 
45 int main()
46 {
47  array<Node*, 8> vNode;
48  vNode[0] = new Node (1, 'a');
49  vNode[1] = new Node (1, 'b');
50  vNode[2] = new Node (1, 'c');
51  vNode[3] = new Node (1, 'd');
52  vNode[4] = new Node (1, 'e');
53  vNode[5] = new Node (1, 'f');
54  vNode[6] = new Node (1, 'g');
55  vNode[7] = new Node (1, 'h');
56 
58  for (unsigned int i = 0; i < vNode.size(); ++i)
59  {
60 #if 1
61  if (i < 4)
62  fm.add_node(vNode[i], 0);
63  else
64  fm.add_node(vNode[i], 1);
65 #else
66  if (i < 4)
67  fm.add_node(vNode[i], i%2);
68  else
69  fm.add_node(vNode[i], i%2);
70 #endif
71  }
72 
73  // net n1
74  {
75  vector<Node*> vNodeNet;
76  vNodeNet.push_back(vNode[0]);
77  vNodeNet.push_back(vNode[1]);
78  vNodeNet.push_back(vNode[2]);
79  fm.add_net(1, vNodeNet.begin(), vNodeNet.end());
80  //fm.add_net(1.0/(vNodeNet.size()-1), vNodeNet.begin(), vNodeNet.end());
81  }
82  // net n2
83  {
84  vector<Node*> vNodeNet;
85  vNodeNet.push_back(vNode[1]);
86  vNodeNet.push_back(vNode[3]);
87  vNodeNet.push_back(vNode[4]);
88  vNodeNet.push_back(vNode[5]);
89  fm.add_net(1, vNodeNet.begin(), vNodeNet.end());
90  //fm.add_net(1.0/(vNodeNet.size()-1), vNodeNet.begin(), vNodeNet.end());
91  }
92  // net n3
93  {
94  vector<Node*> vNodeNet;
95  vNodeNet.push_back(vNode[2]);
96  vNodeNet.push_back(vNode[5]);
97  vNodeNet.push_back(vNode[6]);
98  fm.add_net(1, vNodeNet.begin(), vNodeNet.end());
99  //fm.add_net(1.0/(vNodeNet.size()-1), vNodeNet.begin(), vNodeNet.end());
100  }
101  // net n4
102  {
103  vector<Node*> vNodeNet;
104  vNodeNet.push_back(vNode[0]);
105  vNodeNet.push_back(vNode[6]);
106  fm.add_net(1, vNodeNet.begin(), vNodeNet.end());
107  //fm.add_net(1.0/(vNodeNet.size()-1), vNodeNet.begin(), vNodeNet.end());
108  }
109  // net n5
110  {
111  vector<Node*> vNodeNet;
112  vNodeNet.push_back(vNode[3]);
113  vNodeNet.push_back(vNode[4]);
114  vNodeNet.push_back(vNode[7]);
115  fm.add_net(1, vNodeNet.begin(), vNodeNet.end());
116  //fm.add_net(1.0/(vNodeNet.size()-1), vNodeNet.begin(), vNodeNet.end());
117  }
118  // net n6
119  {
120  vector<Node*> vNodeNet;
121  vNodeNet.push_back(vNode[5]);
122  vNodeNet.push_back(vNode[7]);
123  fm.add_net(1, vNodeNet.begin(), vNodeNet.end());
124  //fm.add_net(1.0/(vNodeNet.size()-1), vNodeNet.begin(), vNodeNet.end());
125  }
126  fm.print();
127  fm.print_connection();
128  fm(3.0/5, 5.0/3);
129  fm.print();
130  fm.print_connection();
131 
132  return 0;
133 }
a class to describe graph vertex
Definition: test_FM.cpp:15
Implementation of FM partitioning algorithm.
Definition: FM.h:72
tie_id_type m_id
node label
Definition: test_FM.cpp:38
Node(weight_type const &w, tie_id_type const &id)
Definition: test_FM.cpp:26
Implementation of the FM partitioning algorithm.
weight_type m_weight
node weight
Definition: test_FM.cpp:39
bool add_node(node_type *pNode, int initialPartition)
add node
Definition: FM.h:334
tie_id_type tie_id() const
Definition: test_FM.cpp:33
void print() const
print function
Definition: FM.h:397
void print_connection() const
print connection
Definition: FM.h:420
weight_type weight() const
Definition: test_FM.cpp:35
bool add_net(net_weight_type const &weight, Iterator first, Iterator last)
add nets
Definition: FM.h:354
int main()
Definition: test_FM.cpp:45