1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
min_lcost_flow1(1) Scilab function min_lcost_flow1(1)
NAME
min_lcost_flow1 - minimum linear cost flow
CALLING SEQUENCE
[c,phi,flag] = min_lcost_flow1(g)
PARAMETERS
g : graph list
c : value of cost
phi : row vector of the value of flow on the arcs
flag : feasible problem flag (0 or 1)
DESCRIPTION
min_lcost_flow1 computes the minimum linear cost flow in the network g. It
returns the total cost of the flows on the arcs c and the row vector of the
flows on the arcs phi. If the problem is not feasible (impossible to find a
compatible flow for instance), flag is equal to 0, otherwise it is equal to
1.
The bounds of the flow are given by the elements edge_min_cap and
edge_max_cap of the graph list. The value of the minimum capacity and of
the maximum capacity must be non negative and must be integer numbers. The
value of the maximum capacity must be greater than or equal to the value of
the minimum capacity. If the value of edge_min_cap or edge_max_cap is not
given (empty row vector []), it is assumed to be equal to 0 on each edge.
The costs on the edges are given by the element edge_cost of the graph
list. The costs must be non negative. If the value of edge_cost is not
given (empty row vector []), it is assumed to be equal to 0 on each edge.
The demands, element node_demand of the graph list, must be equal to zero.
This function uses the out-of-kilter algorithm.
EXAMPLE
ta=[1 1 2 2 2 3 4 4 5 6 6 6 7 7 7 8 9 10 12 12 13 13 13 14 15 14 9 11 10 1 8];
he=[2 6 3 4 5 1 3 5 1 7 10 11 5 8 9 5 8 11 10 11 9 11 15 13 14 4 6 9 1 12 14];
g=make_graph('foo',1,15,ta,he);
g('node_x')=[194 191 106 194 296 305 305 418 422 432 552 550 549 416 548];
g('node_y')=[56 221 316 318 316 143 214 321 217 126 215 80 330 437 439];
show_graph(g);
g1=g;ma=arc_number(g1);
rand('uniform');
while %T then
g1('edge_min_cap')=round(20*rand(1,ma));
g1('edge_max_cap')=round(20*rand(1,ma))+g1('edge_min_cap')+33*ones(1,ma);
g1('edge_cost')=round(10*rand(1,ma))+ones(1,ma);
[c,phi,flag]=min_lcost_flow1(g1);
if flag==1 then break; end;
end;
x_message(['The cost is: '+string(c);
'Showing the flow on the arcs ']);
ii=find(phi<>0); edgecolor=phi; edgecolor(ii)=11*ones(ii);
g1('edge_color')=edgecolor;
edgefontsize=8*ones(1,ma); edgefontsize(ii)=18*ones(ii);
g1('edge_font_size')=edgefontsize;
g1('edge_label')=string(phi);
show_graph(g1);
SEE ALSO
min_lcost_cflow, min_lcost_flow2, min_qcost_flow
|