Skip to content

Commit

Permalink
Refactoring NEWKWDataGridOptimizer finalization
Browse files Browse the repository at this point in the history
Fin du refactoring de NEWKWDataGridOptimizer avant changement des algorithmes d'optimisation
- refactoring par simplification des methdoes, de leur parametrage et nouvelle methodes utulitaires
- amelioration des trace et du suivi de la progression
- quelques corrections de bug au passage

NEWKWDataGridOptimizer
- simplification des methodes d'optimisation
- nouvelle methodes utilitaires
  - SaveDataGrid: copie selon le parametre bCleanNonInformativeVariables
    - utilisation systematique, pour simplifier le code
  - IsSupervisedDataGrid: testv si une grille est supervisee
  - IsLastGranularity: test si une grille est parametree par la derniere granularite
  - ResetProgressionIndicators: reinitialisation des indicateur de progression
  - DisplayProgression: methode dediee a l'affichage des infos de progression
- simplification des methodes d'optimisation
  - exploite dans SlightOptimizeUnsupervisedDataGrid et dans les methodes de VNS
  - supression de la methode VNSOptimize intermediaire, desormais inutile
    - appel direct de IterativeVNSOptimizeDataGrid, sans parametre MaxLevel
  - supression de DEPRECATED_VNSOptimizeVarPartDataGrid
- simplification des methodes de pilotage VNS
  - OptimizeDataGrid
    - redirection sur SlightOptimizeGranularizedDataGrid ou OptimizeGranularizedDataGrid selon contexte
  - VNSOptimizeDataGrid, VNSOptimizeVarPartDataGrid
    - supression des parametres dDecreaseFactor et nMinIndex
    - supression du parametre dOptimizedDataGridCost, calcule dans la methode
    - nMaxIndex renomme en nNeighbourhoodLevelNumber
    - valeur de dMinNeighbourhoodSize et dDecreaseFactor desormais calculees dans ces methodes
      rendues autonomes par rapport a leur methode appelante IterativeVNSOptimizeDataGrid
  - SlightOptimizeUnsupervisedDataGrid
    - nouvelle methode dediee a l'optimisation legere, dans le cas non supervise a l la granularite non maximale
    - appele dans OptimizeGranularizedDataGrid
  - IterativeVNSOptimizeDataGrid: prise en compte du mode anytime uniquement a la derniere granularite
  - OptimizeSolution
    - parametre aditionnel: bDeepPostOptimization
    - exploite dans SlightOptimizeUnsupervisedDataGrid et dans les methodes de VNS
  - Set|GetSlightOptimizationMode: supression de ces methodes, desormais inutiles
- standardisation des messages de debug de type bDisplay
- GenerateNeighbourSolution: clarification du role de GetCellNumber vs GetGridFrequency
- vérification de l'utilisation de IsOptimizationNeeded
- ajout de quelques tests sur TaskProgression::IsInterruptionRequested()
- DisplayOptimizationDetails
  - amelioration pour systematiquement avoir les informations d'informations completes sous forme de tableau
- DisplayProgression: parametrage correct des message et du niveau d'avancement, quel que soit le contexte
  - renomage des variables d'indexation des solutions
    - nVNSMaxLevel -> nVNSNeighbourhoodLevelNumber
    - nVNSLevel -> nVNSNeighbourhoodLevelIndex

CCLearningProblem::BuildCoclustering
- correction dans la recopie des parametres expert GetDataGridOptimizerParameters

CCCoclusteringBuilder::ComputeCoclustering
- correction pour la gestion du profiling en cas d'erreur (grille initiale NULL)
- gestion du mode anytime deplacee vers le KWDataGridOptimizer

Amelioration des messages sur les rapports intermediaires dans le log
- "write intermediate report" au lieu de "write intermediate coclustering report"
- cas VarPart
  - info de granularite
    -"Granularity" au lieu de "DgGranularity"
    - affiche uniquement si necessaire (pas au max)
  - info sur les nombre de tokens
    - "VarParts" au lieu de "VarPartNumbers"
    - on commence a afficher le total '=', puis '+' au lieu de '*'
    - on ajoute '...' en fin de liste si trop de variables internes
  - info sur le niveau de tokenisation
    - "Tokenization" au lieu de "VarPartGranularity"
- impacts dans CCCoclusteringBuilder::HandleOptimizationStep
  - refactoring et prise en compte des evolutions
- nouvelle reference pour tous les jeux de test de LearningTest\TestCoclustering
  - seuls les fichiers err.txt ont change

Tests complets sur les sous-repertoire de LearningTest/Coclustering
- bascule des nouvelles references: seuls les fichiers err.txt ont change
- test complet en mode debug sur LearningTest\TestCoclustering\y_CoclusteringIV_Standard et LearningTest\TestCoclustering\Standard\Iris
  • Loading branch information
marcboulle committed Oct 26, 2023
1 parent 2c17d1a commit b6ae2f3
Show file tree
Hide file tree
Showing 11 changed files with 583 additions and 864 deletions.
2 changes: 1 addition & 1 deletion src/Learning/KWDataPreparation/KWDataGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ class KWDataGrid : public Object
////////////////////////////////////////////////////////////////
// Acces aux cellules du DataGrid

// Nombre de cellules
// Nombre de cellules non vides
int GetCellNumber() const;

// Parcours de tous les cellules
Expand Down
5 changes: 1 addition & 4 deletions src/Learning/KWDataPreparation/KWDataGridManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ void KWDataGridManager::CopyDataGrid(const KWDataGrid* initialDataGrid, KWDataGr
{
KWDataGridManager dataGridManager;

require(initialDataGrid != NULL);
require(targetDataGrid != NULL);

// Utilisation d'un manager de grille pour effectuier la copie
// Utilisation d'un manager de grille pour effectuer la copie
dataGridManager.SetSourceDataGrid(initialDataGrid);
targetDataGrid->DeleteAll();
dataGridManager.ExportDataGrid(targetDataGrid);
Expand All @@ -29,7 +28,6 @@ void KWDataGridManager::CopyDataGridWithInnerAttributesCloned(const KWDataGrid*
{
KWDataGridManager dataGridManager;

require(initialDataGrid != NULL);
require(targetDataGrid != NULL);

// Utilisation d'un manager de grille pour effectuier la copie
Expand All @@ -42,7 +40,6 @@ void KWDataGridManager::CopyInformativeDataGrid(const KWDataGrid* initialDataGri
{
KWDataGridManager dataGridManager;

require(initialDataGrid != NULL);
require(targetDataGrid != NULL);

// Utilisation d'un manager de grille pour effectuer la copie
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWDataPreparation/KWDataGridOptimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2339,7 +2339,7 @@ void KWDataGridVNSOptimizer::GenerateNeighbourSolution(const KWDataGrid* initial

// Parametrage avance temporaire, pour etude sur les multinomiales hierarchiques (Marc Boulle)
// Cf. classe d'etude KWHierarchicalMultinomialStudy
if (optimizationParameters.GetInternalParameter() == "LargeNeighborhoods")
if (optimizationParameters.GetInternalParameter() == "LargeNeighbourhoods")
{
nMaxContinuousPartNumber = (int)(nGridSize / 2);
nMaxSymbolPartNumber = (int)sqrt(nGridSize * 1.0);
Expand Down
Loading

0 comments on commit b6ae2f3

Please sign in to comment.