int: num_nodes = 7; %nombre de noeuds int: num_edges = 10; %nombre d'arêtes % liste des arêtes, une arête (où plutôt arc orienté ici) est représentée par un couple (noeuds_départ, noeuds_arrivé) array[1..num_edges, 1..2] of 1..num_nodes: E = array2d(1..num_edges, 1..2, [ 1, 2, 2, 3, 2, 7, 3, 4, 3, 7, 4, 7, 5, 2, 5, 4, 6, 2, 6, 3]); array[1..num_edges] of int: l = [1, 0, 10, 0, 10, 25, 0, 0, 0, 0]; %lower bound array[1..num_edges] of int: u = [1, 100, 10, 100, 10, 25, 20, 10, 15, 5]; %upper bound array[1..num_edges] of int: c = [10, 40, 0, 20, 0, 0, 0, 0, 0, 0]; %coût % variable de décision, x[i] = quantité de flot (ie quantité de fromage) sur l'arc i array[1..num_edges] of var int: x; %fonction objectif var int: cost; constraint cost = sum(j in 1..num_edges)(x[j] * c[j]); %contraintes de capacité constraint forall(i in 1..num_edges)(x[i] <= u[i]); constraint forall(i in 1..num_edges)(x[i] >= l[i]); %contrainte de conservation du flux constraint forall(i in 2..(num_nodes - 3))(sum(j in 1..num_edges where (E[j,1] == i))(x[j]) - sum(j in 1..num_edges where (E[j,2] == i))(x[j]) = 0); solve minimize cost;