SiGraph: sulcal graphs |
![]() |
Recuit simulé. More...
#include <si/graph/anneal.h>

Public Types | |
| enum | Mode { METROPOLIS , GIBBS , ICM , MPM , SPECIAL } |
| enum | IterType { VERTEX , CLIQUE , CUSTOM } |
| enum | VoidMode { VOIDMODE_NONE , VOIDMODE_REGULAR , VOIDMODE_STOCHASTIC } |
| enum | InitLabelsType { INITLABELS_NONE , INITLABELS_VOID , INITLABELS_RANDOM } |
Public Member Functions | |
| Anneal (CGraph &cg, MGraph &rg) | |
| virtual | ~Anneal () |
| void | init (Mode mode, double temp, double tmult, double tICM, double stopProp, unsigned gibbsMaxTrans, bool verbose=true, IterType itType=VERTEX, InitLabelsType voidInitialLabels=INITLABELS_RANDOM, const std::string &voidLabel="", std::ostream *plotStream=0, unsigned niterBelowStopProp=1) |
| Fixe l'état initial. | |
| void | setVoidMode (VoidMode mode, unsigned occurency=0) |
| Mode "void": essais de configs où tous les labels sont remplacés par void. | |
| void | deleteExtensions () |
| void | addExtension (AnnealExtension *ae, unsigned occurency=20) |
| void | clear () |
| Libère les structures allouées dans les graphes. | |
| void | reset () |
| Revient aux conditions initiales. | |
| void | checkStop () |
| Teste le critère d'arrêt et fixe l'état correspondant. | |
| void | fitStep () |
| Effectue une passe de recuit. | |
| void | fit () |
| Effectue tout le recuit. | |
| void | stepMetropolis () |
| Effectue une passe en mode Métropolis. | |
| void | stepGibbs () |
| Effectue une passe en mode Gibbs Sampler. | |
| void | stepICM () |
| Effectue une passe en mode ICM déterministe. | |
| void | stepVoid () |
| Effectue une passe en mode Void (essais de configs ou tout un label est enlevé) | |
| void | processPotentials (const std::set< Vertex * > &vertices, std::vector< EnergyField > &en) |
| Calcule les différentes énergies des transitions possibles d'un groupe de noeuds, en Gibbs Sampler ou en ICM. | |
| double | processAllPotentials () |
| Calcule les potentiels de toutes les cliques. | |
Interrogation de l'état du système | |
| CGraph & | _cgraph |
| Graphe à étiqueter. | |
| MGraph & | _mgraph |
| Graphe modèle. | |
| Mode | _modeI |
| Mode initial. | |
| Mode | _mode |
| Mode courant. | |
| double | _tempI |
| Température initiale. | |
| double | _temp |
| Température courante. | |
| bool | _finished |
| double | _tmult |
| double | _tICM |
| double | _stopProp |
| unsigned | _ntrans |
| unsigned | _maxtrans |
| unsigned | _gibbsMaxTrans |
| double | _stepDeltaE |
| double | _deltaE |
| double | _initEnergy |
| bool | _verbose |
| IterType | _iterType |
| SGProvider * | _sgProvider |
| unsigned | _niter |
| std::ostream * | _plotStream |
| InitLabelsType | _initialLabelsType |
| std::string | _voidLabel |
| VoidMode | _voidmode |
| unsigned | _voidoccurency |
| std::vector< AnnealExtension * > | _annealExtensions |
| unsigned | _extensionPassOccurency |
| bool | _doubleDrawingLots |
| unsigned | _niterBelowStopProp |
| unsigned | _currentNiterBelowStopProp |
| const CGraph & | cGraph () const |
| Graphe à étiqueter. | |
| CGraph & | cGraph () |
| const MGraph & | rGraph () const |
| Graphe modèle. | |
| MGraph & | rGraph () |
| Mode | modeI () const |
| Mode de recuit initial. | |
| Mode | mode () const |
| Mode courant. | |
| double | tempI () const |
| Température initiale. | |
| double | temp () const |
| Température courante. | |
| bool | isFinished () const |
| Retourne true si le recuit est fini. | |
| double | tMult () const |
| Multiplicxateur de température. | |
| double | tICM () const |
| Température de passage en ICM. | |
| double | stopProp () const |
| Proportion de transformations acceptées en dessous de laquelle on arrête le recuit. | |
| unsigned | nTrans () const |
| Nombre de transformations acceptées au cours de la dernière passe. | |
| unsigned | maxTrans () const |
| Nombre de transformations proposées au cours de la dernière passe. | |
| unsigned | gibbsMaxTrans () const |
| Nombre max. | |
| double | deltaE () const |
| Variation d'énergie du graphe depuis le début du recuit. | |
| double | stepDeltaE () const |
| Variation d'énergie du graphe à la dernière passe. | |
| double | initialEnergy () const |
| double | energy () const |
| bool | verbosity () const |
| dit si les affichages sont autorisés ou interdits | |
| IterType | iterType () const |
| unsigned | nIter () const |
| Nb d'itérations de recuit effectuées. | |
| bool | doubleDrawingLots () const |
| Dit si on est en mode DoubleTirage, technologie © JeffProd'00, pour les passes void et extensions. | |
| void | setDoubleDrawingLots (bool t) |
| const std::string & | voidLabel () const |
| void | setAllowThreads (bool) |
| enables or disables the use of multiple threads during annealing. | |
| bool | threadsAllowed () const |
| void | setMaxIterations (unsigned n) |
| unsigned | maxIterations () const |
| Maximum number of iterations before switching to next mode. | |
| unsigned | MPMUnrecordedIterations () const |
| Number of MPM steps before labels stats are recorded. | |
| void | setMPMUnrecordedIterations (unsigned n) |
Recuit simulé.
Fait le recuit simulé à partir d'un graphe à cliques (CGraph) à étiqueter et d'un graphe modèle (MGraph).
Avant de faire un recuit, il faut avoir initialisé les cliques du graphe à étiqueter (fonction ModelFinder::initCliques()).
Il faut aussi initialiser les paramètres du recuit en appelant la fonction init().
Puis l'utilisation se fait par la fonction fit() (recuit complet), ou pas à pas en initialisant d'abord le recuit (fonction reset()) puis en appelant la fonction fitStep() en boucle jusqu'à ce que isFinished() retourne true (recuit terminé).
Plusieurs modes de recuit sont disponibles:
Les modes Metropolis, Gibbs et MPM basculent vers le mode ICM en dessous d'un certain seuil de température, pour finir le recuit au plus vite dans le minimum local le plus proche.
Le recuit s'arrête lorsque la proportion du nombre de transformations acceptées par rapport au nombre proposé passe en dessous d'un seuil donné lui aussi.
On peut interroger l'état du système: température, nombres de changements proposés et acceptés, énergie actuelle, différence d'énergie entre le début du recuit et l'état actuel, différence d'énergie au cours de la dernière passe, etc. en utilisant les fonctions qui vont bien.
|
virtual |
| void sigraph::Anneal::addExtension | ( | AnnealExtension * | ae, |
| unsigned | occurency = 20 ) |
|
inline |
|
inline |
| void sigraph::Anneal::checkStop | ( | ) |
Teste le critère d'arrêt et fixe l'état correspondant.
| void sigraph::Anneal::clear | ( | ) |
Libère les structures allouées dans les graphes.
| void sigraph::Anneal::deleteExtensions | ( | ) |
|
inline |
|
inline |
Dit si on est en mode DoubleTirage, technologie © JeffProd'00, pour les passes void et extensions.
Definition at line 290 of file anneal.h.
References _doubleDrawingLots.
|
inline |
Definition at line 282 of file anneal.h.
References _deltaE, and _initEnergy.
| void sigraph::Anneal::fit | ( | ) |
Effectue tout le recuit.
| void sigraph::Anneal::fitStep | ( | ) |
Effectue une passe de recuit.
|
inline |
Nombre max.
de transformations par groupe de noeuds dans le Gibbs Sampler (et l'ICM)
Definition at line 276 of file anneal.h.
References _gibbsMaxTrans.
Referenced by init().
| void sigraph::Anneal::init | ( | Mode | mode, |
| double | temp, | ||
| double | tmult, | ||
| double | tICM, | ||
| double | stopProp, | ||
| unsigned | gibbsMaxTrans, | ||
| bool | verbose = true, | ||
| IterType | itType = VERTEX, | ||
| InitLabelsType | voidInitialLabels = INITLABELS_RANDOM, | ||
| const std::string & | voidLabel = "", | ||
| std::ostream * | plotStream = 0, | ||
| unsigned | niterBelowStopProp = 1 ) |
Fixe l'état initial.
| mode | Type de recuit (Anneal::METROPOLIS, Anneal::GIBBS ou Anneal::ICM) |
| temp | Température initiale |
| tmult | Multiplicateur de décroissance de température (entre 0 et 1) |
| tICM | Un recuit METROPOLIS ou GIBBS passe en mode ICM quand la température atteint la température tICM |
| stopProp | Proportion de changements acceptés en dessous duquel le recuit s'arrête |
| gibbsMaxTrans | Nombre max. de transformations à la fois dans une clique par l'algorithme du Gibbs Sampler et l'ICM |
| verbosity | Si {\tt true} (par défaut), affiche à chaque pas la température, le mode de recuit, la variation d'énergie du pas, les nombres de changements acceptés et proposés. Si {\tt false}, n'affiche rien. |
| itType | Type d'itération sur le graphe: types de groupes de noeuds et ordre de passage. Pour l'instant ça n'est utilisé qu'en modes ICM et Gibbs. Pour Metropolis on verra plus tard. |
| plotStream | stream dans lequel les énergies sont écrites à chaque pas de recuit, pour traçage de courbes. Si ce paramètre est laissé à 0, rien n'est écrit. |
References gibbsMaxTrans(), INITLABELS_RANDOM, mode(), stopProp(), temp(), tICM(), VERTEX, and voidLabel().
|
inline |
Definition at line 281 of file anneal.h.
References _initEnergy.
|
inline |
|
inline |
| unsigned sigraph::Anneal::maxIterations | ( | ) | const |
Maximum number of iterations before switching to next mode.
Especially useful in constant temperature modes such as MPM. The default is 0 and means no limit.
|
inline |
|
inline |
|
inline |
| unsigned sigraph::Anneal::MPMUnrecordedIterations | ( | ) | const |
Number of MPM steps before labels stats are recorded.
Useful to wait a kind of stabilization before recording labels stats
|
inline |
|
inline |
| double sigraph::Anneal::processAllPotentials | ( | ) |
Calcule les potentiels de toutes les cliques.
Cette fonction est utilisée à l'initialisation, ou pour calculer l'énergie totale du graphe
| void sigraph::Anneal::processPotentials | ( | const std::set< Vertex * > & | vertices, |
| std::vector< EnergyField > & | en ) |
Calcule les différentes énergies des transitions possibles d'un groupe de noeuds, en Gibbs Sampler ou en ICM.
Cette fonction efface le vecteur et le re-remplit
| void sigraph::Anneal::reset | ( | ) |
Revient aux conditions initiales.
|
inline |
|
inline |
| void sigraph::Anneal::setAllowThreads | ( | bool | ) |
enables or disables the use of multiple threads during annealing.
When enabled, multiple threads will only be used on platforms that support such a feature (threads and thread-safe reference counters), and which have multiple CPUs. In such case, one thread by CPU will be used. Be warned that there will not necessarily be a large benefit for it since threads synchronization will use a significant overhead and bottlenecks. On a bi-Xeon Linux with hyperthreading enabled, I ususally don't get more than 40-50% speedup for 4 logical CPUs (but 2 physical CPUs are actually present). On a bi-G5 Mac, I get basically almost no speed improvement.
|
inline |
Definition at line 291 of file anneal.h.
References _doubleDrawingLots.
| void sigraph::Anneal::setMaxIterations | ( | unsigned | n | ) |
| void sigraph::Anneal::setMPMUnrecordedIterations | ( | unsigned | n | ) |
| void sigraph::Anneal::setVoidMode | ( | VoidMode | mode, |
| unsigned | occurency = 0 ) |
Mode "void": essais de configs où tous les labels sont remplacés par void.
| mode | VOIDMODE_NONE: désactivé; VOIDMODE_REGULAR: essais réguliers, une fois sur occurency; VOIDMODE_STOCHASTIC: essais irréguliers, avec probabilité 1/occurency |
| occurency | périodicité de la passe en mode "void" |
References mode().
|
inline |
Variation d'énergie du graphe à la dernière passe.
Definition at line 280 of file anneal.h.
References _stepDeltaE.
| void sigraph::Anneal::stepGibbs | ( | ) |
Effectue une passe en mode Gibbs Sampler.
| void sigraph::Anneal::stepICM | ( | ) |
Effectue une passe en mode ICM déterministe.
| void sigraph::Anneal::stepMetropolis | ( | ) |
Effectue une passe en mode Métropolis.
| void sigraph::Anneal::stepVoid | ( | ) |
Effectue une passe en mode Void (essais de configs ou tout un label est enlevé)
|
inline |
|
inline |
|
inline |
| bool sigraph::Anneal::threadsAllowed | ( | ) | const |
|
inline |
|
inline |
|
inline |
|
inline |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Definition at line 354 of file anneal.h.
Referenced by doubleDrawingLots(), and setDoubleDrawingLots().
|
protected |
|
protected |
Definition at line 333 of file anneal.h.
Referenced by isFinished().
|
protected |
Definition at line 339 of file anneal.h.
Referenced by gibbsMaxTrans().
|
protected |
Definition at line 342 of file anneal.h.
Referenced by energy(), and initialEnergy().
|
protected |
|
protected |
Definition at line 344 of file anneal.h.
Referenced by iterType().
|
protected |
Definition at line 338 of file anneal.h.
Referenced by maxTrans().
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Definition at line 340 of file anneal.h.
Referenced by stepDeltaE().
|
protected |
Definition at line 336 of file anneal.h.
Referenced by stopProp().
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Definition at line 343 of file anneal.h.
Referenced by verbosity().
|
protected |
Definition at line 349 of file anneal.h.
Referenced by voidLabel().