<< min_lcost_flow2 Flots Solveurs >>

metanet >> metanet > Flots > min_qcost_flow

min_qcost_flow

flot de coût quadratique minimum

Séquence d'appel

[c,phi,flag] = min_qcost_flow(eps,g)

Paramètres

eps

scalaire, précision

g

graphe (liste)

c

valeur du coût

phi

vecteur ligne des valeurs des flots sur les arcs

flag

problème soluble ou pas (0 ou 1)

Description

min_qcost_flow calcule flot de coût quadratique minimum dans un réseau g. Elle renvoie le coût total du flot sur les arcs c et le vecteur ligne des flots sur les arcs phi. eps est la précision de l'algorithme itératif. Si le problème n'est pas soluble (impossible de trouver un flot compatible), flag est égal à 0, sinon il est égal à 1.

Les bornes sur les flots sont données par les éléments g.edges.data.min_cap et g.edges.data.max_cap du graphe.

Les valeurs des capacités maximum et minimum doivent être non négatives. La valeur de la capacité maximum doit être supérieure ou égale à la valeur de la capacité minimum. Si la valeur de min_cap ou de max_cap n'est pas donnée elle est supposé nulle sur chaque arête.

Les coûts sur les arêtes sont donnés par les éléments g.edges.data.q_orig et g.edges.data.q_weight du graphe. Ce doit être des valeurs non négatives. Si la valeur de q_orig ou q_weight n'est pas donnée, elle est supposé nulle sur chaque arête. Le coût sur l'arc u est donné par: (1/2)*q_weight[u](phi[u]-q_orig[u])^2.

Si les champs de donnée min_cap ou max_cap ou q_orig ou q_weightne sont pas présents dans la structure du graphe, ils peuvent être ajoutés et affectés en utilisant la fonction add_edge_data.

Cette fonction utilise un algorithme dû à M. Minoux.

Exemples

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.nodes.graphics.x=[155,153,85,155,237,244,244,334,338,346,442,440,439,333,438];
g.nodes.graphics.y=[45,177,253,254,253,114,171,257,174,101,172,64,264,350,351];
show_graph(g);

ma=edge_number(g)
g=add_edge_data(g,'min_cap',[0,1,5,5,0,3,3,5,4,1,4,3,3,1,3,1,1,4,1,3,1,4,5,4,4,2,1,4,2,3,2]);
g=add_edge_data(g,'max_cap',[38,37,42,41,34,49,35,36,43,43,43,48,37,..
                                 36,42,48,44,36,30,31,30,41,32,42,34,48,32,36,36,36,30]);
g=add_edge_data(g,'q_weight',ones(1,ma));
[c,phi,flag]=min_qcost_flow(0.001,g);flag

g.edges.graphics.foreground(find(phi<>0))=color('red');
g=add_edge_data(g,'flow',phi)
g.edges.graphics.display='flow';
show_graph(g);

Voir Aussi


Report an issue
<< min_lcost_flow2 Flots Solveurs >>