flot de coût linéaire minimum
[c,phi,flag] = min_lcost_flow1(g)
graphe (liste)
valeur du coût
vecteur ligne des valeurs des flots sur les arcs
problème soluble ou pas (0 ou 1)
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.
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); | ![]() | ![]() |