<< knapsack Solveurs qassign >>

metanet >> metanet > Solveurs > pipe_network

pipe_network

résout le problème du réseau de tuyaux

Séquence d'appel

[x,pi] = pipe_network(g)

Paramètres

g

graphe (liste)

x

vecteur ligne des valeurs des flots sur les arcs

pi

vecteur ligne des potentiels sur les sommets

Description

pipe_network renvoie les valeurs des flots et des potentiels pour le problème du réseau de tuyaux (problème de flots avec deux lois de Kirchhoff). Le graphe doit être orienté. Le problème doit être soluble (la somme des demandes des sommets doit être égale à 0).

Les résistances sur les arcs sont données par le champ g.edges.data.weight de la structure de graphe. S'il nest pas présent dans la structure de donnée ce champ peut être ajouté et affecté par la fonction add_edge_data. Les valeurs des résistances doivent être strictement positives.

Les demandes sur les noeuds sont données par le champ g.nodes.data.demand de la structure de graphe. S'il nest pas présent dans la structure de donnée ce champ peut être ajouté et affecté par la fonction add_node_data. La somme des demandes des sommets doit être égale à 0.

Le problème est résolu à l'aide d'une factorisation LU creuse.

Exemples

ta=[1 1 2 2 3 3 4 4 5 5 5 5 6 6 6 7 7 15 15 15 15 15 15 15 8 9 10 11 12 13 14];
he=[10 13 9 14 8 11 9 11 8 10 12 13 8 9 12 8 11 1 2 3 4 5 6 7 16 16 16 16 16 16 16];
g=make_graph('foo',1,16,ta,he);
g.nodes.graphics.x=[42 615 231 505 145 312 403 233 506 34 400 312 142 614 260 257];
g.nodes.graphics.y=[143 145 154 154 147 152 157 270 273 279 269 273 273 274 50 376];
g.nodes.graphics.diam(15:16)=30;
g=add_node_data(g,'demand',[0 0 0 0 0 0 0 0 0 0 0 0 0 0 -100 100]);
w = [1 3 2 6 4 7 8 1 2 2 2 4 7 8 9 2 3 5 7 3 2 5 8 2 5 8  6 4 3 5 6];
g=add_edge_data(g,'weight',w);
g.nodes.graphics.display='demand';
g.edges.graphics.display='weight';
show_graph(g);

[x,pi] = pipe_network(g)
g=add_edge_data(g,'flow',round(100*x)/100);
g.edges.graphics.display='flow';

show_graph(g);

Report an issue
<< knapsack Solveurs qassign >>