@@ -913,145 +913,160 @@ SBG::LIB::WeightedSBGraph create_air_conditioners_graph()
913913}
914914
915915
916- WeightedSBGraph create_air_conditioners_with_controller_graph (int size)
916+ WeightedSBGraph create_air_conditioners_with_controller_graph (int size, int sections )
917917{
918- int quarter = size / 4 ;
918+ int quarter = size / sections ;
919919 int start_q = (2 * size) + 13 ;
920- int q = size / 4 ;
921920
922921 Set nodes = SET_FACT.createSet ();
923922
924923 // th [label="N1=th {0:999}"]
925924 auto th = Interval (0 , 1 , size - 1 );
926925 nodes.emplaceBack (th);
926+ int current_offset = size;
927+
927928 // ierr [label="N2=ierr{1000:1000}"]
928- auto ierr = Interval (size, 1 , size);
929+ int ierr_domain_init = current_offset;
930+ auto ierr = Interval (current_offset, 1 , current_offset);
929931 nodes.emplaceBack (ierr);
932+ current_offset += 1 ;
933+
930934 // ptotal [label="N3=ptotal {1001:1001}"]
931- auto ptotal = Interval (size + 1 , 1 , size + 1 );
935+ int ptotal_domain_init = current_offset;
936+ auto ptotal = Interval (current_offset, 1 , current_offset);
932937 nodes.emplaceBack (ptotal);
938+ current_offset += 1 ;
939+
933940 // ev_1 [label="N4=ev_1 {1002:1005}"
934- auto ev_1 = Interval (size + 2 , 1 , size + 5 );
941+ int ev_1_domain_init = current_offset;
942+ auto ev_1 = Interval (current_offset, 1 , current_offset + sections - 1 );
935943 nodes.emplaceBack (ev_1);
944+ current_offset += sections;
945+
936946 // ev_2 [label="N5=ev_2 {1006:1009}"]
937- auto ev_2 = Interval (size + 6 , 1 , size + 9 );
947+ int ev_2_domain_init = current_offset;
948+ auto ev_2 = Interval (current_offset, 1 , current_offset + sections - 1 );
938949 nodes.emplaceBack (ev_2);
950+ current_offset += sections;
951+
939952 // ev_3 [label="N6=ev_3 {1010:1010}"]
940- auto ev_3 = Interval (size + 10 , 1 , size + 10 );
953+ int ev_3_domain_init = current_offset;
954+ auto ev_3 = Interval (current_offset, 1 , current_offset);
941955 nodes.emplaceBack (ev_3);
956+ current_offset += 1 ;
957+
942958 // ev_4 [label="N7=ev_4 {1011:1011}"]
943- auto ev_4 = Interval (size + 11 , 1 , size + 11 );
959+ int ev_4_domain_init = current_offset;
960+ auto ev_4 = Interval (current_offset, 1 , current_offset);
944961 nodes.emplaceBack (ev_4);
962+ current_offset += 1 ;
963+
945964 // ev_5 [label="N8=ev_5 {1012:1012}"]
946- auto ev_5 = Interval (size + 12 , 1 , size + 12 );
965+ int ev_5_domain_init = current_offset;
966+ auto ev_5 = Interval (current_offset, 1 , current_offset);
947967 nodes.emplaceBack (ev_5);
968+ current_offset += 1 ;
969+
948970 // ev_6 [label="N9=ev_6 {1013:2012}"]
949- auto ev_6 = Interval (size + 13 , 1 , (2 * size) + 12 );
971+ int ev_6_domain_init = current_offset;
972+ auto ev_6 = Interval (current_offset, 1 , current_offset + (size - 1 ));
950973 nodes.emplaceBack (ev_6);
974+ current_offset += size;
975+
976+ // nodes from 10 to 13 in the example with 4 sections
951977 // 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);
954978 // 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);
957979 // 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);
980+ int part_total_domain_init = current_offset;
981+ for (int i = 0 ; i < sections; i++) {
982+ auto ev_i = Interval (current_offset, 1 , current_offset + quarter - 1 );
983+ nodes.emplaceBack (ev_i);
984+ current_offset += quarter;
985+ }
963986
964987 // maps
965988 PWMap rhs_maps = PW_FACT.createPWMap ();
966989 PWMap lhs_maps = PW_FACT.createPWMap ();
967990
968991 // 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 )))));
992+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + (size - 1 )), Exp (LExp (1 , RATIONAL (-current_offset, 1 )))));
993+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + (size - 1 )), Exp (LExp (1 , RATIONAL (ev_6_domain_init - current_offset, 1 )))));
994+ current_offset += size;
971995
972996 // 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-
976997 // 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-
980998 // 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-
984999 // 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 )))));
1000+ for (int i = 0 ; i < sections; i++) {
1001+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + (quarter - 1 )), Exp (LExp (1 , RATIONAL (-current_offset + i * quarter, 1 )))));
1002+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + (quarter - 1 )), Exp (LExp (1 , RATIONAL (part_total_domain_init + i * quarter - current_offset, 1 )))));
1003+ current_offset += quarter;
1004+ }
9871005
9881006 // 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 ))));
1007+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ierr_domain_init))));
1008+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_3_domain_init))));
1009+ current_offset += 1 ;
9911010
9921011 // 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 ))));
1012+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ierr_domain_init))));
1013+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_4_domain_init))));
1014+ current_offset += 1 ;
9951015
9961016 // 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 ))));
1017+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ierr_domain_init))));
1018+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_5_domain_init))));
1019+ current_offset += 1 ;
9991020
10001021 // 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 )))));
1022+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + sections - 1 ), Exp (LExp (0 , ptotal_domain_init))));
1023+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + sections - 1 ), Exp (LExp (1 , RATIONAL (ev_1_domain_init - current_offset, 1 )))));
1024+ current_offset += sections;
10031025
10041026 // 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 )))));
1027+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + sections - 1 ), Exp (LExp (0 , ptotal_domain_init))));
1028+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + sections - 1 ), Exp (LExp (1 , RATIONAL (ev_2_domain_init - current_offset, 1 )))));
1029+ current_offset += sections;
10071030
10081031 // 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 )))));
1032+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ptotal_domain_init))));
1033+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_5_domain_init))));
1034+ current_offset += 1 ;
10111035
10121036 // 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 )))));
1037+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + sections - 1 ), Exp (LExp (1 , RATIONAL (ev_1_domain_init - current_offset, 1 )))));
1038+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + sections - 1 ), Exp (LExp (1 , RATIONAL (ev_2_domain_init - current_offset, 1 )))));
1039+ current_offset += sections;
10151040
10161041 // 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-
10201042 // 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-
10241043 // 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-
10281044 // 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 )))));
1045+ for (int i = 0 ; i < sections; i++) {
1046+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + quarter - 1 ), Exp (LExp (0 , ev_1_domain_init))));
1047+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + quarter - 1 ), Exp (LExp (1 , RATIONAL (part_total_domain_init - current_offset + quarter * i, 1 )))));
1048+ current_offset += quarter;
1049+ }
10311050
10321051 // 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 ))));
1052+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_3_domain_init))));
1053+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_5_domain_init))));
1054+ current_offset += 1 ;
10351055
10361056 // 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 ))));
1057+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_4_domain_init))));
1058+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset), Exp (LExp (0 , ev_5_domain_init))));
1059+ current_offset += 1 ;
10391060
10401061 // 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-
10441062 // 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-
10481063 // 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-
10521064 // 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 )))));
1065+ for (int i = 0 ; i < sections; i++) {
1066+ rhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + quarter - 1 ), Exp (LExp (0 , ev_5_domain_init))));
1067+ lhs_maps.emplaceBack (Map (Interval (current_offset, 1 , current_offset + quarter - 1 ), Exp (LExp (1 , RATIONAL (-current_offset + part_total_domain_init + i * quarter, 1 )))));
1068+ current_offset += quarter;
1069+ }
10551070
10561071 auto vmap = PW_FACT.createPWMap ();
10571072 auto vsap = PW_FACT.createPWMap ();
0 commit comments