1st commit since pif's resurrection

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
This commit is contained in:
Matteo Cypriani 2008-05-26 13:15:33 +00:00
parent 594fb84bc4
commit 36f1a4dc45
3 changed files with 67 additions and 11 deletions

View File

@ -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
1 # Pour chaque pièce on prend le point (0;3) du référentiel pièce.
2 # X;Y;Z;D1;X1;Y1;Z1;D2;X2;Y2;Z2;…;Dn;Xn;Yn;Zn
3 # 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)).
4 # 1100
5 3.00;5.48;3.00;1;7.50;7.00;3.00
6 # 0190
7 3.00;9.09;3.00;1;7.50;7.00;3.00
8 # 0180
9 3.00;12.67;3.00;1;8.00;14.00;3.00
10 # 1070
11 3.00;16.30;3.00;1;8.00;14.00;3.00
12 # 1060 (Vérifier coordonnées)
13 4.00;22.00;3.00;1;7.50;22.00;3.00
14 # 1050
15 4.00;28.00;3.00;1;7.50;28.00;3.00

View File

@ -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
1 1100 1.00 7.28 6.05 3.70 3.00
2 0190 1.00 10.88 6.05 7.28 3.00
3 0180 1.00 14.48 6.05 10.88 3.00
4 1070 1.00 18.12 6.05 14.48 3.00
5 1060 1.00 25.32 6.05 18.12 3.00
6 1050 1.00 31.40 6.05 25.32 3.00
7 CouloirN1 5.00 3.70 6.05 0.50 3.00
8 CouloirN1 6.05 29.50 8.20 0.50 3.00
9 CouloirN1 8.20 16.50 10.00 10.88 3.00
10 WC 8.20 9.00 10.00 0.50 3.00
11 1105 8.20 10.88 10.00 9.00 3.00
12 1095 8.20 29.30 10.00 24.80 3.00

View File

@ -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)