28
Pbs divers Radar Stratégies composites Simulateur de référence Cours 3 : Stratégie Radar Vincent Guigue UPMC - LIP6 Vincent Guigue LI260 - Course de Voiture 1/28

Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Embed Size (px)

Citation preview

Page 1: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Cours 3 : Stratégie Radar

Vincent GuigueUPMC - LIP6

Vincent Guigue LI260 - Course de Voiture 1/28

Page 2: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Problème : matrice vs image

Proposition :◦ Notre référence : la matrice de terrain

- Ne pas modifier les directions proposées jusqu’ici- Image = simple représentation

Herbe Route Route Route

Herbe

Herbe

Herbe Route

RouteHerbe

Matrice de Terrain

I

J I

J

Direction = (0,1)

Vincent Guigue LI260 - Course de Voiture 2/28

Page 3: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Solution basique

Synchronisation basique des indices :◦ Dès que je dois afficher qqch en (i,j) ⇒ je change le pixel (i,j)

1 pub l i c s t a t i c Buf f e r ed Image imageFromCi r cu i t ( C i r c u i t t r a c k ) {2 Buf f e r ed Image im =3 new Buf f e r ed Image (track.getHeight(), track.getWidth() ,4 Buf f e r ed Image .TYPE_4BYTE_ABGR) ;56 f o r ( i n t i =0; i<t r a c k . g e tHe i gh t ( ) ; i++)7 f o r ( i n t j =0; j<t r a c k . getWidth ( ) ; j++)8 im . setRGB (i, j , terra inToRGB ( t r a c k . g e tT e r r a i n ( i, j ) ) ) ;9

10 re tu rn im ;11 }

Vincent Guigue LI260 - Course de Voiture 3/28

Page 4: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Affichage inversé1 Ar r a yL i s t <Commande> coms = new Ar r a yL i s t <Commande>() ;2 f o r ( i n t i =0; i <50; i++) coms . add (new Commande ( 1 , 0 ) ) ;3 // a c c e l a fond4 f o r ( i n t i =0; i <50; i++) coms . add (new Commande ( 1 , 0 . 1 ) ) ;5 // a c c e l a fond + r o t a t i o n p o s i t i v e6 f o r ( i n t i =0; i <50; i++) coms . add (new Commande ( 1 , 0 ) ) ;7 // a c c e l a fond8 f o r ( i n t i =0; i <50; i++) coms . add (new Commande (1 , −0 .1 ) ) ;9 // a c c e l a fond + r o t a t i o n n é g a t i v e

101112 p o s i t i o n : ( 581 . 0 , 719 . 019002 )13 p o s i t i o n : (581 .0 , 719 .056967996)14 p o s i t i o n : (581 .0 ,719 .113860060008)

Vincent Guigue LI260 - Course de Voiture 4/28

Page 5: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Explication

◦ Coté modèle, je bouge de (0,1) ⇒ je change de colonne (versla droite dans la matrice)◦ Coté image, je change le pixel (i,j+1)◦ Dans le repère image, cela signifie :

- Abscisse x=i inchangée- Ordonnée y=j+1 ⇒ plus bas

◦ Sur les commandes passées :- Rotation vers la gauche (trigo), sur un exemple :- Un vecteur (0,1) devient (-EPS, 1-EPS) Application directe dela matrice de rotation

- Sur l’image BAS ⇒ BAS légèrement à droite

Vincent Guigue LI260 - Course de Voiture 5/28

Page 6: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Corrections automatiques Eclipse

◦ Lorsque anomalie (Exception) est détectée- Fichier absent- Commande impossible- ...

◦ A vous de définir le comportement adéquat- Affichage erreur + retour null (éventuellement)

· Pas très propre...- Délégation au niveau supérieur

· Plutot une bonne idée

◦ Remplacement de la valeur manquante par une valeur pardéfaut

- Intéressant mais dangereux (bug incompréhensible souventcréé)

Vincent Guigue LI260 - Course de Voiture 6/28

Page 7: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Eclipse

