diff --git a/ILP/butadien/butadiensynthesis.py b/ILP/butadien/butadiensynthesis.py index 741f418..b0f21bb 100644 --- a/ILP/butadien/butadiensynthesis.py +++ b/ILP/butadien/butadiensynthesis.py @@ -1,199 +1,221 @@ import gurobipy as gp from gurobipy import GRB, Model, quicksum -HYPERGRAPH = { 1, (['Butadien'], ['Butadien']), - 4, (['Butadien', 'Butadien'], ['p_{0,0}', 'p_{0,1}']), - 5, (['Butadien', 'Butadien'], ['Butadien', 'Butadien']), - 7, (['Butadien', 'Butadien'], ['p_{0,2}']), - 9, (['p_{0,0}', 'p_{0,0}'], ['p_{0,0}', 'p_{0,0}']), - 10, (['p_{0,0}', 'p_{0,1}'], ['Butadien', 'Butadien']), - 11, (['p_{0,0}', 'p_{0,1}'], ['p_{0,0}', 'p_{0,1}']), - 13, (['p_{0,0}', 'p_{0,2}'], ['p_{0,3}']), - 14, (['p_{0,0}', 'p_{0,2}'], ['p_{0,0}', 'p_{0,2}']), - 15, (['Butadien', 'p_{0,0}'], ['Butadien', 'p_{0,0}']), - 16, (['p_{0,1}', 'p_{0,1}'], ['p_{0,1}', 'p_{0,1}']), - 18, (['p_{0,1}', 'p_{0,1}'], ['Butadien', 'p_{0,4}']), - 20, (['p_{0,1}', 'p_{0,2}'], ['Butadien', 'p_{0,5}']), - 21, (['Butadien', 'p_{0,1}'], ['Butadien', 'p_{0,1}']), - 22, (['p_{0,1}', 'p_{0,2}'], ['p_{0,1}', 'p_{0,2}']), - 23, (['Butadien', 'p_{0,1}'], ['p_{0,0}', 'p_{0,4}']), - 24, (['p_{0,2}', 'p_{0,2}'], ['p_{0,2}', 'p_{0,2}']), - 25, (['Butadien', 'p_{0,2}'], ['Butadien', 'p_{0,2}']), - 26, (['Butadien', 'p_{0,2}'], ['p_{0,0}', 'p_{0,5}']), - 28, (['p_{0,0}', 'p_{0,1}'], ['p_{0,6}']), - 30, (['Butadien', 'p_{0,0}'], ['p_{0,7}']), - 32, (['Butadien', 'p_{0,1}'], ['p_{0,8}']), - 33, (['Butadien', 'p_{0,1}'], ['p_{0,5}']), - 35, (['Butadien', 'p_{0,1}'], ['p_{0,9}']), - 37, (['Butadien', 'p_{0,1}'], ['p_{0,10}']), - 38, (['p_{0,3}'], ['p_{0,0}', 'p_{0,2}']), - 42, (['p_{0,4}'], ['p_{0,0}', 'p_{0,11}']), - 50, (['p_{0,3}', 'p_{0,3}'], ['p_{0,3}', 'p_{0,3}']), - 51, (['p_{0,3}', 'p_{0,4}'], ['p_{0,3}', 'p_{0,4}']), - 52, (['p_{0,3}', 'p_{0,5}'], ['p_{0,3}', 'p_{0,5}']), - 53, (['p_{0,3}', 'p_{0,6}'], ['p_{0,3}', 'p_{0,6}']), - 54, (['p_{0,3}', 'p_{0,8}'], ['p_{0,3}', 'p_{0,8}']), - 55, (['p_{0,3}', 'p_{0,9}'], ['p_{0,3}', 'p_{0,9}']), - 56, (['p_{0,3}', 'p_{0,10}'], ['p_{0,3}', 'p_{0,10}']), - 57, (['p_{0,2}', 'p_{0,3}'], ['p_{0,2}', 'p_{0,3}']), - 58, (['p_{0,0}', 'p_{0,3}'], ['p_{0,0}', 'p_{0,3}']), - 59, (['Butadien', 'p_{0,3}'], ['Butadien', 'p_{0,3}']), - 60, (['p_{0,1}', 'p_{0,3}'], ['p_{0,1}', 'p_{0,3}']), - 61, (['p_{0,4}', 'p_{0,4}'], ['p_{0,4}', 'p_{0,4}']), - 62, (['p_{0,4}', 'p_{0,5}'], ['p_{0,4}', 'p_{0,5}']), - 64, (['p_{0,4}', 'p_{0,6}'], ['p_{0,1}', 'p_{0,13}']), - 65, (['p_{0,2}', 'p_{0,4}'], ['p_{0,1}', 'p_{0,5}']), - 66, (['p_{0,0}', 'p_{0,4}'], ['Butadien', 'p_{0,1}']), - 67, (['Butadien', 'p_{0,4}'], ['p_{0,1}', 'p_{0,1}']), - 68, (['Butadien', 'p_{0,4}'], ['Butadien', 'p_{0,4}']), - 69, (['p_{0,1}', 'p_{0,4}'], ['p_{0,1}', 'p_{0,4}']), - 70, (['p_{0,4}', 'p_{0,6}'], ['p_{0,4}', 'p_{0,6}']), - 71, (['p_{0,4}', 'p_{0,8}'], ['p_{0,4}', 'p_{0,8}']), - 72, (['p_{0,4}', 'p_{0,9}'], ['p_{0,4}', 'p_{0,9}']), - 73, (['p_{0,4}', 'p_{0,10}'], ['p_{0,4}', 'p_{0,10}']), - 74, (['p_{0,2}', 'p_{0,4}'], ['p_{0,2}', 'p_{0,4}']), - 75, (['p_{0,0}', 'p_{0,4}'], ['p_{0,0}', 'p_{0,4}']), - 76, (['p_{0,5}', 'p_{0,5}'], ['p_{0,5}', 'p_{0,5}']), - 77, (['p_{0,5}', 'p_{0,6}'], ['p_{0,2}', 'p_{0,13}']), - 78, (['p_{0,2}', 'p_{0,5}'], ['p_{0,2}', 'p_{0,5}']), - 79, (['p_{0,0}', 'p_{0,5}'], ['Butadien', 'p_{0,2}']), - 80, (['Butadien', 'p_{0,5}'], ['p_{0,1}', 'p_{0,2}']), - 81, (['Butadien', 'p_{0,5}'], ['Butadien', 'p_{0,5}']), - 82, (['p_{0,1}', 'p_{0,5}'], ['p_{0,1}', 'p_{0,5}']), - 83, (['p_{0,1}', 'p_{0,5}'], ['p_{0,2}', 'p_{0,4}']), - 84, (['p_{0,5}', 'p_{0,6}'], ['p_{0,5}', 'p_{0,6}']), - 85, (['p_{0,5}', 'p_{0,8}'], ['p_{0,5}', 'p_{0,8}']), - 86, (['p_{0,5}', 'p_{0,9}'], ['p_{0,5}', 'p_{0,9}']), - 87, (['p_{0,5}', 'p_{0,10}'], ['p_{0,5}', 'p_{0,10}']), - 88, (['p_{0,0}', 'p_{0,5}'], ['p_{0,0}', 'p_{0,5}']), - 89, (['p_{0,6}', 'p_{0,6}'], ['p_{0,6}', 'p_{0,6}']), - 90, (['p_{0,6}', 'p_{0,8}'], ['p_{0,6}', 'p_{0,8}']), - 91, (['p_{0,6}', 'p_{0,9}'], ['p_{0,6}', 'p_{0,9}']), - 92, (['p_{0,6}', 'p_{0,10}'], ['p_{0,6}', 'p_{0,10}']), - 93, (['p_{0,2}', 'p_{0,6}'], ['p_{0,2}', 'p_{0,6}']), - 94, (['p_{0,0}', 'p_{0,6}'], ['p_{0,0}', 'p_{0,6}']), - 95, (['Butadien', 'p_{0,6}'], ['Butadien', 'p_{0,6}']), - 96, (['Butadien', 'p_{0,6}'], ['p_{0,0}', 'p_{0,13}']), - 97, (['p_{0,1}', 'p_{0,6}'], ['Butadien', 'p_{0,13}']), - 98, (['p_{0,1}', 'p_{0,6}'], ['p_{0,1}', 'p_{0,6}']), - 100, (['p_{0,0}', 'p_{0,6}'], ['p_{0,14}']), - 102, (['p_{0,0}', 'p_{0,7}'], ['p_{0,15}']), - 103, (['p_{0,8}', 'p_{0,8}'], ['p_{0,8}', 'p_{0,8}']), - 104, (['p_{0,8}', 'p_{0,9}'], ['p_{0,8}', 'p_{0,9}']), - 105, (['p_{0,8}', 'p_{0,10}'], ['p_{0,8}', 'p_{0,10}']), - 106, (['p_{0,2}', 'p_{0,8}'], ['p_{0,2}', 'p_{0,8}']), - 107, (['p_{0,0}', 'p_{0,8}'], ['p_{0,0}', 'p_{0,8}']), - 108, (['Butadien', 'p_{0,8}'], ['Butadien', 'p_{0,8}']), - 109, (['p_{0,1}', 'p_{0,8}'], ['p_{0,1}', 'p_{0,8}']), - 110, (['p_{0,9}', 'p_{0,9}'], ['p_{0,9}', 'p_{0,9}']), - 111, (['p_{0,9}', 'p_{0,10}'], ['p_{0,9}', 'p_{0,10}']), - 112, (['p_{0,2}', 'p_{0,9}'], ['p_{0,2}', 'p_{0,9}']), - 113, (['p_{0,0}', 'p_{0,9}'], ['p_{0,0}', 'p_{0,9}']), - 114, (['Butadien', 'p_{0,9}'], ['Butadien', 'p_{0,9}']), - 115, (['p_{0,1}', 'p_{0,9}'], ['p_{0,1}', 'p_{0,9}']), - 116, (['p_{0,10}', 'p_{0,10}'], ['p_{0,10}', 'p_{0,10}']), - 117, (['p_{0,2}', 'p_{0,10}'], ['p_{0,2}', 'p_{0,10}']), - 118, (['p_{0,0}', 'p_{0,10}'], ['p_{0,0}', 'p_{0,10}']), - 119, (['Butadien', 'p_{0,10}'], ['Butadien', 'p_{0,10}']), - 120, (['p_{0,1}', 'p_{0,10}'], ['p_{0,1}', 'p_{0,10}']), - 121, (['p_{0,0}', 'p_{0,4}'], ['p_{0,13}']), - 123, (['p_{0,0}', 'p_{0,4}'], ['p_{0,16}']), - 125, (['Butadien', 'p_{0,7}'], ['p_{0,17}']), - 130, (['p_{0,14}'], ['p_{0,0}', 'p_{0,6}']), - 132, (['p_{0,15}'], ['p_{0,0}', 'p_{0,7}']), - 135, (['p_{0,0}', 'p_{0,11}'], ['p_{0,4}']), - 136, (['p_{0,12}', 'p_{0,12}'], ['p_{0,12}', 'p_{0,12}']), - 137, (['p_{0,12}', 'p_{0,13}'], ['p_{0,12}', 'p_{0,13}']), - 138, (['p_{0,12}', 'p_{0,14}'], ['p_{0,12}', 'p_{0,14}']), - 139, (['p_{0,12}', 'p_{0,15}'], ['p_{0,12}', 'p_{0,15}']), - 140, (['p_{0,12}', 'p_{0,16}'], ['p_{0,12}', 'p_{0,16}']), - 141, (['p_{0,8}', 'p_{0,12}'], ['p_{0,8}', 'p_{0,12}']), - 142, (['p_{0,9}', 'p_{0,12}'], ['p_{0,9}', 'p_{0,12}']), - 143, (['Butadien', 'p_{0,12}'], ['Butadien', 'p_{0,12}']), - 144, (['p_{0,10}', 'p_{0,12}'], ['p_{0,10}', 'p_{0,12}']), - 145, (['p_{0,0}', 'p_{0,12}'], ['p_{0,0}', 'p_{0,12}']), - 146, (['p_{0,1}', 'p_{0,12}'], ['p_{0,1}', 'p_{0,12}']), - 147, (['p_{0,2}', 'p_{0,12}'], ['p_{0,2}', 'p_{0,12}']), - 148, (['p_{0,3}', 'p_{0,12}'], ['p_{0,3}', 'p_{0,12}']), - 149, (['p_{0,4}', 'p_{0,12}'], ['p_{0,4}', 'p_{0,12}']), - 150, (['p_{0,5}', 'p_{0,12}'], ['p_{0,5}', 'p_{0,12}']), - 151, (['p_{0,6}', 'p_{0,12}'], ['p_{0,6}', 'p_{0,12}']), - 152, (['p_{0,13}', 'p_{0,13}'], ['p_{0,13}', 'p_{0,13}']), - 153, (['Butadien', 'p_{0,13}'], ['p_{0,1}', 'p_{0,6}']), - 154, (['Butadien', 'p_{0,13}'], ['Butadien', 'p_{0,13}']), - 155, (['p_{0,0}', 'p_{0,13}'], ['Butadien', 'p_{0,6}']), - 156, (['p_{0,1}', 'p_{0,13}'], ['p_{0,1}', 'p_{0,13}']), - 157, (['p_{0,1}', 'p_{0,13}'], ['p_{0,4}', 'p_{0,6}']), - 158, (['p_{0,2}', 'p_{0,13}'], ['p_{0,5}', 'p_{0,6}']), - 159, (['p_{0,4}', 'p_{0,13}'], ['p_{0,4}', 'p_{0,13}']), - 160, (['p_{0,5}', 'p_{0,13}'], ['p_{0,5}', 'p_{0,13}']), - 161, (['p_{0,6}', 'p_{0,13}'], ['p_{0,6}', 'p_{0,13}']), - 162, (['p_{0,13}', 'p_{0,14}'], ['p_{0,13}', 'p_{0,14}']), - 163, (['p_{0,13}', 'p_{0,15}'], ['p_{0,13}', 'p_{0,15}']), - 164, (['p_{0,13}', 'p_{0,16}'], ['p_{0,13}', 'p_{0,16}']), - 165, (['p_{0,8}', 'p_{0,13}'], ['p_{0,8}', 'p_{0,13}']), - 166, (['p_{0,9}', 'p_{0,13}'], ['p_{0,9}', 'p_{0,13}']), - 167, (['p_{0,10}', 'p_{0,13}'], ['p_{0,10}', 'p_{0,13}']), - 168, (['p_{0,0}', 'p_{0,13}'], ['p_{0,0}', 'p_{0,13}']), - 169, (['p_{0,2}', 'p_{0,13}'], ['p_{0,2}', 'p_{0,13}']), - 170, (['p_{0,3}', 'p_{0,13}'], ['p_{0,3}', 'p_{0,13}']), - 171, (['p_{0,14}', 'p_{0,14}'], ['p_{0,14}', 'p_{0,14}']), - 172, (['p_{0,14}', 'p_{0,15}'], ['p_{0,14}', 'p_{0,15}']), - 173, (['p_{0,14}', 'p_{0,16}'], ['p_{0,14}', 'p_{0,16}']), - 174, (['p_{0,8}', 'p_{0,14}'], ['p_{0,8}', 'p_{0,14}']), - 175, (['p_{0,9}', 'p_{0,14}'], ['p_{0,9}', 'p_{0,14}']), - 176, (['Butadien', 'p_{0,14}'], ['Butadien', 'p_{0,14}']), - 177, (['p_{0,10}', 'p_{0,14}'], ['p_{0,10}', 'p_{0,14}']), - 178, (['p_{0,0}', 'p_{0,14}'], ['p_{0,0}', 'p_{0,14}']), - 179, (['p_{0,1}', 'p_{0,14}'], ['p_{0,1}', 'p_{0,14}']), - 180, (['p_{0,2}', 'p_{0,14}'], ['p_{0,2}', 'p_{0,14}']), - 181, (['p_{0,3}', 'p_{0,14}'], ['p_{0,3}', 'p_{0,14}']), - 182, (['p_{0,4}', 'p_{0,14}'], ['p_{0,4}', 'p_{0,14}']), - 183, (['p_{0,5}', 'p_{0,14}'], ['p_{0,5}', 'p_{0,14}']), - 184, (['p_{0,6}', 'p_{0,14}'], ['p_{0,6}', 'p_{0,14}']), - 185, (['p_{0,15}', 'p_{0,15}'], ['p_{0,15}', 'p_{0,15}']), - 186, (['p_{0,15}', 'p_{0,16}'], ['p_{0,15}', 'p_{0,16}']), - 187, (['p_{0,8}', 'p_{0,15}'], ['p_{0,8}', 'p_{0,15}']), - 188, (['p_{0,9}', 'p_{0,15}'], ['p_{0,9}', 'p_{0,15}']), - 189, (['Butadien', 'p_{0,15}'], ['Butadien', 'p_{0,15}']), - 190, (['p_{0,10}', 'p_{0,15}'], ['p_{0,10}', 'p_{0,15}']), - 191, (['p_{0,0}', 'p_{0,15}'], ['p_{0,0}', 'p_{0,15}']), - 192, (['p_{0,1}', 'p_{0,15}'], ['p_{0,1}', 'p_{0,15}']), - 193, (['p_{0,2}', 'p_{0,15}'], ['p_{0,2}', 'p_{0,15}']), - 194, (['p_{0,3}', 'p_{0,15}'], ['p_{0,3}', 'p_{0,15}']), - 195, (['p_{0,4}', 'p_{0,15}'], ['p_{0,4}', 'p_{0,15}']), - 196, (['p_{0,5}', 'p_{0,15}'], ['p_{0,5}', 'p_{0,15}']), - 197, (['p_{0,6}', 'p_{0,15}'], ['p_{0,6}', 'p_{0,15}']), - 198, (['p_{0,16}', 'p_{0,16}'], ['p_{0,16}', 'p_{0,16}']), - 199, (['p_{0,8}', 'p_{0,16}'], ['p_{0,8}', 'p_{0,16}']), - 200, (['p_{0,9}', 'p_{0,16}'], ['p_{0,9}', 'p_{0,16}']), - 201, (['Butadien', 'p_{0,16}'], ['Butadien', 'p_{0,16}']), - 202, (['p_{0,10}', 'p_{0,16}'], ['p_{0,10}', 'p_{0,16}']), - 203, (['p_{0,0}', 'p_{0,16}'], ['p_{0,0}', 'p_{0,16}']), - 204, (['p_{0,1}', 'p_{0,16}'], ['p_{0,1}', 'p_{0,16}']), - 205, (['p_{0,2}', 'p_{0,16}'], ['p_{0,2}', 'p_{0,16}']), - 206, (['p_{0,3}', 'p_{0,16}'], ['p_{0,3}', 'p_{0,16}']), - 207, (['p_{0,4}', 'p_{0,16}'], ['p_{0,4}', 'p_{0,16}']), - 208, (['p_{0,5}', 'p_{0,16}'], ['p_{0,5}', 'p_{0,16}']), - 209, (['p_{0,6}', 'p_{0,16}'], ['p_{0,6}', 'p_{0,16}']), - 211, (['Butadien', 'p_{0,11}'], ['p_{0,18}']), - 8, (['p_{0,1}'], ['p_{0,1}']), - 39, (['p_{0,3}'], ['p_{0,3}']), - 40, (['p_{0,4}'], ['p_{0,4}']), - 44, (['p_{0,5}'], ['p_{0,12}']), - 45, (['p_{0,5}'], ['p_{0,5}']), - 46, (['p_{0,6}'], ['p_{0,6}']), - 47, (['p_{0,8}'], ['p_{0,8}']), - 48, (['p_{0,9}'], ['p_{0,9}']), - 49, (['p_{0,10}'], ['p_{0,10}']), - 126, (['p_{0,11}'], ['p_{0,11}']), - 127, (['p_{0,12}'], ['p_{0,5}']), - 128, (['p_{0,12}'], ['p_{0,12}']), - 129, (['p_{0,13}'], ['p_{0,13}']), - 131, (['p_{0,14}'], ['p_{0,14}']), - 133, (['p_{0,15}'], ['p_{0,15}']), - 134, (['p_{0,16}'], ['p_{0,16}']), - 212, (['p_{0,18}'], ['p_{0,18}']), +HYPERGRAPH = { + 0: (['Butadien'], []), + 1: (['Butadien'], ['Butadien']), + 2: (['p_{0,0}'], []), + 3: (['p_{0,1}'], []), + 4: (['Butadien', 'Butadien'], ['p_{0,0}', 'p_{0,1}']), + 5: (['Butadien', 'Butadien'], ['Butadien', 'Butadien']), + 6: (['p_{0,2}'], []), + 7: (['Butadien', 'Butadien'], ['p_{0,2}']), + 8: (['p_{0,1}'], ['p_{0,1}']), + 9: (['p_{0,0}', 'p_{0,0}'], ['p_{0,0}', 'p_{0,0}']), + 10: (['p_{0,0}', 'p_{0,1}'], ['Butadien', 'Butadien']), + 11: (['p_{0,0}', 'p_{0,1}'], ['p_{0,0}', 'p_{0,1}']), + 12: (['p_{0,3}'], []), + 13: (['p_{0,0}', 'p_{0,2}'], ['p_{0,3}']), + 14: (['p_{0,0}', 'p_{0,2}'], ['p_{0,0}', 'p_{0,2}']), + 15: (['Butadien', 'p_{0,0}'], ['Butadien', 'p_{0,0}']), + 16: (['p_{0,1}', 'p_{0,1}'], ['p_{0,1}', 'p_{0,1}']), + 17: (['p_{0,4}'], []), + 18: (['p_{0,1}', 'p_{0,1}'], ['Butadien', 'p_{0,4}']), + 19: (['p_{0,5}'], []), + 20: (['p_{0,1}', 'p_{0,2}'], ['Butadien', 'p_{0,5}']), + 21: (['Butadien', 'p_{0,1}'], ['Butadien', 'p_{0,1}']), + 22: (['p_{0,1}', 'p_{0,2}'], ['p_{0,1}', 'p_{0,2}']), + 23: (['Butadien', 'p_{0,1}'], ['p_{0,0}', 'p_{0,4}']), + 24: (['p_{0,2}', 'p_{0,2}'], ['p_{0,2}', 'p_{0,2}']), + 25: (['Butadien', 'p_{0,2}'], ['Butadien', 'p_{0,2}']), + 26: (['Butadien', 'p_{0,2}'], ['p_{0,0}', 'p_{0,5}']), + 27: (['p_{0,6}'], []), + 28: (['p_{0,0}', 'p_{0,1}'], ['p_{0,6}']), + 29: (['p_{0,7}'], []), + 30: (['Butadien', 'p_{0,0}'], ['p_{0,7}']), + 31: (['p_{0,8}'], []), + 32: (['Butadien', 'p_{0,1}'], ['p_{0,8}']), + 33: (['Butadien', 'p_{0,1}'], ['p_{0,5}']), + 34: (['p_{0,9}'], []), + 35: (['Butadien', 'p_{0,1}'], ['p_{0,9}']), + 36: (['p_{0,10}'], []), + 37: (['Butadien', 'p_{0,1}'], ['p_{0,10}']), + 38: (['p_{0,3}'], ['p_{0,0}', 'p_{0,2}']), + 39: (['p_{0,3}'], ['p_{0,3}']), + 40: (['p_{0,4}'], ['p_{0,4}']), + 41: (['p_{0,11}'], []), + 42: (['p_{0,4}'], ['p_{0,0}', 'p_{0,11}']), + 43: (['p_{0,12}'], []), + 44: (['p_{0,5}'], ['p_{0,12}']), + 45: (['p_{0,5}'], ['p_{0,5}']), + 46: (['p_{0,6}'], ['p_{0,6}']), + 47: (['p_{0,8}'], ['p_{0,8}']), + 48: (['p_{0,9}'], ['p_{0,9}']), + 49: (['p_{0,10}'], ['p_{0,10}']), + 50: (['p_{0,3}', 'p_{0,3}'], ['p_{0,3}', 'p_{0,3}']), + 51: (['p_{0,3}', 'p_{0,4}'], ['p_{0,3}', 'p_{0,4}']), + 52: (['p_{0,3}', 'p_{0,5}'], ['p_{0,3}', 'p_{0,5}']), + 53: (['p_{0,3}', 'p_{0,6}'], ['p_{0,3}', 'p_{0,6}']), + 54: (['p_{0,3}', 'p_{0,8}'], ['p_{0,3}', 'p_{0,8}']), + 55: (['p_{0,3}', 'p_{0,9}'], ['p_{0,3}', 'p_{0,9}']), + 56: (['p_{0,3}', 'p_{0,10}'], ['p_{0,3}', 'p_{0,10}']), + 57: (['p_{0,2}', 'p_{0,3}'], ['p_{0,2}', 'p_{0,3}']), + 58: (['p_{0,0}', 'p_{0,3}'], ['p_{0,0}', 'p_{0,3}']), + 59: (['Butadien', 'p_{0,3}'], ['Butadien', 'p_{0,3}']), + 60: (['p_{0,1}', 'p_{0,3}'], ['p_{0,1}', 'p_{0,3}']), + 61: (['p_{0,4}', 'p_{0,4}'], ['p_{0,4}', 'p_{0,4}']), + 62: (['p_{0,4}', 'p_{0,5}'], ['p_{0,4}', 'p_{0,5}']), + 63: (['p_{0,13}'], []), + 64: (['p_{0,4}', 'p_{0,6}'], ['p_{0,1}', 'p_{0,13}']), + 65: (['p_{0,2}', 'p_{0,4}'], ['p_{0,1}', 'p_{0,5}']), + 66: (['p_{0,0}', 'p_{0,4}'], ['Butadien', 'p_{0,1}']), + 67: (['Butadien', 'p_{0,4}'], ['p_{0,1}', 'p_{0,1}']), + 68: (['Butadien', 'p_{0,4}'], ['Butadien', 'p_{0,4}']), + 69: (['p_{0,1}', 'p_{0,4}'], ['p_{0,1}', 'p_{0,4}']), + 70: (['p_{0,4}', 'p_{0,6}'], ['p_{0,4}', 'p_{0,6}']), + 71: (['p_{0,4}', 'p_{0,8}'], ['p_{0,4}', 'p_{0,8}']), + 72: (['p_{0,4}', 'p_{0,9}'], ['p_{0,4}', 'p_{0,9}']), + 73: (['p_{0,4}', 'p_{0,10}'], ['p_{0,4}', 'p_{0,10}']), + 74: (['p_{0,2}', 'p_{0,4}'], ['p_{0,2}', 'p_{0,4}']), + 75: (['p_{0,0}', 'p_{0,4}'], ['p_{0,0}', 'p_{0,4}']), + 76: (['p_{0,5}', 'p_{0,5}'], ['p_{0,5}', 'p_{0,5}']), + 77: (['p_{0,5}', 'p_{0,6}'], ['p_{0,2}', 'p_{0,13}']), + 78: (['p_{0,2}', 'p_{0,5}'], ['p_{0,2}', 'p_{0,5}']), + 79: (['p_{0,0}', 'p_{0,5}'], ['Butadien', 'p_{0,2}']), + 80: (['Butadien', 'p_{0,5}'], ['p_{0,1}', 'p_{0,2}']), + 81: (['Butadien', 'p_{0,5}'], ['Butadien', 'p_{0,5}']), + 82: (['p_{0,1}', 'p_{0,5}'], ['p_{0,1}', 'p_{0,5}']), + 83: (['p_{0,1}', 'p_{0,5}'], ['p_{0,2}', 'p_{0,4}']), + 84: (['p_{0,5}', 'p_{0,6}'], ['p_{0,5}', 'p_{0,6}']), + 85: (['p_{0,5}', 'p_{0,8}'], ['p_{0,5}', 'p_{0,8}']), + 86: (['p_{0,5}', 'p_{0,9}'], ['p_{0,5}', 'p_{0,9}']), + 87: (['p_{0,5}', 'p_{0,10}'], ['p_{0,5}', 'p_{0,10}']), + 88: (['p_{0,0}', 'p_{0,5}'], ['p_{0,0}', 'p_{0,5}']), + 89: (['p_{0,6}', 'p_{0,6}'], ['p_{0,6}', 'p_{0,6}']), + 90: (['p_{0,6}', 'p_{0,8}'], ['p_{0,6}', 'p_{0,8}']), + 91: (['p_{0,6}', 'p_{0,9}'], ['p_{0,6}', 'p_{0,9}']), + 92: (['p_{0,6}', 'p_{0,10}'], ['p_{0,6}', 'p_{0,10}']), + 93: (['p_{0,2}', 'p_{0,6}'], ['p_{0,2}', 'p_{0,6}']), + 94: (['p_{0,0}', 'p_{0,6}'], ['p_{0,0}', 'p_{0,6}']), + 95: (['Butadien', 'p_{0,6}'], ['Butadien', 'p_{0,6}']), + 96: (['Butadien', 'p_{0,6}'], ['p_{0,0}', 'p_{0,13}']), + 97: (['p_{0,1}', 'p_{0,6}'], ['Butadien', 'p_{0,13}']), + 98: (['p_{0,1}', 'p_{0,6}'], ['p_{0,1}', 'p_{0,6}']), + 99: (['p_{0,14}'], []), + 100: (['p_{0,0}', 'p_{0,6}'], ['p_{0,14}']), + 101: (['p_{0,15}'], []), + 102: (['p_{0,0}', 'p_{0,7}'], ['p_{0,15}']), + 103: (['p_{0,8}', 'p_{0,8}'], ['p_{0,8}', 'p_{0,8}']), + 104: (['p_{0,8}', 'p_{0,9}'], ['p_{0,8}', 'p_{0,9}']), + 105: (['p_{0,8}', 'p_{0,10}'], ['p_{0,8}', 'p_{0,10}']), + 106: (['p_{0,2}', 'p_{0,8}'], ['p_{0,2}', 'p_{0,8}']), + 107: (['p_{0,0}', 'p_{0,8}'], ['p_{0,0}', 'p_{0,8}']), + 108: (['Butadien', 'p_{0,8}'], ['Butadien', 'p_{0,8}']), + 109: (['p_{0,1}', 'p_{0,8}'], ['p_{0,1}', 'p_{0,8}']), + 110: (['p_{0,9}', 'p_{0,9}'], ['p_{0,9}', 'p_{0,9}']), + 111: (['p_{0,9}', 'p_{0,10}'], ['p_{0,9}', 'p_{0,10}']), + 112: (['p_{0,2}', 'p_{0,9}'], ['p_{0,2}', 'p_{0,9}']), + 113: (['p_{0,0}', 'p_{0,9}'], ['p_{0,0}', 'p_{0,9}']), + 114: (['Butadien', 'p_{0,9}'], ['Butadien', 'p_{0,9}']), + 115: (['p_{0,1}', 'p_{0,9}'], ['p_{0,1}', 'p_{0,9}']), + 116: (['p_{0,10}', 'p_{0,10}'], ['p_{0,10}', 'p_{0,10}']), + 117: (['p_{0,2}', 'p_{0,10}'], ['p_{0,2}', 'p_{0,10}']), + 118: (['p_{0,0}', 'p_{0,10}'], ['p_{0,0}', 'p_{0,10}']), + 119: (['Butadien', 'p_{0,10}'], ['Butadien', 'p_{0,10}']), + 120: (['p_{0,1}', 'p_{0,10}'], ['p_{0,1}', 'p_{0,10}']), + 121: (['p_{0,0}', 'p_{0,4}'], ['p_{0,13}']), + 122: (['p_{0,16}'], []), + 123: (['p_{0,0}', 'p_{0,4}'], ['p_{0,16}']), + 124: (['p_{0,17}'], []), + 125: (['Butadien', 'p_{0,7}'], ['p_{0,17}']), + 126: (['p_{0,11}'], ['p_{0,11}']), + 127: (['p_{0,12}'], ['p_{0,5}']), + 128: (['p_{0,12}'], ['p_{0,12}']), + 129: (['p_{0,13}'], ['p_{0,13}']), + 130: (['p_{0,14}'], ['p_{0,0}', 'p_{0,6}']), + 131: (['p_{0,14}'], ['p_{0,14}']), + 132: (['p_{0,15}'], ['p_{0,0}', 'p_{0,7}']), + 133: (['p_{0,15}'], ['p_{0,15}']), + 134: (['p_{0,16}'], ['p_{0,16}']), + 135: (['p_{0,0}', 'p_{0,11}'], ['p_{0,4}']), + 136: (['p_{0,12}', 'p_{0,12}'], ['p_{0,12}', 'p_{0,12}']), + 137: (['p_{0,12}', 'p_{0,13}'], ['p_{0,12}', 'p_{0,13}']), + 138: (['p_{0,12}', 'p_{0,14}'], ['p_{0,12}', 'p_{0,14}']), + 139: (['p_{0,12}', 'p_{0,15}'], ['p_{0,12}', 'p_{0,15}']), + 140: (['p_{0,12}', 'p_{0,16}'], ['p_{0,12}', 'p_{0,16}']), + 141: (['p_{0,8}', 'p_{0,12}'], ['p_{0,8}', 'p_{0,12}']), + 142: (['p_{0,9}', 'p_{0,12}'], ['p_{0,9}', 'p_{0,12}']), + 143: (['Butadien', 'p_{0,12}'], ['Butadien', 'p_{0,12}']), + 144: (['p_{0,10}', 'p_{0,12}'], ['p_{0,10}', 'p_{0,12}']), + 145: (['p_{0,0}', 'p_{0,12}'], ['p_{0,0}', 'p_{0,12}']), + 146: (['p_{0,1}', 'p_{0,12}'], ['p_{0,1}', 'p_{0,12}']), + 147: (['p_{0,2}', 'p_{0,12}'], ['p_{0,2}', 'p_{0,12}']), + 148: (['p_{0,3}', 'p_{0,12}'], ['p_{0,3}', 'p_{0,12}']), + 149: (['p_{0,4}', 'p_{0,12}'], ['p_{0,4}', 'p_{0,12}']), + 150: (['p_{0,5}', 'p_{0,12}'], ['p_{0,5}', 'p_{0,12}']), + 151: (['p_{0,6}', 'p_{0,12}'], ['p_{0,6}', 'p_{0,12}']), + 152: (['p_{0,13}', 'p_{0,13}'], ['p_{0,13}', 'p_{0,13}']), + 153: (['Butadien', 'p_{0,13}'], ['p_{0,1}', 'p_{0,6}']), + 154: (['Butadien', 'p_{0,13}'], ['Butadien', 'p_{0,13}']), + 155: (['p_{0,0}', 'p_{0,13}'], ['Butadien', 'p_{0,6}']), + 156: (['p_{0,1}', 'p_{0,13}'], ['p_{0,1}', 'p_{0,13}']), + 157: (['p_{0,1}', 'p_{0,13}'], ['p_{0,4}', 'p_{0,6}']), + 158: (['p_{0,2}', 'p_{0,13}'], ['p_{0,5}', 'p_{0,6}']), + 159: (['p_{0,4}', 'p_{0,13}'], ['p_{0,4}', 'p_{0,13}']), + 160: (['p_{0,5}', 'p_{0,13}'], ['p_{0,5}', 'p_{0,13}']), + 161: (['p_{0,6}', 'p_{0,13}'], ['p_{0,6}', 'p_{0,13}']), + 162: (['p_{0,13}', 'p_{0,14}'], ['p_{0,13}', 'p_{0,14}']), + 163: (['p_{0,13}', 'p_{0,15}'], ['p_{0,13}', 'p_{0,15}']), + 164: (['p_{0,13}', 'p_{0,16}'], ['p_{0,13}', 'p_{0,16}']), + 165: (['p_{0,8}', 'p_{0,13}'], ['p_{0,8}', 'p_{0,13}']), + 166: (['p_{0,9}', 'p_{0,13}'], ['p_{0,9}', 'p_{0,13}']), + 167: (['p_{0,10}', 'p_{0,13}'], ['p_{0,10}', 'p_{0,13}']), + 168: (['p_{0,0}', 'p_{0,13}'], ['p_{0,0}', 'p_{0,13}']), + 169: (['p_{0,2}', 'p_{0,13}'], ['p_{0,2}', 'p_{0,13}']), + 170: (['p_{0,3}', 'p_{0,13}'], ['p_{0,3}', 'p_{0,13}']), + 171: (['p_{0,14}', 'p_{0,14}'], ['p_{0,14}', 'p_{0,14}']), + 172: (['p_{0,14}', 'p_{0,15}'], ['p_{0,14}', 'p_{0,15}']), + 173: (['p_{0,14}', 'p_{0,16}'], ['p_{0,14}', 'p_{0,16}']), + 174: (['p_{0,8}', 'p_{0,14}'], ['p_{0,8}', 'p_{0,14}']), + 175: (['p_{0,9}', 'p_{0,14}'], ['p_{0,9}', 'p_{0,14}']), + 176: (['Butadien', 'p_{0,14}'], ['Butadien', 'p_{0,14}']), + 177: (['p_{0,10}', 'p_{0,14}'], ['p_{0,10}', 'p_{0,14}']), + 178: (['p_{0,0}', 'p_{0,14}'], ['p_{0,0}', 'p_{0,14}']), + 179: (['p_{0,1}', 'p_{0,14}'], ['p_{0,1}', 'p_{0,14}']), + 180: (['p_{0,2}', 'p_{0,14}'], ['p_{0,2}', 'p_{0,14}']), + 181: (['p_{0,3}', 'p_{0,14}'], ['p_{0,3}', 'p_{0,14}']), + 182: (['p_{0,4}', 'p_{0,14}'], ['p_{0,4}', 'p_{0,14}']), + 183: (['p_{0,5}', 'p_{0,14}'], ['p_{0,5}', 'p_{0,14}']), + 184: (['p_{0,6}', 'p_{0,14}'], ['p_{0,6}', 'p_{0,14}']), + 185: (['p_{0,15}', 'p_{0,15}'], ['p_{0,15}', 'p_{0,15}']), + 186: (['p_{0,15}', 'p_{0,16}'], ['p_{0,15}', 'p_{0,16}']), + 187: (['p_{0,8}', 'p_{0,15}'], ['p_{0,8}', 'p_{0,15}']), + 188: (['p_{0,9}', 'p_{0,15}'], ['p_{0,9}', 'p_{0,15}']), + 189: (['Butadien', 'p_{0,15}'], ['Butadien', 'p_{0,15}']), + 190: (['p_{0,10}', 'p_{0,15}'], ['p_{0,10}', 'p_{0,15}']), + 191: (['p_{0,0}', 'p_{0,15}'], ['p_{0,0}', 'p_{0,15}']), + 192: (['p_{0,1}', 'p_{0,15}'], ['p_{0,1}', 'p_{0,15}']), + 193: (['p_{0,2}', 'p_{0,15}'], ['p_{0,2}', 'p_{0,15}']), + 194: (['p_{0,3}', 'p_{0,15}'], ['p_{0,3}', 'p_{0,15}']), + 195: (['p_{0,4}', 'p_{0,15}'], ['p_{0,4}', 'p_{0,15}']), + 196: (['p_{0,5}', 'p_{0,15}'], ['p_{0,5}', 'p_{0,15}']), + 197: (['p_{0,6}', 'p_{0,15}'], ['p_{0,6}', 'p_{0,15}']), + 198: (['p_{0,16}', 'p_{0,16}'], ['p_{0,16}', 'p_{0,16}']), + 199: (['p_{0,8}', 'p_{0,16}'], ['p_{0,8}', 'p_{0,16}']), + 200: (['p_{0,9}', 'p_{0,16}'], ['p_{0,9}', 'p_{0,16}']), + 201: (['Butadien', 'p_{0,16}'], ['Butadien', 'p_{0,16}']), + 202: (['p_{0,10}', 'p_{0,16}'], ['p_{0,10}', 'p_{0,16}']), + 203: (['p_{0,0}', 'p_{0,16}'], ['p_{0,0}', 'p_{0,16}']), + 204: (['p_{0,1}', 'p_{0,16}'], ['p_{0,1}', 'p_{0,16}']), + 205: (['p_{0,2}', 'p_{0,16}'], ['p_{0,2}', 'p_{0,16}']), + 206: (['p_{0,3}', 'p_{0,16}'], ['p_{0,3}', 'p_{0,16}']), + 207: (['p_{0,4}', 'p_{0,16}'], ['p_{0,4}', 'p_{0,16}']), + 208: (['p_{0,5}', 'p_{0,16}'], ['p_{0,5}', 'p_{0,16}']), + 209: (['p_{0,6}', 'p_{0,16}'], ['p_{0,6}', 'p_{0,16}']), + 210: (['p_{0,18}'], []), + 211: (['Butadien', 'p_{0,11}'], ['p_{0,18}']), + 212: (['p_{0,18}'], ['p_{0,18}']), + 213: ([], ['Butadien']), } VERTICES = ['Butadien', 'p_{0,0}', 'p_{0,1}', 'p_{0,2}', 'p_{0,3}', 'p_{0,4}', 'p_{0,5}', 'p_{0,6}', 'p_{0,7}', 'p_{0,8}', 'p_{0,9}', 'p_{0,10}', 'p_{0,11}', 'p_{0,12}', 'p_{0,13}', 'p_{0,14}', 'p_{0,15}', 'p_{0,16}', 'p_{0,17}', 'p_{0,18}'] @@ -206,7 +228,8 @@ NMR3 = [0.0, 0.32, 0.0, 0.0, 0.0, 0.0, 0.05, 0.0, 0.0, 0.02, 0.0, 0.29, 0.95, 0. VERTICESSMILES = ['C=CC=C', 'C=C', 'C=CC=CC=C', 'C1CCC(C=C)CC=1', 'C(CCC(C=C)CC=C)=C', 'C=CC=CC=CC=C', 'C1CCC(C=CC=C)CC=1', 'C=CC1C=CCCC1', 'C1CCCCC=1', 'C=CC1CC=CCC1C=C', 'C1CCC(C=C)C(C=C)C=1', 'C(C1CC(C=C)C=CC1)=C', 'C1C=CC=CC=1', 'C(CCC1C=CC=CC1)=C', 'C1C(C=CC=C)CCCC=1', 'C=CC(C=C)CCCC=C', 'C=CCCCCC=C', 'C=CC1C=CC(C=C)CC1', 'C1CC2CCCCC2CC=1', 'C1CC2C=CC=CC2CC=1'] FIXED_FLOWS = { - #1: 1, + 213: 3, + 41: 1, } def build_model(name, hyperedges, vertices, nmrlikelihoods1, nmrlikelihoods2, nmrlikelihoods3, excluded_support=None): @@ -233,7 +256,7 @@ def build_model(name, hyperedges, vertices, nmrlikelihoods1, nmrlikelihoods2, nm en2[e] = quicksum(n2[head] for head in heads) en3[e] = quicksum(n3[head] for head in heads) - print(en1[7]) + print(en1[203]) vertices = set(v for tails, heads in hyperedges.values() for v in tails + heads) @@ -261,15 +284,15 @@ def build_model(name, hyperedges, vertices, nmrlikelihoods1, nmrlikelihoods2, nm #Multiply node value with infow or outflow model.setObjectiveN( - quicksum(n[t_id[0]] * x[e_id] for e_id, (_, t_id) in hyperedges.items() if t_id != []), + quicksum((en1[e_id] + en2[e_id] + en3[e_id]) * x[e_id] for e_id, (_, _) in hyperedges.items()), index = 0, priority = 2, name = "maximize_nmr_similarity", - ) + ) model.setObjectiveN( quicksum(-1 * x[e_id] for e_id in hyperedges), - index=1, + index=3, priority=1, name="minimize_used_hyperedges", ) @@ -294,14 +317,14 @@ def print_solution(title, flow_solution, binary_solution, hyperedges): print(f"Number of used hyperedges: {len(binary_solution)}") def main(): - model, x, b = build_model("HypergraphFlow", HYPEREDGES, VERTICES, NMR1, NMR2, NMR3) + model, x, b = build_model("HypergraphFlow", HYPERGRAPH, VERTICES, NMR1, NMR2, NMR3) model.optimize() if model.status != GRB.Status.OPTIMAL: print("No optimal solution found for the first model.") return optimal_solution = positive_entries(x) optimal_binary_solution = positive_entries(b) - print_solution("Optimal Solution", optimal_solution, optimal_binary_solution, HYPEREDGES) + print_solution("Optimal Solution", optimal_solution, optimal_binary_solution, HYPERGRAPH) """ excluded_support = list(optimal_binary_solution.keys()) second_model, x2, b2 = build_model("SecondBestHypergraphFlow", HYPEREDGES, excluded_support=excluded_support,)