<< knapsack Solvers qassign >>

metanet >> metanet > Solvers > pipe_network

pipe_network

solves the pipe network problem

Calling Sequence

[x,pi] = pipe_network(g)

Parameters

g

a graph_data_structure.

x

row vector of the value of the flow on the arcs

pi

row vector of the value of the potential on the nodes

Description

pipe_network returns the value of the flows and of the potentials for the pipe network problem: flow problem with two Kirchhoff laws. The graph must be directed. The problem must be feasible (the sum of the node demands must be equal to 0).

The resistances on the arcs are given by the field g.edges.data.weight of the graph data structure. If this field is not present it may be added and set using the function add_edge_data. The values of the resistances must be strictly positive.

THe demands on nodes are given by the field g.nodes.data.demand of the graph data structure. If this field is not present it may be added and set using the function add_node_data. The sum of the node demands must be equal to 0.

The problem is solved by using sparse matrices LU factorization.

Examples

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 Solvers qassign >>