g.add_node(2, pos='"2,0!"', demand=0) g.add_node(4, pos='"4,2!"', demand=0) g.add_node(6, pos='"6,4!"', demand=0) g.add_node(5, pos='"6,0!"', demand=0) g.add_node(7, pos='"8,2!"', demand=-4, label='(1, -4)') g.add_edge(1, 3, cost=0, capacity=2, label='(0, 2)') g.add_edge(1, 2, cost=0, capacity=2, label='(0, 2)') g.add_edge(3, 4, cost=1, capacity=1, label='(1, 1)') g.add_edge(3, 6, cost=2, capacity=2, label='(2, 2)') g.add_edge(2, 4, cost=3, capacity=1, label='(3, 1)') g.add_edge(2, 5, cost=5, capacity=1, label='(5, 1)') g.add_edge(4, 6, cost=1, capacity=3, label='(1, 3)') g.add_edge(4, 7, cost=4, capacity=2, label='(4, 2)') g.add_edge(4, 5, cost=1, capacity=1, label='(3, 1)') g.add_edge(6, 7, cost=0, capacity=2, label='(0, 2)') g.add_edge(5, 7, cost=0, capacity=2, label='(0, 2)') g.set_display_mode('pygame') g.display() # g.cycle_canceling('pygame') g.min_cost_flow(algo='cycle_canceling') # g.max_flow(1, 7) nl = list(int(n) for n in g.get_node_list()) nl.sort() for n in nl: for m in nl: if g.check_edge(n, m): print(n, m, g.get_edge_attr(n, m, 'flow'))
T._incumbent_value = sum(IS) print 'Heuristic solution value: ', T._incumbent_value T.VARIABLES = [] T.CONSTRAINTS = [] T.OBJ = {} T.RHS = {} T.MAT = {} T.branch_on_fractional = True T.branch_strategy = b_rule for i in nodes: T.VARIABLES.append(i) T.OBJ[i] = 1 for j in nodes: if G.check_edge(i, j): constraint_label = 'C_' + str(i) + '_' + str(j) T.CONSTRAINTS.append(constraint_label) for k in nodes: T.MAT.update([((constraint_label, k), 0) for k in nodes]) T.MAT[(constraint_label, i)] = 1 T.MAT[(constraint_label, j)] = 1 T.RHS[constraint_label] = 1 opt, optval, node_count = T.BranchAndBound() for i in opt: if opt[i] >= 0.5: G.set_node_attr(i, 'style', 'filled') G.set_node_attr(i, 'fillcolor', 'red')
g.add_node(2,pos='"2,0!"', demand=0) g.add_node(4,pos='"4,2!"', demand=0) g.add_node(6,pos='"6,4!"', demand=0) g.add_node(5,pos='"6,0!"', demand=0) g.add_node(7,pos='"8,2!"', demand=-4, label='(1, -4)') g.add_edge(1, 3, cost=0, capacity=2, label='(0, 2)') g.add_edge(1, 2, cost=0, capacity=2, label='(0, 2)') g.add_edge(3, 4, cost=1, capacity=1, label='(1, 1)') g.add_edge(3, 6, cost=2, capacity=2, label='(2, 2)') g.add_edge(2, 4, cost=3, capacity=1, label='(3, 1)') g.add_edge(2, 5, cost=5, capacity=1, label='(5, 1)') g.add_edge(4, 6, cost=1, capacity=3, label='(1, 3)') g.add_edge(4, 7, cost=4, capacity=2, label='(4, 2)') g.add_edge(4, 5, cost=1, capacity=1, label='(3, 1)') g.add_edge(6, 7, cost=0, capacity=2, label='(0, 2)') g.add_edge(5, 7, cost=0, capacity=2, label='(0, 2)') g.set_display_mode('pygame') g.display() # g.cycle_canceling('pygame') g.min_cost_flow(algo='cycle_canceling') # g.max_flow(1, 7) nl = list(int(n) for n in g.get_node_list()) nl.sort() for n in nl: for m in nl: if g.check_edge(n, m): print n, m, g.get_edge_attr(n, m, 'flow')