Skip to content

Commit 030dc13

Browse files
committed
air cond with controllers
1 parent 81fa01c commit 030dc13

2 files changed

Lines changed: 89 additions & 74 deletions

File tree

algorithms/partitioner/build_sb_graph.cpp

Lines changed: 88 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -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();

algorithms/partitioner/build_sb_graph.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ void flatten_set(SBG::LIB::Set &set, const SBG::LIB::WeightedSBGraph& graph);
8585
SBG::LIB::WeightedSBGraph create_air_conditioners_graph();
8686

8787

88-
SBG::LIB::WeightedSBGraph create_air_conditioners_with_controller_graph(int size);
88+
SBG::LIB::WeightedSBGraph create_air_conditioners_with_controller_graph(int size, int sections);
8989

9090

9191
/// It returns the edge cost or node weight of the input set. It looks for a key in cost that intersects

0 commit comments

Comments
 (0)