Dateien nach "ILP/butadien" hochladen

This commit is contained in:
2026-08-28 12:58:14 +02:00
parent 482c067501
commit f120e5831d
+214 -184
View File
@@ -1,183 +1,199 @@
import gurobipy as gp import gurobipy as gp
from gurobipy import GRB, Model, quicksum from gurobipy import GRB, Model, quicksum
HYPEREDGES = { HYPERGRAPH = { 1, (['Butadien'], ['Butadien']),
1: ([], ['Butadien']), 4, (['Butadien', 'Butadien'], ['p_{0,0}', 'p_{0,1}']),
4: (['Butadien', 'Butadien'], []), 5, (['Butadien', 'Butadien'], ['Butadien', 'Butadien']),
5: (['Butadien', 'Butadien'], ['Butadien', 'Butadien']), 7, (['Butadien', 'Butadien'], ['p_{0,2}']),
7: (['Butadien', 'Butadien'], []), 9, (['p_{0,0}', 'p_{0,0}'], ['p_{0,0}', 'p_{0,0}']),
9: (['p_{0,0}', 'p_{0,0}'], []), 10, (['p_{0,0}', 'p_{0,1}'], ['Butadien', 'Butadien']),
10: (['p_{0,0}', 'p_{0,1}'], ['Butadien', 'Butadien']), 11, (['p_{0,0}', 'p_{0,1}'], ['p_{0,0}', 'p_{0,1}']),
11: (['p_{0,0}', 'p_{0,1}'], []), 13, (['p_{0,0}', 'p_{0,2}'], ['p_{0,3}']),
13: (['p_{0,0}', 'p_{0,2}'], []), 14, (['p_{0,0}', 'p_{0,2}'], ['p_{0,0}', 'p_{0,2}']),
14: (['p_{0,0}', 'p_{0,2}'], []), 15, (['Butadien', 'p_{0,0}'], ['Butadien', 'p_{0,0}']),
15: (['Butadien', 'p_{0,0}'], ['Butadien']), 16, (['p_{0,1}', 'p_{0,1}'], ['p_{0,1}', 'p_{0,1}']),
16: (['p_{0,1}', 'p_{0,1}'], []), 18, (['p_{0,1}', 'p_{0,1}'], ['Butadien', 'p_{0,4}']),
18: (['p_{0,1}', 'p_{0,1}'], ['Butadien']), 20, (['p_{0,1}', 'p_{0,2}'], ['Butadien', 'p_{0,5}']),
20: (['p_{0,1}', 'p_{0,2}'], ['Butadien']), 21, (['Butadien', 'p_{0,1}'], ['Butadien', 'p_{0,1}']),
21: (['Butadien', 'p_{0,1}'], ['Butadien']), 22, (['p_{0,1}', 'p_{0,2}'], ['p_{0,1}', 'p_{0,2}']),
22: (['p_{0,1}', 'p_{0,2}'], []), 23, (['Butadien', 'p_{0,1}'], ['p_{0,0}', 'p_{0,4}']),
23: (['Butadien', 'p_{0,1}'], []), 24, (['p_{0,2}', 'p_{0,2}'], ['p_{0,2}', 'p_{0,2}']),
24: (['p_{0,2}', 'p_{0,2}'], []), 25, (['Butadien', 'p_{0,2}'], ['Butadien', 'p_{0,2}']),
25: (['Butadien', 'p_{0,2}'], ['Butadien']), 26, (['Butadien', 'p_{0,2}'], ['p_{0,0}', 'p_{0,5}']),
26: (['Butadien', 'p_{0,2}'], []), 28, (['p_{0,0}', 'p_{0,1}'], ['p_{0,6}']),
28: (['p_{0,0}', 'p_{0,1}'], []), 30, (['Butadien', 'p_{0,0}'], ['p_{0,7}']),
30: (['Butadien', 'p_{0,0}'], []), 32, (['Butadien', 'p_{0,1}'], ['p_{0,8}']),
32: (['Butadien', 'p_{0,1}'], []), 33, (['Butadien', 'p_{0,1}'], ['p_{0,5}']),
33: (['Butadien', 'p_{0,1}'], []), 35, (['Butadien', 'p_{0,1}'], ['p_{0,9}']),
35: (['Butadien', 'p_{0,1}'], []), 37, (['Butadien', 'p_{0,1}'], ['p_{0,10}']),
37: (['Butadien', 'p_{0,1}'], []), 38, (['p_{0,3}'], ['p_{0,0}', 'p_{0,2}']),
38: (['p_{0,3}'], []), 42, (['p_{0,4}'], ['p_{0,0}', 'p_{0,11}']),
42: (['p_{0,4}'], []), 50, (['p_{0,3}', 'p_{0,3}'], ['p_{0,3}', 'p_{0,3}']),
50: (['p_{0,3}', 'p_{0,3}'], []), 51, (['p_{0,3}', 'p_{0,4}'], ['p_{0,3}', 'p_{0,4}']),
51: (['p_{0,3}', 'p_{0,4}'], []), 52, (['p_{0,3}', 'p_{0,5}'], ['p_{0,3}', 'p_{0,5}']),
52: (['p_{0,3}', 'p_{0,5}'], []), 53, (['p_{0,3}', 'p_{0,6}'], ['p_{0,3}', 'p_{0,6}']),
53: (['p_{0,3}', 'p_{0,6}'], []), 54, (['p_{0,3}', 'p_{0,8}'], ['p_{0,3}', 'p_{0,8}']),
54: (['p_{0,3}', 'p_{0,8}'], []), 55, (['p_{0,3}', 'p_{0,9}'], ['p_{0,3}', 'p_{0,9}']),
55: (['p_{0,3}', 'p_{0,9}'], []), 56, (['p_{0,3}', 'p_{0,10}'], ['p_{0,3}', 'p_{0,10}']),
56: (['p_{0,3}', 'p_{0,10}'], []), 57, (['p_{0,2}', 'p_{0,3}'], ['p_{0,2}', 'p_{0,3}']),
57: (['p_{0,2}', 'p_{0,3}'], []), 58, (['p_{0,0}', 'p_{0,3}'], ['p_{0,0}', 'p_{0,3}']),
58: (['p_{0,0}', 'p_{0,3}'], []), 59, (['Butadien', 'p_{0,3}'], ['Butadien', 'p_{0,3}']),
59: (['Butadien', 'p_{0,3}'], ['Butadien']), 60, (['p_{0,1}', 'p_{0,3}'], ['p_{0,1}', 'p_{0,3}']),
60: (['p_{0,1}', 'p_{0,3}'], []), 61, (['p_{0,4}', 'p_{0,4}'], ['p_{0,4}', 'p_{0,4}']),
61: (['p_{0,4}', 'p_{0,4}'], []), 62, (['p_{0,4}', 'p_{0,5}'], ['p_{0,4}', 'p_{0,5}']),
62: (['p_{0,4}', 'p_{0,5}'], []), 64, (['p_{0,4}', 'p_{0,6}'], ['p_{0,1}', 'p_{0,13}']),
64: (['p_{0,4}', 'p_{0,6}'], []), 65, (['p_{0,2}', 'p_{0,4}'], ['p_{0,1}', 'p_{0,5}']),
65: (['p_{0,2}', 'p_{0,4}'], []), 66, (['p_{0,0}', 'p_{0,4}'], ['Butadien', 'p_{0,1}']),
66: (['p_{0,0}', 'p_{0,4}'], ['Butadien']), 67, (['Butadien', 'p_{0,4}'], ['p_{0,1}', 'p_{0,1}']),
67: (['Butadien', 'p_{0,4}'], []), 68, (['Butadien', 'p_{0,4}'], ['Butadien', 'p_{0,4}']),
68: (['Butadien', 'p_{0,4}'], ['Butadien']), 69, (['p_{0,1}', 'p_{0,4}'], ['p_{0,1}', 'p_{0,4}']),
69: (['p_{0,1}', 'p_{0,4}'], []), 70, (['p_{0,4}', 'p_{0,6}'], ['p_{0,4}', 'p_{0,6}']),
70: (['p_{0,4}', 'p_{0,6}'], []), 71, (['p_{0,4}', 'p_{0,8}'], ['p_{0,4}', 'p_{0,8}']),
71: (['p_{0,4}', 'p_{0,8}'], []), 72, (['p_{0,4}', 'p_{0,9}'], ['p_{0,4}', 'p_{0,9}']),
72: (['p_{0,4}', 'p_{0,9}'], []), 73, (['p_{0,4}', 'p_{0,10}'], ['p_{0,4}', 'p_{0,10}']),
73: (['p_{0,4}', 'p_{0,10}'], []), 74, (['p_{0,2}', 'p_{0,4}'], ['p_{0,2}', 'p_{0,4}']),
74: (['p_{0,2}', 'p_{0,4}'], []), 75, (['p_{0,0}', 'p_{0,4}'], ['p_{0,0}', 'p_{0,4}']),
75: (['p_{0,0}', 'p_{0,4}'], []), 76, (['p_{0,5}', 'p_{0,5}'], ['p_{0,5}', 'p_{0,5}']),
76: (['p_{0,5}', 'p_{0,5}'], []), 77, (['p_{0,5}', 'p_{0,6}'], ['p_{0,2}', 'p_{0,13}']),
77: (['p_{0,5}', 'p_{0,6}'], []), 78, (['p_{0,2}', 'p_{0,5}'], ['p_{0,2}', 'p_{0,5}']),
78: (['p_{0,2}', 'p_{0,5}'], []), 79, (['p_{0,0}', 'p_{0,5}'], ['Butadien', 'p_{0,2}']),
79: (['p_{0,0}', 'p_{0,5}'], ['Butadien']), 80, (['Butadien', 'p_{0,5}'], ['p_{0,1}', 'p_{0,2}']),
80: (['Butadien', 'p_{0,5}'], []), 81, (['Butadien', 'p_{0,5}'], ['Butadien', 'p_{0,5}']),
81: (['Butadien', 'p_{0,5}'], ['Butadien']), 82, (['p_{0,1}', 'p_{0,5}'], ['p_{0,1}', 'p_{0,5}']),
82: (['p_{0,1}', 'p_{0,5}'], []), 83, (['p_{0,1}', 'p_{0,5}'], ['p_{0,2}', 'p_{0,4}']),
83: (['p_{0,1}', 'p_{0,5}'], []), 84, (['p_{0,5}', 'p_{0,6}'], ['p_{0,5}', 'p_{0,6}']),
84: (['p_{0,5}', 'p_{0,6}'], []), 85, (['p_{0,5}', 'p_{0,8}'], ['p_{0,5}', 'p_{0,8}']),
85: (['p_{0,5}', 'p_{0,8}'], []), 86, (['p_{0,5}', 'p_{0,9}'], ['p_{0,5}', 'p_{0,9}']),
86: (['p_{0,5}', 'p_{0,9}'], []), 87, (['p_{0,5}', 'p_{0,10}'], ['p_{0,5}', 'p_{0,10}']),
87: (['p_{0,5}', 'p_{0,10}'], []), 88, (['p_{0,0}', 'p_{0,5}'], ['p_{0,0}', 'p_{0,5}']),
88: (['p_{0,0}', 'p_{0,5}'], []), 89, (['p_{0,6}', 'p_{0,6}'], ['p_{0,6}', 'p_{0,6}']),
89: (['p_{0,6}', 'p_{0,6}'], []), 90, (['p_{0,6}', 'p_{0,8}'], ['p_{0,6}', 'p_{0,8}']),
90: (['p_{0,6}', 'p_{0,8}'], []), 91, (['p_{0,6}', 'p_{0,9}'], ['p_{0,6}', 'p_{0,9}']),
91: (['p_{0,6}', 'p_{0,9}'], []), 92, (['p_{0,6}', 'p_{0,10}'], ['p_{0,6}', 'p_{0,10}']),
92: (['p_{0,6}', 'p_{0,10}'], []), 93, (['p_{0,2}', 'p_{0,6}'], ['p_{0,2}', 'p_{0,6}']),
93: (['p_{0,2}', 'p_{0,6}'], []), 94, (['p_{0,0}', 'p_{0,6}'], ['p_{0,0}', 'p_{0,6}']),
94: (['p_{0,0}', 'p_{0,6}'], []), 95, (['Butadien', 'p_{0,6}'], ['Butadien', 'p_{0,6}']),
95: (['Butadien', 'p_{0,6}'], ['Butadien']), 96, (['Butadien', 'p_{0,6}'], ['p_{0,0}', 'p_{0,13}']),
96: (['Butadien', 'p_{0,6}'], []), 97, (['p_{0,1}', 'p_{0,6}'], ['Butadien', 'p_{0,13}']),
97: (['p_{0,1}', 'p_{0,6}'], ['Butadien']), 98, (['p_{0,1}', 'p_{0,6}'], ['p_{0,1}', 'p_{0,6}']),
98: (['p_{0,1}', 'p_{0,6}'], []), 100, (['p_{0,0}', 'p_{0,6}'], ['p_{0,14}']),
100: (['p_{0,0}', 'p_{0,6}'], []), 102, (['p_{0,0}', 'p_{0,7}'], ['p_{0,15}']),
102: (['p_{0,0}', 'p_{0,7}'], []), 103, (['p_{0,8}', 'p_{0,8}'], ['p_{0,8}', 'p_{0,8}']),
103: (['p_{0,8}', 'p_{0,8}'], []), 104, (['p_{0,8}', 'p_{0,9}'], ['p_{0,8}', 'p_{0,9}']),
104: (['p_{0,8}', 'p_{0,9}'], []), 105, (['p_{0,8}', 'p_{0,10}'], ['p_{0,8}', 'p_{0,10}']),
105: (['p_{0,8}', 'p_{0,10}'], []), 106, (['p_{0,2}', 'p_{0,8}'], ['p_{0,2}', 'p_{0,8}']),
106: (['p_{0,2}', 'p_{0,8}'], []), 107, (['p_{0,0}', 'p_{0,8}'], ['p_{0,0}', 'p_{0,8}']),
107: (['p_{0,0}', 'p_{0,8}'], []), 108, (['Butadien', 'p_{0,8}'], ['Butadien', 'p_{0,8}']),
108: (['Butadien', 'p_{0,8}'], ['Butadien']), 109, (['p_{0,1}', 'p_{0,8}'], ['p_{0,1}', 'p_{0,8}']),
109: (['p_{0,1}', 'p_{0,8}'], []), 110, (['p_{0,9}', 'p_{0,9}'], ['p_{0,9}', 'p_{0,9}']),
110: (['p_{0,9}', 'p_{0,9}'], []), 111, (['p_{0,9}', 'p_{0,10}'], ['p_{0,9}', 'p_{0,10}']),
111: (['p_{0,9}', 'p_{0,10}'], []), 112, (['p_{0,2}', 'p_{0,9}'], ['p_{0,2}', 'p_{0,9}']),
112: (['p_{0,2}', 'p_{0,9}'], []), 113, (['p_{0,0}', 'p_{0,9}'], ['p_{0,0}', 'p_{0,9}']),
113: (['p_{0,0}', 'p_{0,9}'], []), 114, (['Butadien', 'p_{0,9}'], ['Butadien', 'p_{0,9}']),
114: (['Butadien', 'p_{0,9}'], ['Butadien']), 115, (['p_{0,1}', 'p_{0,9}'], ['p_{0,1}', 'p_{0,9}']),
115: (['p_{0,1}', 'p_{0,9}'], []), 116, (['p_{0,10}', 'p_{0,10}'], ['p_{0,10}', 'p_{0,10}']),
116: (['p_{0,10}', 'p_{0,10}'], []), 117, (['p_{0,2}', 'p_{0,10}'], ['p_{0,2}', 'p_{0,10}']),
117: (['p_{0,2}', 'p_{0,10}'], []), 118, (['p_{0,0}', 'p_{0,10}'], ['p_{0,0}', 'p_{0,10}']),
118: (['p_{0,0}', 'p_{0,10}'], []), 119, (['Butadien', 'p_{0,10}'], ['Butadien', 'p_{0,10}']),
119: (['Butadien', 'p_{0,10}'], ['Butadien']), 120, (['p_{0,1}', 'p_{0,10}'], ['p_{0,1}', 'p_{0,10}']),
120: (['p_{0,1}', 'p_{0,10}'], []), 121, (['p_{0,0}', 'p_{0,4}'], ['p_{0,13}']),
121: (['p_{0,0}', 'p_{0,4}'], []), 123, (['p_{0,0}', 'p_{0,4}'], ['p_{0,16}']),
123: (['p_{0,0}', 'p_{0,4}'], []), 125, (['Butadien', 'p_{0,7}'], ['p_{0,17}']),
125: (['Butadien', 'p_{0,7}'], []), 130, (['p_{0,14}'], ['p_{0,0}', 'p_{0,6}']),
130: (['p_{0,14}'], []), 132, (['p_{0,15}'], ['p_{0,0}', 'p_{0,7}']),
132: (['p_{0,15}'], []), 135, (['p_{0,0}', 'p_{0,11}'], ['p_{0,4}']),
135: (['p_{0,0}', 'p_{0,11}'], []), 136, (['p_{0,12}', 'p_{0,12}'], ['p_{0,12}', 'p_{0,12}']),
136: (['p_{0,12}', 'p_{0,12}'], []), 137, (['p_{0,12}', 'p_{0,13}'], ['p_{0,12}', 'p_{0,13}']),
137: (['p_{0,12}', 'p_{0,13}'], []), 138, (['p_{0,12}', 'p_{0,14}'], ['p_{0,12}', 'p_{0,14}']),
138: (['p_{0,12}', 'p_{0,14}'], []), 139, (['p_{0,12}', 'p_{0,15}'], ['p_{0,12}', 'p_{0,15}']),
139: (['p_{0,12}', 'p_{0,15}'], []), 140, (['p_{0,12}', 'p_{0,16}'], ['p_{0,12}', 'p_{0,16}']),
140: (['p_{0,12}', 'p_{0,16}'], []), 141, (['p_{0,8}', 'p_{0,12}'], ['p_{0,8}', 'p_{0,12}']),
141: (['p_{0,8}', 'p_{0,12}'], []), 142, (['p_{0,9}', 'p_{0,12}'], ['p_{0,9}', 'p_{0,12}']),
142: (['p_{0,9}', 'p_{0,12}'], []), 143, (['Butadien', 'p_{0,12}'], ['Butadien', 'p_{0,12}']),
143: (['Butadien', 'p_{0,12}'], ['Butadien']), 144, (['p_{0,10}', 'p_{0,12}'], ['p_{0,10}', 'p_{0,12}']),
144: (['p_{0,10}', 'p_{0,12}'], []), 145, (['p_{0,0}', 'p_{0,12}'], ['p_{0,0}', 'p_{0,12}']),
145: (['p_{0,0}', 'p_{0,12}'], []), 146, (['p_{0,1}', 'p_{0,12}'], ['p_{0,1}', 'p_{0,12}']),
146: (['p_{0,1}', 'p_{0,12}'], []), 147, (['p_{0,2}', 'p_{0,12}'], ['p_{0,2}', 'p_{0,12}']),
147: (['p_{0,2}', 'p_{0,12}'], []), 148, (['p_{0,3}', 'p_{0,12}'], ['p_{0,3}', 'p_{0,12}']),
148: (['p_{0,3}', 'p_{0,12}'], []), 149, (['p_{0,4}', 'p_{0,12}'], ['p_{0,4}', 'p_{0,12}']),
149: (['p_{0,4}', 'p_{0,12}'], []), 150, (['p_{0,5}', 'p_{0,12}'], ['p_{0,5}', 'p_{0,12}']),
150: (['p_{0,5}', 'p_{0,12}'], []), 151, (['p_{0,6}', 'p_{0,12}'], ['p_{0,6}', 'p_{0,12}']),
151: (['p_{0,6}', 'p_{0,12}'], []), 152, (['p_{0,13}', 'p_{0,13}'], ['p_{0,13}', 'p_{0,13}']),
152: (['p_{0,13}', 'p_{0,13}'], []), 153, (['Butadien', 'p_{0,13}'], ['p_{0,1}', 'p_{0,6}']),
153: (['Butadien', 'p_{0,13}'], []), 154, (['Butadien', 'p_{0,13}'], ['Butadien', 'p_{0,13}']),
154: (['Butadien', 'p_{0,13}'], ['Butadien']), 155, (['p_{0,0}', 'p_{0,13}'], ['Butadien', 'p_{0,6}']),
155: (['p_{0,0}', 'p_{0,13}'], ['Butadien']), 156, (['p_{0,1}', 'p_{0,13}'], ['p_{0,1}', 'p_{0,13}']),
156: (['p_{0,1}', 'p_{0,13}'], []), 157, (['p_{0,1}', 'p_{0,13}'], ['p_{0,4}', 'p_{0,6}']),
157: (['p_{0,1}', 'p_{0,13}'], []), 158, (['p_{0,2}', 'p_{0,13}'], ['p_{0,5}', 'p_{0,6}']),
158: (['p_{0,2}', 'p_{0,13}'], []), 159, (['p_{0,4}', 'p_{0,13}'], ['p_{0,4}', 'p_{0,13}']),
159: (['p_{0,4}', 'p_{0,13}'], []), 160, (['p_{0,5}', 'p_{0,13}'], ['p_{0,5}', 'p_{0,13}']),
160: (['p_{0,5}', 'p_{0,13}'], []), 161, (['p_{0,6}', 'p_{0,13}'], ['p_{0,6}', 'p_{0,13}']),
161: (['p_{0,6}', 'p_{0,13}'], []), 162, (['p_{0,13}', 'p_{0,14}'], ['p_{0,13}', 'p_{0,14}']),
162: (['p_{0,13}', 'p_{0,14}'], []), 163, (['p_{0,13}', 'p_{0,15}'], ['p_{0,13}', 'p_{0,15}']),
163: (['p_{0,13}', 'p_{0,15}'], []), 164, (['p_{0,13}', 'p_{0,16}'], ['p_{0,13}', 'p_{0,16}']),
164: (['p_{0,13}', 'p_{0,16}'], []), 165, (['p_{0,8}', 'p_{0,13}'], ['p_{0,8}', 'p_{0,13}']),
165: (['p_{0,8}', 'p_{0,13}'], []), 166, (['p_{0,9}', 'p_{0,13}'], ['p_{0,9}', 'p_{0,13}']),
166: (['p_{0,9}', 'p_{0,13}'], []), 167, (['p_{0,10}', 'p_{0,13}'], ['p_{0,10}', 'p_{0,13}']),
167: (['p_{0,10}', 'p_{0,13}'], []), 168, (['p_{0,0}', 'p_{0,13}'], ['p_{0,0}', 'p_{0,13}']),
168: (['p_{0,0}', 'p_{0,13}'], []), 169, (['p_{0,2}', 'p_{0,13}'], ['p_{0,2}', 'p_{0,13}']),
169: (['p_{0,2}', 'p_{0,13}'], []), 170, (['p_{0,3}', 'p_{0,13}'], ['p_{0,3}', 'p_{0,13}']),
170: (['p_{0,3}', 'p_{0,13}'], []), 171, (['p_{0,14}', 'p_{0,14}'], ['p_{0,14}', 'p_{0,14}']),
171: (['p_{0,14}', 'p_{0,14}'], []), 172, (['p_{0,14}', 'p_{0,15}'], ['p_{0,14}', 'p_{0,15}']),
172: (['p_{0,14}', 'p_{0,15}'], []), 173, (['p_{0,14}', 'p_{0,16}'], ['p_{0,14}', 'p_{0,16}']),
173: (['p_{0,14}', 'p_{0,16}'], []), 174, (['p_{0,8}', 'p_{0,14}'], ['p_{0,8}', 'p_{0,14}']),
174: (['p_{0,8}', 'p_{0,14}'], []), 175, (['p_{0,9}', 'p_{0,14}'], ['p_{0,9}', 'p_{0,14}']),
175: (['p_{0,9}', 'p_{0,14}'], []), 176, (['Butadien', 'p_{0,14}'], ['Butadien', 'p_{0,14}']),
176: (['Butadien', 'p_{0,14}'], ['Butadien']), 177, (['p_{0,10}', 'p_{0,14}'], ['p_{0,10}', 'p_{0,14}']),
177: (['p_{0,10}', 'p_{0,14}'], []), 178, (['p_{0,0}', 'p_{0,14}'], ['p_{0,0}', 'p_{0,14}']),
178: (['p_{0,0}', 'p_{0,14}'], []), 179, (['p_{0,1}', 'p_{0,14}'], ['p_{0,1}', 'p_{0,14}']),
179: (['p_{0,1}', 'p_{0,14}'], []), 180, (['p_{0,2}', 'p_{0,14}'], ['p_{0,2}', 'p_{0,14}']),
180: (['p_{0,2}', 'p_{0,14}'], []), 181, (['p_{0,3}', 'p_{0,14}'], ['p_{0,3}', 'p_{0,14}']),
181: (['p_{0,3}', 'p_{0,14}'], []), 182, (['p_{0,4}', 'p_{0,14}'], ['p_{0,4}', 'p_{0,14}']),
182: (['p_{0,4}', 'p_{0,14}'], []), 183, (['p_{0,5}', 'p_{0,14}'], ['p_{0,5}', 'p_{0,14}']),
183: (['p_{0,5}', 'p_{0,14}'], []), 184, (['p_{0,6}', 'p_{0,14}'], ['p_{0,6}', 'p_{0,14}']),
184: (['p_{0,6}', 'p_{0,14}'], []), 185, (['p_{0,15}', 'p_{0,15}'], ['p_{0,15}', 'p_{0,15}']),
185: (['p_{0,15}', 'p_{0,15}'], []), 186, (['p_{0,15}', 'p_{0,16}'], ['p_{0,15}', 'p_{0,16}']),
186: (['p_{0,15}', 'p_{0,16}'], []), 187, (['p_{0,8}', 'p_{0,15}'], ['p_{0,8}', 'p_{0,15}']),
187: (['p_{0,8}', 'p_{0,15}'], []), 188, (['p_{0,9}', 'p_{0,15}'], ['p_{0,9}', 'p_{0,15}']),
188: (['p_{0,9}', 'p_{0,15}'], []), 189, (['Butadien', 'p_{0,15}'], ['Butadien', 'p_{0,15}']),
189: (['Butadien', 'p_{0,15}'], ['Butadien']), 190, (['p_{0,10}', 'p_{0,15}'], ['p_{0,10}', 'p_{0,15}']),
190: (['p_{0,10}', 'p_{0,15}'], []), 191, (['p_{0,0}', 'p_{0,15}'], ['p_{0,0}', 'p_{0,15}']),
191: (['p_{0,0}', 'p_{0,15}'], []), 192, (['p_{0,1}', 'p_{0,15}'], ['p_{0,1}', 'p_{0,15}']),
192: (['p_{0,1}', 'p_{0,15}'], []), 193, (['p_{0,2}', 'p_{0,15}'], ['p_{0,2}', 'p_{0,15}']),
193: (['p_{0,2}', 'p_{0,15}'], []), 194, (['p_{0,3}', 'p_{0,15}'], ['p_{0,3}', 'p_{0,15}']),
194: (['p_{0,3}', 'p_{0,15}'], []), 195, (['p_{0,4}', 'p_{0,15}'], ['p_{0,4}', 'p_{0,15}']),
195: (['p_{0,4}', 'p_{0,15}'], []), 196, (['p_{0,5}', 'p_{0,15}'], ['p_{0,5}', 'p_{0,15}']),
196: (['p_{0,5}', 'p_{0,15}'], []), 197, (['p_{0,6}', 'p_{0,15}'], ['p_{0,6}', 'p_{0,15}']),
197: (['p_{0,6}', 'p_{0,15}'], []), 198, (['p_{0,16}', 'p_{0,16}'], ['p_{0,16}', 'p_{0,16}']),
198: (['p_{0,16}', 'p_{0,16}'], []), 199, (['p_{0,8}', 'p_{0,16}'], ['p_{0,8}', 'p_{0,16}']),
199: (['p_{0,8}', 'p_{0,16}'], []), 200, (['p_{0,9}', 'p_{0,16}'], ['p_{0,9}', 'p_{0,16}']),
200: (['p_{0,9}', 'p_{0,16}'], []), 201, (['Butadien', 'p_{0,16}'], ['Butadien', 'p_{0,16}']),
201: (['Butadien', 'p_{0,16}'], ['Butadien']), 202, (['p_{0,10}', 'p_{0,16}'], ['p_{0,10}', 'p_{0,16}']),
202: (['p_{0,10}', 'p_{0,16}'], []), 203, (['p_{0,0}', 'p_{0,16}'], ['p_{0,0}', 'p_{0,16}']),
203: (['p_{0,0}', 'p_{0,16}'], []), 204, (['p_{0,1}', 'p_{0,16}'], ['p_{0,1}', 'p_{0,16}']),
204: (['p_{0,1}', 'p_{0,16}'], []), 205, (['p_{0,2}', 'p_{0,16}'], ['p_{0,2}', 'p_{0,16}']),
205: (['p_{0,2}', 'p_{0,16}'], []), 206, (['p_{0,3}', 'p_{0,16}'], ['p_{0,3}', 'p_{0,16}']),
206: (['p_{0,3}', 'p_{0,16}'], []), 207, (['p_{0,4}', 'p_{0,16}'], ['p_{0,4}', 'p_{0,16}']),
207: (['p_{0,4}', 'p_{0,16}'], []), 208, (['p_{0,5}', 'p_{0,16}'], ['p_{0,5}', 'p_{0,16}']),
208: (['p_{0,5}', 'p_{0,16}'], []), 209, (['p_{0,6}', 'p_{0,16}'], ['p_{0,6}', 'p_{0,16}']),
209: (['p_{0,6}', 'p_{0,16}'], []), 211, (['Butadien', 'p_{0,11}'], ['p_{0,18}']),
211: (['Butadien', 'p_{0,11}'], []), 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}'] 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, #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) model = Model(name)
x = {e_id: model.addVar(vtype=GRB.INTEGER, lb = 0, name = f"x_{e_id}") for e_id in hyperedges} 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} 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") 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 = 2.0, name = "nmr2") 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 = 2.0, name = "nmr3") 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): #Assigns every Molecule the likelihood compared to the three different reference spectra
n[v] = nmr 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) 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)}") print(f"Number of used hyperedges: {len(binary_solution)}")
def main(): def main():
model, x, b = build_model("HypergraphFlow", HYPEREDGES, VERTICES, NMRLIKELYHOODS) model, x, b = build_model("HypergraphFlow", HYPEREDGES, VERTICES, NMR1, NMR2, NMR3)
model.optimize() model.optimize()
if model.status != GRB.Status.OPTIMAL: if model.status != GRB.Status.OPTIMAL:
print("No optimal solution found for the first model.") print("No optimal solution found for the first model.")