From 08715aa629a5a5385b7f09e83b41b763de6f32e7 Mon Sep 17 00:00:00 2001
From: konog98 <konog98@mi.fu-berlin.de>
Date: Wed, 8 May 2024 11:36:18 +0200
Subject: [PATCH] Reduzierung der x Constraints

---
 src/fortesting.py                        |  27 +-
 src/main.py                              |  11 +-
 src/prob.lp                              |  90 ---
 src/solution_instances/1.sol             | 743 +++++++++++++++++++++++
 src/solution_instances/complete_4_5.sol  |   8 +-
 src/solution_instances/cycle_8_sorted.gr |   4 -
 6 files changed, 757 insertions(+), 126 deletions(-)
 create mode 100644 src/solution_instances/1.sol
 delete mode 100644 src/solution_instances/cycle_8_sorted.gr

diff --git a/src/fortesting.py b/src/fortesting.py
index 689d621..a4db43f 100644
--- a/src/fortesting.py
+++ b/src/fortesting.py
@@ -50,18 +50,10 @@ def solve_bipartite_minimization(graph_file):
     prob = LpProblem("Minimize_Crossings", LpMinimize)
 
     # Boolesche Variablen für relative Positionen innerhalb jeder Partition
-    x = {(i, j): LpVariable(f"x_{i}_{j}", 0, 1, cat='Binary') for i in range(1, n0 + 1) for j in range(1, n0 + 1) if i < j}
     y = {(i, j): LpVariable(f"y_{i}_{j}", 0, 1, cat='Binary') for i in range(n0 + 1, n0 + n1 + 1) for j in range(n0 + 1, n0 + n1 + 1) if i < j}
     c = {(i, j, k, l): LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary') for (i, j) in edges for (k, l) in edges if i < j and k < l and i < k and j != l}
     logging.info("x, y und c geladen.")
-    """
-    # Crossing Variables
-    c = {}
-    for (i, j) in edges:
-        for (k, l) in edges:
-            if i < j and k < l and i < k and j != l:
-                c[(i, j, k, l)] = LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary')
-    """
+    
     # Zielfunktion, die minimiert werden soll
     prob += lpSum(c.values())
     logging.info("Zielfunktion aufgestellt.")
@@ -75,17 +67,11 @@ def solve_bipartite_minimization(graph_file):
 
                 # Sicherstellen, dass nur gültige y-Variable-Zugriffe stattfinden
                 if j > l:
-                    prob += c[(i, j, k, l)] == y[(l, j)]  # Verwende .get() für sichere Zugriffe
+                    prob += c[(i, j, k, l)] == y[(l, j)]  
                 if l > j:
-                    prob += c[(i, j, k, l)] == 1 - y[(j, l)]  # Verwende .get() für sichere Zugriffe
+                    prob += c[(i, j, k, l)] == 1 - y[(j, l)]  
     logging.info("Crossing Constraints aufgestellt.")
 
-    # Transitivitäts-Constraints für x-Variable, wenn x die Reihenfolge in A darstellt
-    for i in range(1, n0 + 1):
-        for j in range(i + 1, n0 + 1):
-            prob += x[(i, j)] == 1, f"fix_order_{i}_{j}"
-    logging.info("X fest Constraints aufgestellt.")
-
     initial_crossings = count_initial_crossings(edges)
     logging.info(f"Initial crossings edges: {initial_crossings}")
 
@@ -94,6 +80,7 @@ def solve_bipartite_minimization(graph_file):
 
     prob.writeLP("prob.lp")
     count_crossings_via_variables(c)
+    
     prob.solve()
     logging.info(f"Status der Lösung: {LpStatus[prob.status]}")
 
@@ -148,14 +135,16 @@ def solve_bipartite_minimization(graph_file):
                 if in_degree[neighbor] == 0:
                     zero_in_degree_queue.append(neighbor)
 
-        # Ausgabe der sortierten Knoten
+        for b in sorted_b:
+            print(f"{b}")
+        """ # Ausgabe der sortierten Knoten
         os.makedirs(os.path.dirname(output_file), exist_ok=True)
         with open(output_file, 'w') as f:
             for b in sorted_b:
                 f.write(f"{b}\n")
                 print(f"{b}")
         count_crossings_via_variables(c)
-        logging.info(f"Ergebnisse in {output_file} gespeichert")
+        logging.info(f"Ergebnisse in {output_file} gespeichert")"""
     else:
         logging.warning("Keine optimale Lösung gefunden.")
 
diff --git a/src/main.py b/src/main.py
index 998a002..02577d6 100644
--- a/src/main.py
+++ b/src/main.py
@@ -34,7 +34,6 @@ def solve_bipartite_minimization(graph_file):
     prob = LpProblem("Minimize_Crossings", LpMinimize)
 
     # Boolesche Variablen für relative Positionen innerhalb jeder Partition
-    x = {(i, j): LpVariable(f"x_{i}_{j}", 0, 1, cat='Binary') for i in range(1, n0 + 1) for j in range(1, n0 + 1) if i < j}
     y = {(i, j): LpVariable(f"y_{i}_{j}", 0, 1, cat='Binary') for i in range(n0 + 1, n0 + n1 + 1) for j in range(n0 + 1, n0 + n1 + 1) if i < j}
     c = {(i, j, k, l): LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary') for (i, j) in edges for (k, l) in edges if i < j and k < l and i < k and j != l}
     logging.info("x, y und c geladen.")
@@ -64,12 +63,6 @@ def solve_bipartite_minimization(graph_file):
                     prob += c[(i, j, k, l)] == 1 - y[(j, l)]  # Verwende .get() für sichere Zugriffe
     logging.info("Crossing Constraints aufgestellt.")
 
-    # Transitivitäts-Constraints für x-Variable, wenn x die Reihenfolge in A darstellt
-    for i in range(1, n0 + 1):
-        for j in range(i + 1, n0 + 1):
-            prob += x[(i, j)] == 1, f"fix_order_{i}_{j}"
-    logging.info("X fest Constraints aufgestellt.")
-
     prob.solve()
     logging.info(f"Status der Lösung: {LpStatus[prob.status]}")
 
@@ -128,6 +121,6 @@ def solve_bipartite_minimization(graph_file):
         logging.warning("Keine optimale Lösung gefunden.")
 
 
-test_file = 'githubtests/tiny_test_set/instances/grid_9_shuffled.gr'
-#test_file = 'test_instances/0.gr'
+#test_file = 'githubtests/tiny_test_set/instances/grid_9_shuffled.gr'
+test_file = 'test_instances/0.gr'
 solve_bipartite_minimization(test_file)
diff --git a/src/prob.lp b/src/prob.lp
index 125d6b7..0949b7c 100644
--- a/src/prob.lp
+++ b/src/prob.lp
@@ -76,51 +76,6 @@ _C62: c_9_14_10_16 + y_14_16 = 1
 _C7: c_1_15_8_13 - y_13_15 = 0
 _C8: c_1_15_9_14 - y_14_15 = 0
 _C9: c_1_15_10_16 + y_15_16 = 1
-fix_order_1_10: x_1_10 = 1
-fix_order_1_2: x_1_2 = 1
-fix_order_1_3: x_1_3 = 1
-fix_order_1_4: x_1_4 = 1
-fix_order_1_5: x_1_5 = 1
-fix_order_1_6: x_1_6 = 1
-fix_order_1_7: x_1_7 = 1
-fix_order_1_8: x_1_8 = 1
-fix_order_1_9: x_1_9 = 1
-fix_order_2_10: x_2_10 = 1
-fix_order_2_3: x_2_3 = 1
-fix_order_2_4: x_2_4 = 1
-fix_order_2_5: x_2_5 = 1
-fix_order_2_6: x_2_6 = 1
-fix_order_2_7: x_2_7 = 1
-fix_order_2_8: x_2_8 = 1
-fix_order_2_9: x_2_9 = 1
-fix_order_3_10: x_3_10 = 1
-fix_order_3_4: x_3_4 = 1
-fix_order_3_5: x_3_5 = 1
-fix_order_3_6: x_3_6 = 1
-fix_order_3_7: x_3_7 = 1
-fix_order_3_8: x_3_8 = 1
-fix_order_3_9: x_3_9 = 1
-fix_order_4_10: x_4_10 = 1
-fix_order_4_5: x_4_5 = 1
-fix_order_4_6: x_4_6 = 1
-fix_order_4_7: x_4_7 = 1
-fix_order_4_8: x_4_8 = 1
-fix_order_4_9: x_4_9 = 1
-fix_order_5_10: x_5_10 = 1
-fix_order_5_6: x_5_6 = 1
-fix_order_5_7: x_5_7 = 1
-fix_order_5_8: x_5_8 = 1
-fix_order_5_9: x_5_9 = 1
-fix_order_6_10: x_6_10 = 1
-fix_order_6_7: x_6_7 = 1
-fix_order_6_8: x_6_8 = 1
-fix_order_6_9: x_6_9 = 1
-fix_order_7_10: x_7_10 = 1
-fix_order_7_8: x_7_8 = 1
-fix_order_7_9: x_7_9 = 1
-fix_order_8_10: x_8_10 = 1
-fix_order_8_9: x_8_9 = 1
-fix_order_9_10: x_9_10 = 1
 Binaries
 c_1_15_10_16
 c_1_15_2_17
@@ -184,51 +139,6 @@ c_8_13_10_16
 c_8_13_9_14
 c_9_14_10_15
 c_9_14_10_16
-x_1_10
-x_1_2
-x_1_3
-x_1_4
-x_1_5
-x_1_6
-x_1_7
-x_1_8
-x_1_9
-x_2_10
-x_2_3
-x_2_4
-x_2_5
-x_2_6
-x_2_7
-x_2_8
-x_2_9
-x_3_10
-x_3_4
-x_3_5
-x_3_6
-x_3_7
-x_3_8
-x_3_9
-x_4_10
-x_4_5
-x_4_6
-x_4_7
-x_4_8
-x_4_9
-x_5_10
-x_5_6
-x_5_7
-x_5_8
-x_5_9
-x_6_10
-x_6_7
-x_6_8
-x_6_9
-x_7_10
-x_7_8
-x_7_9
-x_8_10
-x_8_9
-x_9_10
 y_11_12
 y_11_13
 y_11_14
diff --git a/src/solution_instances/1.sol b/src/solution_instances/1.sol
new file mode 100644
index 0000000..6d9d770
--- /dev/null
+++ b/src/solution_instances/1.sol
@@ -0,0 +1,743 @@
+922
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1397
diff --git a/src/solution_instances/complete_4_5.sol b/src/solution_instances/complete_4_5.sol
index 66f816c..b040bdf 100644
--- a/src/solution_instances/complete_4_5.sol
+++ b/src/solution_instances/complete_4_5.sol
@@ -1,5 +1,5 @@
-5
-6
-7
-8
 9
+8
+7
+6
+5
diff --git a/src/solution_instances/cycle_8_sorted.gr b/src/solution_instances/cycle_8_sorted.gr
deleted file mode 100644
index 3aac70f..0000000
--- a/src/solution_instances/cycle_8_sorted.gr
+++ /dev/null
@@ -1,4 +0,0 @@
-5
-6
-7
-8
-- 
GitLab