<< min_lcost_cflow Flots min_lcost_flow2 >>

metanet >> metanet > Flots > min_lcost_flow1

min_lcost_flow1

flot de coût linéaire minimum

Séquence d'appel

[c,phi,flag] = min_lcost_flow1(g)

Paramètres

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_lcost_flow1 calcule flot de coût linéaire 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. 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 entières et positives. 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.cost du graphe. Les coûts doivent être non négatifs. Si la valeur de cost n'est pas donnée, elle est supposé nulle sur chaque arête.

Si les champs de donnée min_cap ou max_cap ou cost ne 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 l'algorithme out-of-kilter.

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,145,221,222,221,82,139,225,142,69,140,72,232,318,319];
show_graph(g);

g=add_edge_data(g,'min_cap',[3,7,1,3,6,15,11,3,5,3,12,5,0,5,15,6,2,3,16,7,7,2,8,4,1,7,5,17,20,1,9]);
g=add_edge_data(g,'max_cap',[44,55,49,42,42,63,50,46,38,52,55,46,51,52,67,..
                              57,51,38,57,46,45,52,46,42,52,49,47,58,66,38,46]);
g=add_edge_data(g,'cost',[4,6,6,3,8,2,3,3,3,5,10,4,9,5,4,3,11,8,5,4,8,4,6,10,8,7,6,2,5,9,6]);
[c,phi,flag]=min_lcost_flow1(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_cflow Flots min_lcost_flow2 >>