param n, integer, >= 2; /* numero de nós */ set N := {1..n}; /* conjunto dos nós */ set A, within N cross N; /*set A, within {i in 1..n, j in 1..n}; forma alternativa para declara o conjunto A dos arcos */ param b{i in N}; /* oferta/demanda do nó */ param c{(i,j) in A}; /* comprimento/custo nos arcos */ param cap{(i,j) in A}>=0; /* capacidade dos arcos */ check{(i,j) in A}: i != j; # para verificar se não tem nenhum arco com origem e destino iguais, o que não é permitido! var x{(i,j) in A} >= 0; /* variável de decisão correspondente ao fluxo nos arcos */ minimize Z: sum{(i,j) in A} c[i,j] * x[i,j]; /* minimização do custo referente ao fluxo que passa pela rede*/ s.t. r{i in 1..n}: sum{(i,j) in A} x[i,j] - sum{(j,i) in A} x[j,i] = b[i]; /* equações de conservação de fluxo nos nós */ s.t. capacidade{(i,j) in A}: x[i,j] <= cap[i,j]; /* restrição de capacidade dos arcos */ solve; printf{(i, j) in A} "%d -> %d = %d custo %s\n", i, j, x[i,j], if x[i,j] then c[i,j] else "===="; # Impressão na tela do prompt, ou seja, a tela ao lado direito===> data; # Estes dados se referem ao problema de assinalamento sobre as 4 empresas que devem atender as 4 rotas da secretaria de educação com o menor custo possível. param n := 8; # n corresponde ao total de nós na rede param: A : c, cap := 1 5 4000 4000 1 6 5000 5000 1 7 4500 4500 2 5 3800 3800 2 6 4000 4000 2 8 4000 4000 3 5 3000 3000 3 7 2000 2000 3 8 4500 4500 4 5 3500 3500 4 7 4000 4000 4 8 5000 5000; # Entrada dos custos c e capacidade cap de cada um dos arcos de A param b:= 1 1 2 1 3 1 4 1 5 -1 6 -1 7 -1 8 -1; #Oferta ( > 0 ) ou demanda (< 0) dos nós da rede end;