@@ -912,4 +912,158 @@ SBG::LIB::WeightedSBGraph create_air_conditioners_graph()
912912 return graph;
913913}
914914
915+
916+ WeightedSBGraph create_air_conditioners_with_controller_graph (int size)
917+ {
918+ int quarter = size / 4 ;
919+ int start_q = (2 * size) + 13 ;
920+ int q = size / 4 ;
921+
922+ Set nodes = SET_FACT.createSet ();
923+
924+ // th [label="N1=th {0:999}"]
925+ auto th = Interval (0 , 1 , size - 1 );
926+ nodes.emplaceBack (th);
927+ // ierr [label="N2=ierr{1000:1000}"]
928+ auto ierr = Interval (size, 1 , size);
929+ nodes.emplaceBack (ierr);
930+ // ptotal [label="N3=ptotal {1001:1001}"]
931+ auto ptotal = Interval (size + 1 , 1 , size + 1 );
932+ nodes.emplaceBack (ptotal);
933+ // ev_1 [label="N4=ev_1 {1002:1005}"
934+ auto ev_1 = Interval (size + 2 , 1 , size + 5 );
935+ nodes.emplaceBack (ev_1);
936+ // ev_2 [label="N5=ev_2 {1006:1009}"]
937+ auto ev_2 = Interval (size + 6 , 1 , size + 9 );
938+ nodes.emplaceBack (ev_2);
939+ // ev_3 [label="N6=ev_3 {1010:1010}"]
940+ auto ev_3 = Interval (size + 10 , 1 , size + 10 );
941+ nodes.emplaceBack (ev_3);
942+ // ev_4 [label="N7=ev_4 {1011:1011}"]
943+ auto ev_4 = Interval (size + 11 , 1 , size + 11 );
944+ nodes.emplaceBack (ev_4);
945+ // ev_5 [label="N8=ev_5 {1012:1012}"]
946+ auto ev_5 = Interval (size + 12 , 1 , size + 12 );
947+ nodes.emplaceBack (ev_5);
948+ // ev_6 [label="N9=ev_6 {1013:2012}"]
949+ auto ev_6 = Interval (size + 13 , 1 , (2 * size) + 12 );
950+ nodes.emplaceBack (ev_6);
951+ // ev_7 [label="N10=ev_7 {2013:2262}"]
952+ auto ev_7 = Interval (start_q, 1 , start_q + quarter - 1 );
953+ nodes.emplaceBack (ev_7);
954+ // ev_8 [label="N11=ev_8 {2263:2512}"]
955+ auto ev_8 = Interval (start_q + quarter, 1 , start_q + (2 * quarter) - 1 );
956+ nodes.emplaceBack (ev_8);
957+ // ev_9 [label="N12=ev_9 {2513:2762}"]
958+ auto ev_9 = Interval (start_q + (2 * quarter), 1 , start_q + (3 * quarter) - 1 );
959+ nodes.emplaceBack (ev_9);
960+ // ev_10 [label="N13=ev_10 {2763:3012}"]
961+ auto ev_10 = Interval (start_q + (3 * quarter), 1 , start_q + (4 * quarter) - 1 );
962+ nodes.emplaceBack (ev_10);
963+
964+ // maps
965+ PWMap rhs_maps = PW_FACT.createPWMap ();
966+ PWMap lhs_maps = PW_FACT.createPWMap ();
967+
968+ // th -> ev_6 [label="<- {3013:4012} -> ", arrowhead="none"]
969+ rhs_maps.emplaceBack (Map (Interval (3 * size + 13 , 1 , 4 * size + 12 ), Exp (LExp (1 , RATIONAL (-(3 * size + 13 ), 1 )))));
970+ lhs_maps.emplaceBack (Map (Interval (3 * size + 13 , 1 , 4 * size + 12 ), Exp (LExp (1 , RATIONAL (-(2 * size), 1 )))));
971+
972+ // th -> ev_7 [label="<- {4013:4262} -> ", arrowhead="none"]
973+ rhs_maps.emplaceBack (Map (Interval (4 * size + 13 , 1 , 4 * size + 12 + q), Exp (LExp (1 , RATIONAL (-(4 * size + 13 ), 1 )))));
974+ lhs_maps.emplaceBack (Map (Interval (4 * size + 13 , 1 , 4 * size + 12 + q), Exp (LExp (1 , RATIONAL (-(2 * size), 1 )))));
975+
976+ // th -> ev_8 [label="<- {4263:4512} -> ", arrowhead="none"]
977+ rhs_maps.emplaceBack (Map (Interval (4 * size + 13 + q, 1 , 4 * size + 12 + 2 * q), Exp (LExp (1 , RATIONAL (-(4 * size + 13 ), 1 )))));
978+ lhs_maps.emplaceBack (Map (Interval (4 * size + 13 + q, 1 , 4 * size + 12 + 2 * q), Exp (LExp (1 , RATIONAL (-(2 * size), 1 )))));
979+
980+ // th -> ev_9 [label="<- {4513:4762} -> ", arrowhead="none"]
981+ rhs_maps.emplaceBack (Map (Interval (4 * size + 13 + 2 * q, 1 , 4 * size + 12 + 3 * q), Exp (LExp (1 , RATIONAL (-(4 * size + 13 ), 1 )))));
982+ lhs_maps.emplaceBack (Map (Interval (4 * size + 13 + 2 * q, 1 , 4 * size + 12 + 3 * q), Exp (LExp (1 , RATIONAL (-(2 * size), 1 )))));
983+
984+ // th -> ev_10 [label="<- {4763:5012} -> ", arrowhead="none"]
985+ rhs_maps.emplaceBack (Map (Interval (4 * size + 13 + 3 * q, 1 , 5 * size + 12 ), Exp (LExp (1 , RATIONAL (-(4 * size + 13 ), 1 )))));
986+ lhs_maps.emplaceBack (Map (Interval (4 * size + 13 + 3 * q, 1 , 5 * size + 12 ), Exp (LExp (1 , RATIONAL (-(2 * size), 1 )))));
987+
988+ // ierr -> ev_3 [label="<- {5013:5013} -> ", arrowhead="none"]
989+ rhs_maps.emplaceBack (Map (Interval (5 * size + 13 , 1 , 5 * size + 13 ), Exp (LExp (0 , size))));
990+ lhs_maps.emplaceBack (Map (Interval (5 * size + 13 , 1 , 5 * size + 13 ), Exp (LExp (0 , size + 10 ))));
991+
992+ // ierr -> ev_4 [label="<- {5014:5014} -> ", arrowhead="none"]
993+ rhs_maps.emplaceBack (Map (Interval (5 * size + 14 , 1 , 5 * size + 14 ), Exp (LExp (0 , size))));
994+ lhs_maps.emplaceBack (Map (Interval (5 * size + 14 , 1 , 5 * size + 14 ), Exp (LExp (0 , size + 11 ))));
995+
996+ // ierr -> ev_5 [label="<- {5015:5015} -> ", arrowhead="none"]
997+ rhs_maps.emplaceBack (Map (Interval (5 * size + 15 , 1 , 5 * size + 15 ), Exp (LExp (0 , size))));
998+ lhs_maps.emplaceBack (Map (Interval (5 * size + 15 , 1 , 5 * size + 15 ), Exp (LExp (0 , size + 12 ))));
999+
1000+ // ptotal -> ev_1 [label="1001 <- {5016:5019} -> ", arrowhead="none"]
1001+ rhs_maps.emplaceBack (Map (Interval (5 * size + 16 , 1 , 5 * size + 19 ), Exp (LExp (0 , size + 1 ))));
1002+ lhs_maps.emplaceBack (Map (Interval (5 * size + 16 , 1 , 5 * size + 19 ), Exp (LExp (1 , RATIONAL (-(4 * size + 14 ), 1 )))));
1003+
1004+ // ptotal -> ev_2 [label="1001 <- {5020:5023} -> ", arrowhead="none"]
1005+ rhs_maps.emplaceBack (Map (Interval (5 * size + 20 , 1 , 5 * size + 23 ), Exp (LExp (0 , size + 1 ))));
1006+ lhs_maps.emplaceBack (Map (Interval (5 * size + 20 , 1 , 5 * size + 23 ), Exp (LExp (1 , RATIONAL (-(4 * size + 14 ), 1 )))));
1007+
1008+ // ptotal -> ev_5 [label="1001 <- {5024:5024} -> 1012", arrowhead="none"]
1009+ rhs_maps.emplaceBack (Map (Interval (5 * size + 24 , 1 , 5 * size + 24 ), Exp (LExp (0 , size + 1 ))));
1010+ lhs_maps.emplaceBack (Map (Interval (5 * size + 24 , 1 , 5 * size + 24 ), Exp (LExp (1 , RATIONAL (-(4 * size + 12 ), 1 )))));
1011+
1012+ // ev_1 -> ev_2 [label=" <- {5025:5028} -> ", arrowhead="none"]
1013+ rhs_maps.emplaceBack (Map (Interval (5 * size + 25 , 1 , 5 * size + 28 ), Exp (LExp (1 , RATIONAL (-(4 * size + 23 ), 1 )))));
1014+ lhs_maps.emplaceBack (Map (Interval (5 * size + 25 , 1 , 5 * size + 28 ), Exp (LExp (1 , RATIONAL (-(4 * size + 19 ), 1 )))));
1015+
1016+ // ev_1 -> ev_7 [label="1002 <- {5029:5278} -> ", arrowhead="none"]
1017+ rhs_maps.emplaceBack (Map (Interval (5 * size + 29 , 1 , 5 * size + 28 + q), Exp (LExp (0 , size + 2 ))));
1018+ lhs_maps.emplaceBack (Map (Interval (5 * size + 29 , 1 , 5 * size + 28 + q), Exp (LExp (1 , RATIONAL (-(3 * size + 16 ), 1 )))));
1019+
1020+ // ev_1 -> ev_8 [label="1003 <- {5279:5528} -> ", arrowhead="none"]
1021+ rhs_maps.emplaceBack (Map (Interval (5 * size + 29 + q, 1 , 5 * size + 28 + 2 * q), Exp (LExp (0 , size + 3 ))));
1022+ lhs_maps.emplaceBack (Map (Interval (5 * size + 29 + q, 1 , 5 * size + 28 + 2 * q), Exp (LExp (1 , RATIONAL (-(3 * size + 16 ), 1 )))));
1023+
1024+ // ev_1 -> ev_9 [label="1004 <- {5529:5778} -> ", arrowhead="none"]
1025+ rhs_maps.emplaceBack (Map (Interval (5 * size + 29 + 2 * q, 1 , 5 * size + 28 + 3 * q), Exp (LExp (0 , size + 4 ))));
1026+ lhs_maps.emplaceBack (Map (Interval (5 * size + 29 + 2 * q, 1 , 5 * size + 28 + 3 * q), Exp (LExp (1 , RATIONAL (-(3 * size + 16 ), 1 )))));
1027+
1028+ // ev_1 -> ev_10 [label="1005 <- {5779:6028} -> ", arrowhead="none"]
1029+ rhs_maps.emplaceBack (Map (Interval (5 * size + 29 + 3 * q, 1 , 6 * size + 28 ), Exp (LExp (0 , size + 5 ))));
1030+ lhs_maps.emplaceBack (Map (Interval (5 * size + 29 + 3 * q, 1 , 6 * size + 28 ), Exp (LExp (1 , RATIONAL (-(3 * size + 16 ), 1 )))));
1031+
1032+ // ev_3 -> ev_5 [label="1010 <- {6029:6029} -> 1012", arrowhead="none"]
1033+ rhs_maps.emplaceBack (Map (Interval (6 * size + 29 , 1 , 6 * size + 29 ), Exp (LExp (0 , size + 10 ))));
1034+ lhs_maps.emplaceBack (Map (Interval (6 * size + 29 , 1 , 6 * size + 29 ), Exp (LExp (0 , size + 12 ))));
1035+
1036+ // ev_4 -> ev_5 [label="1011 <- {6030:6030} -> 1012", arrowhead="none"]
1037+ rhs_maps.emplaceBack (Map (Interval (6 * size + 30 , 1 , 6 * size + 30 ), Exp (LExp (0 , size + 11 ))));
1038+ lhs_maps.emplaceBack (Map (Interval (6 * size + 30 , 1 , 6 * size + 30 ), Exp (LExp (0 , size + 12 ))));
1039+
1040+ // ev_5 -> ev_7 [label="1012 <- {6031:6280} -> ", arrowhead="none"]
1041+ rhs_maps.emplaceBack (Map (Interval (6 * size + 31 , 1 , 6 * size + 30 + q), Exp (LExp (0 , size + 12 ))));
1042+ lhs_maps.emplaceBack (Map (Interval (6 * size + 31 , 1 , 6 * size + 30 + q), Exp (LExp (1 , RATIONAL (-(4 * size + 18 ), 1 )))));
1043+
1044+ // ev_5 -> ev_8 [label="1012 <- {6281:6530} -> ", arrowhead="none"]
1045+ rhs_maps.emplaceBack (Map (Interval (6 * size + 31 + q, 1 , 6 * size + 30 + 2 * q), Exp (LExp (0 , size + 12 ))));
1046+ lhs_maps.emplaceBack (Map (Interval (6 * size + 31 + q, 1 , 6 * size + 30 + 2 * q), Exp (LExp (1 , RATIONAL (-(4 * size + 18 ), 1 )))));
1047+
1048+ // ev_5 -> ev_9 [label="1012 <- {6531:6780} -> ", arrowhead="none"]
1049+ rhs_maps.emplaceBack (Map (Interval (6 * size + 31 + 2 * q, 1 , 6 * size + 30 + 3 * q), Exp (LExp (0 , size + 12 ))));
1050+ lhs_maps.emplaceBack (Map (Interval (6 * size + 31 + 2 * q, 1 , 6 * size + 30 + 3 * q), Exp (LExp (1 , RATIONAL (-(4 * size + 18 ), 1 )))));
1051+
1052+ // ev_5 -> ev_10 [label="1012 <- {6781:7030} -> ", arrowhead="none"]
1053+ rhs_maps.emplaceBack (Map (Interval (6 * size + 31 + 3 * q, 1 , 7 * size + 30 ), Exp (LExp (0 , size + 12 ))));
1054+ lhs_maps.emplaceBack (Map (Interval (6 * size + 31 + 3 * q, 1 , 7 * size + 30 ), Exp (LExp (1 , RATIONAL (-(4 * size + 18 ), 1 )))));
1055+
1056+ auto vmap = PW_FACT.createPWMap ();
1057+ auto vsap = PW_FACT.createPWMap ();
1058+ auto emap = PW_FACT.createPWMap ();
1059+
1060+ // Now, let's build a graph!
1061+ SBG::LIB::WeightedSBGraph graph (nodes, vmap, lhs_maps, rhs_maps, emap, vsap); // This will be our graph
1062+
1063+ cout << graph << endl;
1064+
1065+ return graph;
1066+
1067+ }
1068+
9151069} // namespace sbg_partitioner
0 commit comments