package buffalo.transportNetwork; /** Interface pour les flots, plus précisément pour les arêtes.<BR> Les arêtes représentées dans cette interface doivent posséder un intervalle de valuations, pouvoir accepter des flots, et permettre un accès aux sommets adjacents. Le réseau mis en place ici doit admettre le flot nul comme solution réalisable. Une valuation strictement négative est interprétée ici comme une absence de borne. Une valuation négative doit être implémentée comme une valuation positive sur l'arc inconforme. */ public interface FlowableArc { /** Capacité de l'arc inconforme, c'est-à-dire flot qu'il est possible de faire passer dans le sens inverse. Cette valeur peut aussi être vue comme une borne inférieure pour un flot négatif. Si il n'existe pas de borne inférieure, donc que l'arc non conforme est de capacité infinie, il faut renvoyer une valeur strictement positive. */ public double getMinCapacity(); /** Capacité de l'arc conforme, c'est-à-dire flot maximal qu'il est possible d'y faire passer. Si la capacité de cet arc est infinie, il faut renvoyer une valeur strictement négative. */ public double getMaxCapacity(); /** Valeur effective du flot. */ public double getFlowValue(); /** Quantité de flot qu'il est encore possible de faire passer dans cet arc. C'est à dire sa valeur dans le graphe résiduel. Renvoyer 0 s'il n'est plus possible d'en faire passer, un nombre strictement négatif si cette arête est dans le graphe résiduel de capacité infinie. */ public double getConformResidualValue(); /** Quantité de flot qu'il est possible de faire passer dans l'arc non conforme. Valeur résiduelle de l'arc dans le sens inverse. On peut aussi voir cela comme la quantité de flot qu'il est possible de retrancher sur cet arc. S'il n'est plus possible d'ajouter du flot sur l'arc inconforme, renvoyer 0. Si l'arc inconforne est de capacité infinie, renvoyer une valeur strictement négative. */ public double getUnconformResidualValue(); /** Si l'arc courant (u, v) est orienté de u vers v, cette méthode retourne le sommet u. */ public FlowableVertex getInVertex(); /** Si l'arc courant (u, v) est orienté de u vers v, cette méthode retourne le sommet v. */ public FlowableVertex getOutVertex(); /** Pour augmenter le flot dans l'orientation conforme. */ public void increaseConformFlow(double increment); /** Pour augmenter le flot dans l'orientation non conforme. */ public void increaseUnconformFlow(double increment); }