From 36f1a4dc45c78261e0c0ee5623388a6b3774bbb7 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Mon, 26 May 2008 13:15:33 +0000 Subject: [PATCH] 1st commit since pif's resurrection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit code/GuiNuMo-server/server.cc * Ajout de la sélection du point à renvoyer, à chaque étape de l'algorithme dans fastViterbi(). * Correction d'un bogue causé par les #ifdef de débogage. code/GuiNuMo-server/cfg/ Ajout de deux fichiers de configuration : * topo.csv, donnant la liste et les coordonnées des pièces (pour l'instant seulement du premier étage). * distances.csv, décrivant les distances entre les points de référence clefs pour utiliser avec FRBHM. git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@36 785a6c6c-259e-4ff1-8b91-dc31627914f0 --- GuiNuMo-server/cfg/distances.csv | 21 +++++++++++++++ GuiNuMo-server/cfg/topo.csv | 12 +++++++++ GuiNuMo-server/server.cc | 45 ++++++++++++++++++++++++-------- 3 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 GuiNuMo-server/cfg/distances.csv create mode 100644 GuiNuMo-server/cfg/topo.csv diff --git a/GuiNuMo-server/cfg/distances.csv b/GuiNuMo-server/cfg/distances.csv new file mode 100644 index 0000000..19e32fd --- /dev/null +++ b/GuiNuMo-server/cfg/distances.csv @@ -0,0 +1,21 @@ +# Pour chaque pièce on prend le point (0;3) du référentiel pièce. +# X;Y;Z;D1;X1;Y1;Z1;D2;X2;Y2;Z2;…;Dn;Xn;Yn;Zn +# Le point (X;Y;Z) est en visibilité du point (Xn;Yn;Zn). Dn est un entier dont la valeur est égale à 1 si le lien est bidirectionnel, et à 0 s'il est unidirectionnel (auquel cas le lien sera enregistré comme allant uniquement de (X;Y;Z) à (Xn;Yn;Zn)). + +# 1100 +3.00;5.48;3.00;1;7.50;7.00;3.00 + +# 0190 +3.00;9.09;3.00;1;7.50;7.00;3.00 + +# 0180 +3.00;12.67;3.00;1;8.00;14.00;3.00 + +# 1070 +3.00;16.30;3.00;1;8.00;14.00;3.00 + +# 1060 (Vérifier coordonnées) +4.00;22.00;3.00;1;7.50;22.00;3.00 + +# 1050 +4.00;28.00;3.00;1;7.50;28.00;3.00 diff --git a/GuiNuMo-server/cfg/topo.csv b/GuiNuMo-server/cfg/topo.csv new file mode 100644 index 0000000..2314398 --- /dev/null +++ b/GuiNuMo-server/cfg/topo.csv @@ -0,0 +1,12 @@ +1100;1.00;7.28;6.05;3.70;3.00 +0190;1.00;10.88;6.05;7.28;3.00 +0180;1.00;14.48;6.05;10.88;3.00 +1070;1.00;18.12;6.05;14.48;3.00 +1060;1.00;25.32;6.05;18.12;3.00 +1050;1.00;31.40;6.05;25.32;3.00 +CouloirN1;5.00;3.70;6.05;0.50;3.00 +CouloirN1;6.05;29.50;8.20;0.50;3.00 +CouloirN1;8.20;16.50;10.00;10.88;3.00 +WC;8.20;9.00;10.00;0.50;3.00 +1105;8.20;10.88;10.00;9.00;3.00 +1095;8.20;29.30;10.00;24.80;3.00 diff --git a/GuiNuMo-server/server.cc b/GuiNuMo-server/server.cc index 5cccb13..7873ee2 100644 --- a/GuiNuMo-server/server.cc +++ b/GuiNuMo-server/server.cc @@ -2,7 +2,7 @@ #define TEST #define DEBUG // Décommenter pour avoir de l'affichage en plus. -#define DEBUG_2 // Décommenter pour avoir encore plus d'affichage. +//#define DEBUG_2 // Décommenter pour avoir encore plus d'affichage. @@ -925,6 +925,7 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c #endif // TEST int i = 1 ; // Nombre d'ensembles d'historique qu'on a déjà passés + unsigned int V0_min_k = 0 ; // Indice du point sélectionné à chaque itération if (N < 2) { @@ -932,18 +933,26 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c return ; } -#ifdef TEST - unsigned int pt = 0 ; #ifdef DEBUG - cout << reference_point_list.size() << " points de référence, " << peregrination_point_list.size() << " points de pérégrination." << endl ; - + cout << reference_point_list.size() << " points de référence" ; +#ifdef TEST + cout << ", " << peregrination_point_list.size() << " points de pérégrination." << endl ; +#else // TEST + cout << '.' << endl ; +#endif // TEST +#endif // DEBUG +#ifdef DEBUG_2 cout << "***** Liste pts référence : *****" << endl ; printReferencePointList() ; +#ifdef TEST cout << "***** Liste pérégrination : *****" << endl ; printPointList(peregrination_point_list) ; +#endif // TEST cout << "*********************************" << endl ; -#endif // DEBUG +#endif // DEBUG_2 +#ifdef TEST + unsigned int pt = 0 ; while (pt < peregrination_point_list.size()) #else // TEST while (true) @@ -991,17 +1000,30 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c } } - /* Choix du min à renvoyer */ + /* Choix du point à renvoyer */ + V0_min_k = 0 ; // Indice du point correspondant au V0 minimal. Si le tableau n'est pas plein, la plus petite valeur a l'indice 0 (car getkClosestInSs() renvoit un résultat trié). if (N-1-i == 0) { +#ifdef DEBUG float V0_min = V[0][0] ; + cout << "V[0][0]=" << V[0][0] << " ; V0_min=" << V0_min << " ; V0_min_k=" << V0_min_k << " -- " ; +#endif // DEBUG for (int k=1 ; k < K ; k++) { if (V[0][k] < V0_min) - V0_min = V[0][k] ; - cout << "V[0][" << k << "]=" << V[0][k] << " ; V0_min=" << V0_min << " -- " ; + { + V0_min_k = k ; +#ifdef DEBUG + V0_min = V[0][k] ; +#endif // DEBUG + } +#ifdef DEBUG + cout << "V[0][" << k << "]=" << V[0][k] << " ; V0_min=" << V0_min << " ; V0_min_k=" << V0_min_k << " -- " ; +#endif // DEBUG } - cout << "V0_min = " << V0_min << endl ; +#ifdef DEBUG + cout << "V0_min = " << V0_min << " ; V0_min_k=" << V0_min_k << endl ; +#endif // DEBUG } } @@ -1014,7 +1036,8 @@ void Server::fastViterbiLike(const unsigned short &N, const unsigned short &K, c cout << "[" << V[n][k] << "]" ; cout << endl ; } - cout << "\n--------------------------" << endl ; + cout << "Point sélectionné : " << E_current[V0_min_k] << endl ; + cout << "--------------------------" << endl ; #endif // DEBUG if (i < N-1)