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);
}