◦ Import- Vérifier toujours (même rapidement) la solution proposée- S’il y a plusieurs possibilités d’import (plusieurs classeshomonymes) : l’ordre des propositions n’est pas intelligent

◦ Proposition de cast, proposition de création de variable- Fiable à 80/90

◦ Utiliser les générateurs de code automatique- Bonne chose : cela évite les petites fautes bêtes qui sont duresà débugger

Vincent Guigue LI260 - Course de Voiture 7/28

Page 8: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : Fonctionnement

PrincipeLe radar permet de se diriger à la manière d’un sous-marin, enenvoyant des échos dans différentes directions.

P

Ensemble des faisceaux

Vincent Guigue LI260 - Course de Voiture 8/28

Page 9: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : un peu plus de détails

◦ Partir de la voiture◦ Dans la direction D

◦ Avancer d’un pas EPS◦ Recommencer tant qu’il n’y

a pas d’obstacle◦ Renvoyer le nombre de pas

effectuésAppliquer une rotation sur D etrecommencer

P

Ensemble des faisceaux

8 pas jusqu'à l'herbe

Vincent Guigue LI260 - Course de Voiture 9/28

Page 10: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : Cahier des charges

◦ Interface de définition d’un radar- Obtenir les scores de chaque brancheNB : score le plus grand = le meilleur

- Connaître la distance associée à chaque branche- Obtenir la meilleure branche- Récupérer les angles associés à chaque branche

