From f120e5831d237988428ba48eaf4121dc9e4634a3 Mon Sep 17 00:00:00 2001 From: kilian Date: Fri, 28 Aug 2026 12:58:14 +0200 Subject: [PATCH] Dateien nach "ILP/butadien" hochladen --- ILP/butadien/butadiensynthesis.py | 398 ++++++++++++++++-------------- 1 file changed, 214 insertions(+), 184 deletions(-) diff --git a/ILP/butadien/butadiensynthesis.py b/ILP/butadien/butadiensynthesis.py index 2473cf0..741f418 100644 --- a/ILP/butadien/butadiensynthesis.py +++ b/ILP/butadien/butadiensynthesis.py @@ -1,183 +1,199 @@ import gurobipy as gp from gurobipy import GRB, Model, quicksum -HYPEREDGES = { - 1: ([], ['Butadien']), - 4: (['Butadien', 'Butadien'], []), - 5: (['Butadien', 'Butadien'], ['Butadien', 'Butadien']), - 7: (['Butadien', 'Butadien'], []), - 9: (['p_{0,0}', 'p_{0,0}'], []), - 10: (['p_{0,0}', 'p_{0,1}'], ['Butadien', 'Butadien']), - 11: (['p_{0,0}', 'p_{0,1}'], []), - 13: (['p_{0,0}', 'p_{0,2}'], []), - 14: (['p_{0,0}', 'p_{0,2}'], []), - 15: (['Butadien', 'p_{0,0}'], ['Butadien']), - 16: (['p_{0,1}', 'p_{0,1}'], []), - 18: (['p_{0,1}', 'p_{0,1}'], ['Butadien']), - 20: (['p_{0,1}', 'p_{0,2}'], ['Butadien']), - 21: (['Butadien', 'p_{0,1}'], ['Butadien']), - 22: (['p_{0,1}', 'p_{0,2}'], []), - 23: (['Butadien', 'p_{0,1}'], []), - 24: (['p_{0,2}', 'p_{0,2}'], []), - 25: (['Butadien', 'p_{0,2}'], ['Butadien']), - 26: (['Butadien', 'p_{0,2}'], []), - 28: (['p_{0,0}', 'p_{0,1}'], []), - 30: (['Butadien', 'p_{0,0}'], []), - 32: (['Butadien', 'p_{0,1}'], []), - 33: (['Butadien', 'p_{0,1}'], []), - 35: (['Butadien', 'p_{0,1}'], []), - 37: (['Butadien', 'p_{0,1}'], []), - 38: (['p_{0,3}'], []), - 42: (['p_{0,4}'], []), - 50: (['p_{0,3}', 'p_{0,3}'], []), - 51: (['p_{0,3}', 'p_{0,4}'], []), - 52: (['p_{0,3}', 'p_{0,5}'], []), - 53: (['p_{0,3}', 'p_{0,6}'], []), - 54: (['p_{0,3}', 'p_{0,8}'], []), - 55: (['p_{0,3}', 'p_{0,9}'], []), - 56: (['p_{0,3}', 'p_{0,10}'], []), - 57: (['p_{0,2}', 'p_{0,3}'], []), - 58: (['p_{0,0}', 'p_{0,3}'], []), - 59: (['Butadien', 'p_{0,3}'], ['Butadien']), - 60: (['p_{0,1}', 'p_{0,3}'], []), - 61: (['p_{0,4}', 'p_{0,4}'], []), - 62: (['p_{0,4}', 'p_{0,5}'], []), - 64: (['p_{0,4}', 'p_{0,6}'], []), - 65: (['p_{0,2}', 'p_{0,4}'], []), - 66: (['p_{0,0}', 'p_{0,4}'], ['Butadien']), - 67: (['Butadien', 'p_{0,4}'], []), - 68: (['Butadien', 'p_{0,4}'], ['Butadien']), - 69: (['p_{0,1}', 'p_{0,4}'], []), - 70: (['p_{0,4}', 'p_{0,6}'], []), - 71: (['p_{0,4}', 'p_{0,8}'], []), - 72: (['p_{0,4}', 'p_{0,9}'], []), - 73: (['p_{0,4}', 'p_{0,10}'], []), - 74: (['p_{0,2}', 'p_{0,4}'], []), - 75: (['p_{0,0}', 'p_{0,4}'], []), - 76: (['p_{0,5}', 'p_{0,5}'], []), - 77: (['p_{0,5}', 'p_{0,6}'], []), - 78: (['p_{0,2}', 'p_{0,5}'], []), - 79: (['p_{0,0}', 'p_{0,5}'], ['Butadien']), - 80: (['Butadien', 'p_{0,5}'], []), - 81: (['Butadien', 'p_{0,5}'], ['Butadien']), - 82: (['p_{0,1}', 'p_{0,5}'], []), - 83: (['p_{0,1}', 'p_{0,5}'], []), - 84: (['p_{0,5}', 'p_{0,6}'], []), - 85: (['p_{0,5}', 'p_{0,8}'], []), - 86: (['p_{0,5}', 'p_{0,9}'], []), - 87: (['p_{0,5}', 'p_{0,10}'], []), - 88: (['p_{0,0}', 'p_{0,5}'], []), - 89: (['p_{0,6}', 'p_{0,6}'], []), - 90: (['p_{0,6}', 'p_{0,8}'], []), - 91: (['p_{0,6}', 'p_{0,9}'], []), - 92: (['p_{0,6}', 'p_{0,10}'], []), - 93: (['p_{0,2}', 'p_{0,6}'], []), - 94: (['p_{0,0}', 'p_{0,6}'], []), - 95: (['Butadien', 'p_{0,6}'], ['Butadien']), - 96: (['Butadien', 'p_{0,6}'], []), - 97: (['p_{0,1}', 'p_{0,6}'], ['Butadien']), - 98: (['p_{0,1}', 'p_{0,6}'], []), - 100: (['p_{0,0}', 'p_{0,6}'], []), - 102: (['p_{0,0}', 'p_{0,7}'], []), - 103: (['p_{0,8}', 'p_{0,8}'], []), - 104: (['p_{0,8}', 'p_{0,9}'], []), - 105: (['p_{0,8}', 'p_{0,10}'], []), - 106: (['p_{0,2}', 'p_{0,8}'], []), - 107: (['p_{0,0}', 'p_{0,8}'], []), - 108: (['Butadien', 'p_{0,8}'], ['Butadien']), - 109: (['p_{0,1}', 'p_{0,8}'], []), - 110: (['p_{0,9}', 'p_{0,9}'], []), - 111: (['p_{0,9}', 'p_{0,10}'], []), - 112: (['p_{0,2}', 'p_{0,9}'], []), - 113: (['p_{0,0}', 'p_{0,9}'], []), - 114: (['Butadien', 'p_{0,9}'], ['Butadien']), - 115: (['p_{0,1}', 'p_{0,9}'], []), - 116: (['p_{0,10}', 'p_{0,10}'], []), - 117: (['p_{0,2}', 'p_{0,10}'], []), - 118: (['p_{0,0}', 'p_{0,10}'], []), - 119: (['Butadien', 'p_{0,10}'], ['Butadien']), - 120: (['p_{0,1}', 'p_{0,10}'], []), - 121: (['p_{0,0}', 'p_{0,4}'], []), - 123: (['p_{0,0}', 'p_{0,4}'], []), - 125: (['Butadien', 'p_{0,7}'], []), - 130: (['p_{0,14}'], []), - 132: (['p_{0,15}'], []), - 135: (['p_{0,0}', 'p_{0,11}'], []), - 136: (['p_{0,12}', 'p_{0,12}'], []), - 137: (['p_{0,12}', 'p_{0,13}'], []), - 138: (['p_{0,12}', 'p_{0,14}'], []), - 139: (['p_{0,12}', 'p_{0,15}'], []), - 140: (['p_{0,12}', 'p_{0,16}'], []), - 141: (['p_{0,8}', 'p_{0,12}'], []), - 142: (['p_{0,9}', 'p_{0,12}'], []), - 143: (['Butadien', 'p_{0,12}'], ['Butadien']), - 144: (['p_{0,10}', 'p_{0,12}'], []), - 145: (['p_{0,0}', 'p_{0,12}'], []), - 146: (['p_{0,1}', 'p_{0,12}'], []), - 147: (['p_{0,2}', 'p_{0,12}'], []), - 148: (['p_{0,3}', 'p_{0,12}'], []), - 149: (['p_{0,4}', 'p_{0,12}'], []), - 150: (['p_{0,5}', 'p_{0,12}'], []), - 151: (['p_{0,6}', 'p_{0,12}'], []), - 152: (['p_{0,13}', 'p_{0,13}'], []), - 153: (['Butadien', 'p_{0,13}'], []), - 154: (['Butadien', 'p_{0,13}'], ['Butadien']), - 155: (['p_{0,0}', 'p_{0,13}'], ['Butadien']), - 156: (['p_{0,1}', 'p_{0,13}'], []), - 157: (['p_{0,1}', 'p_{0,13}'], []), - 158: (['p_{0,2}', 'p_{0,13}'], []), - 159: (['p_{0,4}', 'p_{0,13}'], []), - 160: (['p_{0,5}', 'p_{0,13}'], []), - 161: (['p_{0,6}', 'p_{0,13}'], []), - 162: (['p_{0,13}', 'p_{0,14}'], []), - 163: (['p_{0,13}', 'p_{0,15}'], []), - 164: (['p_{0,13}', 'p_{0,16}'], []), - 165: (['p_{0,8}', 'p_{0,13}'], []), - 166: (['p_{0,9}', 'p_{0,13}'], []), - 167: (['p_{0,10}', 'p_{0,13}'], []), - 168: (['p_{0,0}', 'p_{0,13}'], []), - 169: (['p_{0,2}', 'p_{0,13}'], []), - 170: (['p_{0,3}', 'p_{0,13}'], []), - 171: (['p_{0,14}', 'p_{0,14}'], []), - 172: (['p_{0,14}', 'p_{0,15}'], []), - 173: (['p_{0,14}', 'p_{0,16}'], []), - 174: (['p_{0,8}', 'p_{0,14}'], []), - 175: (['p_{0,9}', 'p_{0,14}'], []), - 176: (['Butadien', 'p_{0,14}'], ['Butadien']), - 177: (['p_{0,10}', 'p_{0,14}'], []), - 178: (['p_{0,0}', 'p_{0,14}'], []), - 179: (['p_{0,1}', 'p_{0,14}'], []), - 180: (['p_{0,2}', 'p_{0,14}'], []), - 181: (['p_{0,3}', 'p_{0,14}'], []), - 182: (['p_{0,4}', 'p_{0,14}'], []), - 183: (['p_{0,5}', 'p_{0,14}'], []), - 184: (['p_{0,6}', 'p_{0,14}'], []), - 185: (['p_{0,15}', 'p_{0,15}'], []), - 186: (['p_{0,15}', 'p_{0,16}'], []), - 187: (['p_{0,8}', 'p_{0,15}'], []), - 188: (['p_{0,9}', 'p_{0,15}'], []), - 189: (['Butadien', 'p_{0,15}'], ['Butadien']), - 190: (['p_{0,10}', 'p_{0,15}'], []), - 191: (['p_{0,0}', 'p_{0,15}'], []), - 192: (['p_{0,1}', 'p_{0,15}'], []), - 193: (['p_{0,2}', 'p_{0,15}'], []), - 194: (['p_{0,3}', 'p_{0,15}'], []), - 195: (['p_{0,4}', 'p_{0,15}'], []), - 196: (['p_{0,5}', 'p_{0,15}'], []), - 197: (['p_{0,6}', 'p_{0,15}'], []), - 198: (['p_{0,16}', 'p_{0,16}'], []), - 199: (['p_{0,8}', 'p_{0,16}'], []), - 200: (['p_{0,9}', 'p_{0,16}'], []), - 201: (['Butadien', 'p_{0,16}'], ['Butadien']), - 202: (['p_{0,10}', 'p_{0,16}'], []), - 203: (['p_{0,0}', 'p_{0,16}'], []), - 204: (['p_{0,1}', 'p_{0,16}'], []), - 205: (['p_{0,2}', 'p_{0,16}'], []), - 206: (['p_{0,3}', 'p_{0,16}'], []), - 207: (['p_{0,4}', 'p_{0,16}'], []), - 208: (['p_{0,5}', 'p_{0,16}'], []), - 209: (['p_{0,6}', 'p_{0,16}'], []), - 211: (['Butadien', 'p_{0,11}'], []), +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}']), } 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}'] @@ -193,17 +209,31 @@ FIXED_FLOWS = { #1: 1, } -def build_model(name, hyperedges, vertices, nmrlikelihoods, excluded_support=None): +def build_model(name, hyperedges, vertices, nmrlikelihoods1, nmrlikelihoods2, nmrlikelihoods3, excluded_support=None): model = Model(name) x = {e_id: model.addVar(vtype=GRB.INTEGER, lb = 0, name = f"x_{e_id}") for e_id in hyperedges} b = {e_id: model.addVar(vtype=GRB.BINARY, name = f"b_{e_id}") for e_id in hyperedges} - n1 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 2.0, name = "nmr1") - n2 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 2.0, name = "nmr2") - n3 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 2.0, name = "nmr3") + n1 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 1.0, name = "nmr1") + n2 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 1.0, name = "nmr2") + n3 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 1.0, name = "nmr3") + en1 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 2.0, name = "edgenmr1") + en2 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 2.0, name = "edgenmr2") + en3 = model.addVars(vertices, vtype=GRB.CONTINUOUS, lb = 0.0, ub = 2.0, name = "edgenmr3") - for v, nmr in zip(vertices, nmrlikelihoods): - n[v] = nmr + #Assigns every Molecule the likelihood compared to the three different reference spectra + for v, nmr1, nmr2, nmr3 in zip(vertices, nmrlikelihoods1, nmrlikelihoods2, nmrlikelihoods3): + n1[v] = nmr1 + n2[v] = nmr2 + n3[v] = nmr3 + + #Assigns the edges a likelihood based on the products + for e, (_, heads) in hyperedges.items(): + en1[e] = quicksum(n1[head] for head in heads) + en2[e] = quicksum(n2[head] for head in heads) + en3[e] = quicksum(n3[head] for head in heads) + + print(en1[7]) vertices = set(v for tails, heads in hyperedges.values() for v in tails + heads) @@ -264,7 +294,7 @@ 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, NMRLIKELYHOODS) + model, x, b = build_model("HypergraphFlow", HYPEREDGES, VERTICES, NMR1, NMR2, NMR3) model.optimize() if model.status != GRB.Status.OPTIMAL: print("No optimal solution found for the first model.")