logging.info(f"{len(B_nodes_with_associated_A_nodes)} viele Knoten, davon mit Grad 1: {len(nodes_with_degree_equals_one)} und Knoten Grads > 1: {len(nodes_with_degree_higher_one)}.")
logging.info(f"{len(nodes_B)} viele Knoten, davon mit Grad 1: {len(nodes_with_degree_equals_one)} und Knoten Grads > 1: {len(nodes_with_degree_higher_one)}.")
# Erstelle die Listen der Kanten, sortiert danach, ob sie in B mit einem Knoten mit Grad 1 verbunden sind, oder höhergradig sind
# Variable y(i, j) : Liegt i links von j ? Wenn ja 1, sonst 0.
# positionalVariablesForDegreeOne = {(nodes_with_degree_equals_one[i], nodes_with_degree_equals_one[i+1]) : LpVariable(f"y_{nodes_with_degree_equals_one[i]}_{nodes_with_degree_equals_one[i+1]}", 0, 1, cat='Binary') for i in range(len(nodes_with_degree_equals_one)-1)}
# crossingVariablesForDegreeOne = {(i, j, k, l): LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary') for (i, j) in edges_of_degree_one_nodes for (k, l) in edges_of_degree_one_nodes}
positionalVariables={(i,j):LpVariable(f"y_{i}_{j}",0,1,cat='Binary')foriinrange(number_of_nodes_in_A+1,number_of_nodes_in_A+number_of_nodes_in_B+1)forjinrange(number_of_nodes_in_A+1,number_of_nodes_in_A+number_of_nodes_in_B+1)ifi!=j}# and not (i, j) in positional_vars_degree_one_nodes_only}
logging.info(f"Positions Variablen y: gesamt erwartet {number_of_nodes_in_B*(number_of_nodes_in_B-1)}, davon wirklich gesamt {len(positional_vars_degree_one_nodes_only)+len(positionalVariables)}, für Knoten mit Grad 1: {len(positional_vars_degree_one_nodes_only)}, für Knoten mit Grad > 1: {len(positionalVariables)}")
logging.info(f"{len(crossingVariables)} viele Crossing Variablen aufgestellt. (Für Knoten mit Grad > 1). Maximal: {len(edges_for_nodes_with_higher_degree)*(len(edges_for_nodes_with_higher_degree)-1)} waren erwartet.")#TODO Funktion finden wie ich die erwarteten Anzahl an Crossings einfach errechnen kann