1 pub l i c i n t e r f a c e Radar {2 pub l i c double [ ] s c o r e s ( ) ; // s c o r e de chaque branche3 pub l i c double [ ] d i s t a n c e s I n P i x e l s ( ) ; // pour l ’ o b s e r v e r4 pub l i c i n t ge tBe s t I nd e x ( ) ; // m e i l l e u r i n d i c e5 pub l i c double [ ] t h e t a s ( ) ; // a ng l e s de chaque f a i s c e a u6 }

Vincent Guigue LI260 - Course de Voiture 10/28

Page 11: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : conseils d’implémentation

◦ Donner au constructeur :- le faisceau d’angles- la voiture- le circuit

◦ Commencer à implémenter la méthode :public double[] scores() qui délègue la partie de calculd’un faisceau à :private double calcScore(double angle)

Vincent Guigue LI260 - Course de Voiture 11/28

Page 12: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : algorithme de baseData: Voiture v, Circuit c, EPSILONResult: cpt (score, plus c’est grand, plus c’est intéressant)begin

P ←− v .position;D ←− v .direction;cpt ←− 0 ;while Cicuirt.getTerrain(P) != Herbe && P dans le circuit do

cpt++;P ←− P + D ∗ EPSILON

endend

P

Ensemble des faisceaux

8 pas jusqu'à l'herbe

Vincent Guigue LI260 - Course de Voiture 12/28

Page 13: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : Piège d’implémentation

Attention aux copies de surfaces ! ! !

◦ Suivant les implémentations précédentes, on retourne parfoisdirectement la position/direction de la voiture... Gare auxmodifications !◦ Même phénomène avec le point de départ du circuit dans la

voiture

Vincent Guigue LI260 - Course de Voiture 13/28

Page 14: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : piège géométriqueIl ne faut pas prendre EPSILON trop petit : temps de calcul...Il ne faut pas prendre EPSILON trop grand :

P

8 pas jusqu'à l'herbe

Ensemble des faisceaux

Vincent Guigue LI260 - Course de Voiture 14/28

Page 15: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : piège géométrique

Erreur classique :1 double d = rada r . t h e t a ( ) [ 3 ] ;2 Commande c = new Commande( acc , d ) ;

Attention :la commande n’accepte pas un angle mais un pourcentage debraquage :◦ Pour tourner d’un angle alpha quelle commande fournir ?◦ Comment faire si la commande est <-1 ou >1 ?

Règle d’or : toujours BIEN comprendre ce que vous êtes en train defaire

Vincent Guigue LI260 - Course de Voiture 15/28

Page 16: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : Stratégie

Un radar n’est pas une stratégie... Il faut (par exemple) un systèmeexpert :

◦ Si le faisceau le plus long est ... alors la commande est ...◦ Si ...◦ ...

NB : la meilleure solution n’est pas la même pour tous les circuits.

Vincent Guigue LI260 - Course de Voiture 16/28

Page 17: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : Stratégie & architecture

ParamétrageLes paramètres doivent être fixés par le Main de manière générale...Et pour le radar en particulier !

Rôle du main :1 Définition des paramètres2 Définition Voiture, Circuit...3 Création du radar (à partir du faisceau, Voiture, Circuit)4 Création de la stratégie (à partir du radar)

Serialization◦ Si vos stratégies sont Serializable... Vos radars doivent l’être

aussi !◦ Ca commence à devenir intéressant pour garder la trace des

meilleures courses...

Vincent Guigue LI260 - Course de Voiture 17/28

Page 18: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radar : limites

Le radar, ça marche bien, mais pas tout le temps...

Vincent Guigue LI260 - Course de Voiture 18/28

Page 19: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Radars multiples ?

Question recurrente :Est il possible d’avoir plusieurs radars ?

Oui, mais le plus souvent on préfère avoir des stratégies multiples...On parle alors d’objet composite.

Commande + Commande getCommande()

Strategy <<INT>>Génère

+ Commande getCommande()- ArrayList<Strategy> liste

StrategyComposite

La StrategyCompositeest composée de Strategy

La StrategyCompositeest une Strategy

Vincent Guigue LI260 - Course de Voiture 19/28

Page 20: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Dans le détail

◦ La stratégie complexe EST UNE Strategy◦ Elle contient une liste de Strategy + une méthode

add(Strategy)◦ Lorsque l’on fait appel à getCommande()

- Etape 1 : sélection de la meilleure stratégie pour le cas présent- Etape 2 : appel de getCommande() de la meilleure stratégie

◦ Exemple : gestion de la ligne d’arrivéeLa stratégie complexe contient

- StrategyRadar- StrategyFinCourse (si un point de la ligne d’arrivée est visibledepuis la voiture)

Vincent Guigue LI260 - Course de Voiture 20/28

Page 21: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Comment choisir la bonne stratégie ?

Introduction d’un nouvel objet pour conserver une architectureélégante : le Selector

1 pub l i c i n t e r f a c e S e l e c t o r {2 pub l i c boolean i s S e l e c t e d ( ) ;3 }

La Strategy complexe devient simple ( !)◦ Une liste de Strategy◦ Une liste de Selector◦ On renvoie la première stratégie sélectionnée

Vincent Guigue LI260 - Course de Voiture 21/28

Page 22: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Sur un exemple

◦ Stratégie 1 : aller vers l’arrivée la plus proche- (Implémentation libre)

◦ Selector 1 : Si un point de la ligne d’arrivée est visible ⇒ true- Pour chaque point d’arrivée : Tester la visibilité

◦ Stratégie 2 : stratégie radar classique◦ Selector 2 : DefaultSelector

- Toujours trueSi les stratégies précédente ont échouée, on fait ça

Autres possibilités :◦ appliquer différentes stratégies pour différentes portions de

circuit◦ détecter les virages en avance◦ ...

Vincent Guigue LI260 - Course de Voiture 22/28

Page 23: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Implémentation (proposition)

1 pub l i c c l a s s S t r a t e g y S e l e c t o r implements S t r a t e g y {// C ’ e s t une s t r a t é g i e !2 p r i v a t e Ar r a yL i s t <St ra t egy > l i S t r a t e g y ; // Tout a b s t r a i t !3 p r i v a t e Ar r a yL i s t <Se l e c t o r > l i S e l e c t ;45 pub l i c S t r a t e g y S e l e c t o r ( ){6 l i S t r a t e g y = new Ar r a yL i s t <St ra t egy >() ;7 l i S e l e c t = new Ar r a yL i s t <Se l e c t o r >() ;8 }9

10 // P l u t o t s é c u r i s é : on e s t s u r qu ’ i l y a concordance11 pub l i c vo id add ( S t r a t e g y s t r , S e l e c t o r s e l e c t ){12 l i S t r a t e g y . add ( s t r ) ; l i S e l e c t . add ( s e l e c t ) ;13 }1415 pub l i c Commande getCommande ( ) {16 f o r ( i n t i =0; i<l i S t r a t e g y . s i z e ( ) ; i ++){17 i f ( l i S e l e c t . ge t ( i ) . i s S e l e c t e d ( ) )18 re tu rn l i S t r a t e g y . ge t ( i ) . getCommande ( ) ;19 }20 // normalement on ne pa s s e pas i c i . . .21 re tu rn l i S t r a t e g y . ge t ( l i S t r a t e g y . s i z e () −1) . getCommande ( ) ;22 }2324 } Vincent Guigue LI260 - Course de Voiture 23/28

Page 24: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Simulateur de référence

Vous pouvez maintenant jouer des courses... Commençons àcomparer les performances !

◦ Téléchargeable sur le site, lien compétition◦ Usage : le simulateur s’utilise avec 2 argumentsjava -jar simulateur.jar li260/track/1_safe.trkli260/tcoms/1_safe.com

- le fichier circuit- le fichier de commandes- Le fichier de commandes doit être normalisé

Vincent Guigue LI260 - Course de Voiture 24/28

Page 25: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Fichier de commandes normalisé

Code pour générer un fichier standard compatible :1 pub l i c s t a t i c vo id saveListeCommande ( A r r a yL i s t <Commande> l i s t e ,2 S t r i n g f i l e n ame ){3 t r y {4 DataOutputStream os =5 new DataOutputStream (new F i l eOutputSt r eam ( f i l e n ame ) ) ;6 f o r (Commande c : l i s t e ){7 os . w r i t eDoub l e ( c . getAcc ( ) ) ;8 os . w r i t eDoub l e ( c . getTurn ( ) ) ;9 }

10 os . c l o s e ( ) ;11 } catch ( IOExcept i on e ) {12 e . p r i n t S t a c kT r a c e ( ) ;13 }14 }

Vincent Guigue LI260 - Course de Voiture 25/28

Page 26: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Simulateur en ligne

◦ Une fois que tout est au point, vous pouvez passer ausimulateur en ligne :◦ Login = votre prénom, Password = numéro étudiant

Vincent Guigue LI260 - Course de Voiture 26/28

Page 27: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Simulateur en ligne (2)

NB : il faut avoir un score sur le circuit 1 pour débloquer l’affichagede votre ligneSeul le meilleur score est conservé pour chaque personne et chaquecircuit

Vincent Guigue LI260 - Course de Voiture 27/28

Page 28: Cours 3 : Stratégie Radar - guigue/wikihomepage/uploads/Course/LI260_2013... · Pbs divers Radar Stratégies composites Simulateur de référence Eclipse Import ... Pbs divers Radar

Pbs divers Radar Stratégies composites Simulateur de référence

Conduite sans dérapage

Rappel :Dans un premier temps, ne pas implémenter le dérapage, il seratoujours temps de le remettre après...

◦ Ne pas modifier Voiture◦ Simplifier VoitureImpl (avec une éventuellement une exception)◦ Rendre vos stratégies robustes...

1 // m e i l l e u r f a i s c e a u2 i n t i n d e xBe s tFa i s c e au = rada r . g e tBe s t I nd e x ( ) ;3 // commande a s s o c i é e4 Commande c = al lCom [ i n d e xBe s tFa i s c e au ] ;5 // c o r r e c t i o n de l a commande pour é v i t e r l e dé rapage6 double turnAbs = Math . min ( Math . abs ( c . getTurn ( ) ) ,7 ca r . getMaxTurnSansDerapage ( ) ) ;89 re tu rn new Commande( c . getAcc ( ) , turnAbs ∗ Math . signum ( c . getTurn ( ) ) ) ;

Vincent Guigue LI260 - Course de Voiture 28/28