Limbo 3.5.4
Loading...
Searching...
No Matches
test_FM.cpp
Go to the documentation of this file.
1
7
8#include <iostream>
10
11using std::cout;
12using std::endl;
13
15class 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
45int 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}
Implementation of the FM partitioning algorithm.
a class to describe graph vertex
Definition test_FM.cpp:16
Node(weight_type const &w, tie_id_type const &id)
Definition test_FM.cpp:26
weight_type m_weight
node weight
Definition test_FM.cpp:39
tie_id_type m_id
node label
Definition test_FM.cpp:38
weight_type weight() const
Definition test_FM.cpp:35
tie_id_type tie_id() const
Definition test_FM.cpp:33
Implementation of FM partitioning algorithm.
Definition FM.h:73
void print_connection() const
print connection
Definition FM.h:420
bool add_net(net_weight_type const &weight, Iterator first, Iterator last)
add nets
Definition FM.h:354
bool add_node(node_type *pNode, int initialPartition)
add node
Definition FM.h:334
void print() const
print function
Definition FM.h:397
int main()
Definition test_FM.cpp:45