1
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
2
<!DOCTYPE MAN SYSTEM "../../manrev.dtd">
4
<LANGUAGE>eng</LANGUAGE>
5
<TITLE>min_qcost_flow</TITLE>
6
<TYPE>Scilab function</TYPE>
7
<DATE>September 1995</DATE>
8
<SHORT_DESCRIPTION name="min_qcost_flow"> minimum quadratic cost flow</SHORT_DESCRIPTION>
10
<CALLING_SEQUENCE_ITEM>[c,phi,flag] = min_qcost_flow(eps,g) </CALLING_SEQUENCE_ITEM>
15
<PARAM_NAME>eps</PARAM_NAME>
17
<SP>: scalar, precision</SP>
21
<PARAM_NAME>g</PARAM_NAME>
27
<PARAM_NAME>c</PARAM_NAME>
29
<SP>: value of cost</SP>
33
<PARAM_NAME>phi</PARAM_NAME>
35
<SP>: row vector of the value of flow on the arcs</SP>
39
<PARAM_NAME>flag</PARAM_NAME>
41
<SP>: feasible problem flag (0 or 1)</SP>
47
<P><VERB>min_qcost_flow</VERB> computes the minimum quadratic cost flow in the network
48
<VERB>g</VERB>. It returns the total cost of the flows on the arcs <VERB>c</VERB> and
49
the row vector of the flows on the arcs <VERB>phi</VERB>. <VERB>eps</VERB> is the precision
50
of the iterative algorithm. If the problem is not feasible (impossible to
51
find a compatible flow for instance), <VERB>flag</VERB> is equal to 0, otherwise it
54
The bounds of the flow are given by the elements <VERB>edge_min_cap</VERB> and
55
<VERB>edge_max_cap</VERB> of the graph list.
56
The value of the maximum capacity must be greater than or equal to the
57
value of the minimum capacity.
58
If the value of <VERB>edge_min_cap</VERB> or <VERB>edge_max_cap</VERB> is not given (empty
59
row vector <VERB>[]</VERB>), it is assumed to be equal to 0 on each edge.</P>
61
The costs on the edges are given by the elements <VERB>edge_q_orig</VERB> and
62
<VERB>edge_q_weight</VERB> of the graph list. The cost on arc <VERB>u</VERB> is given by:</P>
64
<VERB>(1/2)*edge_q_weight[u](phi[u]-edge_q_orig[u])^2</VERB>
67
The costs must be non negative.
68
If the value of <VERB>edge_q_orig</VERB> or <VERB>edge_q_weight</VERB> is not given (empty
69
row vector <VERB>[]</VERB>), it is assumed to be equal to 0 on each edge.</P>
71
This function uses an algorithm due to M. Minoux.</P>
75
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];
76
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];
77
g=make_graph('foo',1,15,ta,he);
78
g('node_x')=[194 191 106 194 296 305 305 418 422 432 552 550 549 416 548];
79
g('node_y')=[56 221 316 318 316 143 214 321 217 126 215 80 330 437 439];
81
g1=g; ma=arc_number(g1);
84
g1('edge_min_cap')=round(5*rand(1,ma));
85
g1('edge_max_cap')=round(20*rand(1,ma))+30*ones(1,ma);
86
g1('edge_q_orig')=0*ones(1,ma);
87
g1('edge_q_weight')=ones(1,ma);
88
[c,phi,flag]=min_qcost_flow(0.001,g1);
89
if flag==1 then break; end;
91
x_message(['The cost is: '+string(c);
92
'Showing the flow on the arcs']);
93
ii=find(phi<>0); edgecolor=phi; edgecolor(ii)=11*ones(ii);
94
g1('edge_color')=edgecolor;
95
edgefontsize=8*ones(1,ma); edgefontsize(ii)=18*ones(ii);
96
g1('edge_font_size')=edgefontsize;
97
g1('edge_label')=string(phi);
103
<LINK>min_lcost_cflow</LINK>
106
<LINK>min_lcost_flow1</LINK>
109
<LINK>min_lcost_flow2</LINK>