Problème infinitésimal

Olympiades mathématiques, énigmes et défis
bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

Problème infinitésimal

par bleumiel » 06 Juil 2014, 07:03

Bonjour,

Voici un casse-tête pas si petit que ça, à mes yeux en tout cas, et bien qu'il s'agisse d'un problème de différentiel je ne ferai l'analogie avec l'automobile que pour vous l'exposer, en version intégrale... :lol3:

Deux véhicules, disons F et G, roulent en ligne droite, vous conduisez F et devez faire en sorte de rester côte à côte avec G, qui n'en fait qu'à sa tête. Vous connaissez sa position et sa vitesse à un instant t mais ne savez rien de l'instant t+1, si ce n'est qu'il ne s'arrêtera pas, ni ne reculera.
G n'est pas limité, accélération et vitesse théoriquement infinies (un véhicule magique sans doute)... Mais vous, F, n'avez pas cette chance, vous avez une vitesse bornée, entre Vmin et Vmax. Vous ne pouvez pas non plus reculer, Vmin pourrait être zéro, mais si ça pose problème (qui a dit "division par zéro" ? :error:) on peut considérer qu'elle est strictement positive. En plus de ça votre accélération est elle aussi limitée entre Amin et Amax, qui sont relatives à votre vitesse ! Amin = -c.V et Amax = +c.V (c représentant ici un pourcentage autorisé de la variation de vitesse).

Je n'ai pas encore trouvé la solution, ça fait un petit moment que je me creuse la tête. L'idée est d'écrire un programme qui calcule le déplacement de F en fonction de la vitesse de G qui varie plus ou moins aléatoirement au cours du temps, si possible de manière analytique directe (je tends à croire qu'une telle solution existe), sinon via une méthode numérique itérative...

Merci d'avance pour vos neurones brûlés,
-François.



Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 06 Juil 2014, 12:10

Salut,
désolé, mais... j'ai pas compris où se situais la question dans ton post (ni vraiment l'énoncé d'ailleurs...:cry:)

Il semblerais que ce soit le "... faire en sorte de rester côte à côte avec G..." mais il y a des tas de truc pas clairs du tout :
L'inconnue c'est la fonction t->F(t) ? C'est des fonction de R->R ou c'est discret (vu ton G(t+1)) ?
La fonction G, c'est une V.A.R. ? Si oui, elle suit quelle loi ? ("...la vitesse de G qui varie plus ou moins aléatoirement" ???)
Tu veut calculer la proba qu'il soit possible d'avoir F(t)=G(t) pour tout t de [a,b] ?
Ou bien c'est de l'optimisation et tu veut le min d'un truc style intégrale de a à b de |F-G|² ?
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 06 Juil 2014, 12:53

[CENTER] [/CENTER]

bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

par bleumiel » 06 Juil 2014, 13:01

Ok, je vais essayer d'éclaircir tout ça, j'ai un cerveau de programmeur, pas de mathématicien. :we:
L'idée c'est d'optimiser F à chaque itération d'une boucle d'un programme, où G varie.
Le but est de trouver une fonction qui prend en entrée les paramètres précédents (à l'instant t0) de F et G (position, vitesse, accélération) et les paramètres courants (à l'instant t1) de G uniquement, pour donner en sortie les nouveaux paramètres (à l'instant t1) de F pour minimiser l'écart entre les paramètres de F et G (dans le but d'avoir la même position, même vitesse), et en suivant les contraintes indiquées (vitesse et accélération de F limitées).
Ça n'est pas exactement t et t+1, mais t0 et t1 où t1 = t0 + dt, le delta de temps étant variable lui aussi ! Donc dt est un paramètre d'entrée de la fonction.
Je rajouterais que pour les calculs on peut considérer que G va conserver sa vitesse, comme ça on doit pouvoir anticiper dans combien de temps on va pouvoir se caler à sa hauteur, en adoptant sa vitesse à ce moment là. Ça n'est donc pas simplement accélérer comme un bourrin pour le rattraper, mais trouver la bonne accélération pour avoir le temps de décélérer en arrivant à son niveau. Et à la prochaine itération du programme on réadapte avec les nouvelles données de G, etc...
J'espère que c'est un peu plus clair.

bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

par bleumiel » 06 Juil 2014, 13:06

Cliffe a écrit:[CENTER] [/CENTER]

Là tu tendras effectivement à avoir la même vitesse, mais tu ne prends pas en compte l'écart de position entre les véhicules qu'il faut aussi minimiser.

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 06 Juil 2014, 13:11

bleumiel a écrit:Là tu tendras effectivement à avoir la même vitesse, mais tu ne prends pas en compte l'écart de position entre les véhicules qu'il faut aussi minimiser.


Ouai j'ai répondu trop vite :ptdr:

Le résonnement est le mm. A chaque itération on essaye de le rattraper, soit on y arrive (alors Ft = Gt) soit on y arrive pas (alors on accélère/décélère au max pour approcher au mieux).

bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

par bleumiel » 06 Juil 2014, 13:22

Ça fonctionnera mais ça ne sera pas optimal, on va avoir un effet oscillatoire que je voudrais éviter.
Je m'explique: Si tu accélères au max pour t'en rapprocher tu vas potentiellement aller trop vite à l'itération suivante et le dépasser car tu n'auras plus le temps de décélérer suffisamment ! Alors que si tu avais accéléré modérément tu pourras venir t'aligner gentiment à son niveau :)

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 06 Juil 2014, 13:24

Tu connais pas l'état de G dans le futur. Donc tu peut rien optimiser.

bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

par bleumiel » 06 Juil 2014, 13:30

Cliffe a écrit:Tu connais pas l'état de G dans le futur. Donc tu peut rien optimiser.

Effectivement, du coup je rajoute qu'on peut supposer que G conservera sa vitesse. Ses accélérations ou freinages brutaux sont disons "exceptionnels".

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 06 Juil 2014, 14:10

L'accélération de G est constante ?

ARIMA
Membre Naturel
Messages: 34
Enregistré le: 15 Juin 2014, 17:09

par ARIMA » 06 Juil 2014, 14:25

Bonjour,
ce qui se conçoit bien s'énonce clairement et les mots pour le dire viennent aisément ...

Tu n'as toujours pas défini quelle était le vrai critère qui rend une solution optimale, c'est à dire une solution.

Que veux-tu faire réellement? Qu'est-ce qui ferait qu'une solution est meilleure qu'une autre?

Si G varie de façon aléatoire, quelle loi de probabilité suit-il?

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 06 Juil 2014, 14:26

bleumiel a écrit:Ça fonctionnera mais ça ne sera pas optimal, ...
Optimal en quel sens du terme ?
Tu parle plus haut de "minimiser l'écart entre les paramètres de F et G", sauf que l'écart |G-F|, c'est pas uniquement une valeur numérique constante, c'est une fonction et... il n'y a pas de relation d'ordre totale sur les fonctions...

Donc c'est quoi que tu veut minimiser ? (l'intégrale/somme des écarts ? le max de écarts ? autre chose ?)
Par exemple, la solution proposée par Cliffe (accélérer au max) est clairement celle qui permet d'avoir le plus rapidement possible un écart très faible, mais l'écart réaugmente ensuite.
Visiblement, pour toi, ce n'est pas bon (alors qu'avec une autre méthode, à cet instant là l'écart aurait été plus grand).
Peut tu donner un truc utilisable mathématiquement sur le pourquoi "ce n'est pas bon" ?
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

par bleumiel » 06 Juil 2014, 14:51

Ok, supposons que G a une vitesse constante. Je veux savoir à quelle vitesse doit aller F à l'instant présent pour se trouver le plus rapidement possible dans le futur à la même position et la même vitesse que G sans jamais le dépasser (qu'il soit devant ou derrière à la base).
Désolé le problème n'était pas très clair pour moi non plus au départ.

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 06 Juil 2014, 15:37

A) ça va pas toujours être possible : si par exemple tu est pas très loin derrière G mais avec une vitesse beaucoup plus grandes, tes contraintes vont faire que tu va forcément le doubler.

B) si tu est suffisamment loin/lent pour arriver à ne pas le doubler, il me semble assez clair qu'il faut accélérer à fond jusqu'au moment où, en décélérant à fond tu arrive a son niveau à la même vitesse que lui : il te suffit de calculer pour une distance donnée D entre toi et lui la vitesse V que tu aurait au moment où tu le rattrape si tu décélérait à fond tout le temps. Si Vça, c'est l'optimum pour le cas "continue".
Pour ton cas (discret), il faut en plus anticiper pour voir si, en accélérant à fond, au pas suivant tu aura encore le temps de freiner. Si ce n'est pas le cas, tu n'accélère pas "à fond", voir tu commence à ralentir.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 06 Juil 2014, 16:00

hello,

un petit graphe pour promouvoir pixlr parce que gimp c'est :marteau: .

Image

le but c'est que la somme des carrés rouges égale la somme des carrés hachurés vert si la courbe des vitesses de F est la verte, bleue sinon.

Si on pose le carreau l'unité de temps, idem dt,
on peut écrire
Xg(n) = Vn + xg
avec xg la position initiale de G, V la vitesse de G à la position finale et n le temps ou les deux voitures ont même vitesse et même position.
Sur le schéma, xg est donné par les carrés hachurés tout à droite en rouge.

Pour calculer l'aire de la courbe bleue, on peut regarder à chaque bande [n,n+1]
l'aire d'une telle bande est donnée par
(V_(k+1) - V_k)/2 + V_k
le premier terme étant le triangle, et le second le rectangle.

Au final, on égale

en simplifiant, il vient (sauf erreur)


avec V_0 la vitesse initiale de F, et il faut choisir les V_k tels que
Xf(n) = Xg(n) = Vn+xg
et n minimal (n >=2)
l'égalité amène à

et en regroupant les termes connus sous la constante K on a


on voit que pour n = 2, il suffit de prendre V_1 = K (mais comme a dit ben précédemment pe qu'avec une telle valeur, la pente V_0,V_1 ou V_1,V_2 est trop importante, auquel cas, rajouter un deuxieme terme..

ps: je suis parti sur le principe que F est derrière, sinon il faut songer à interdire les vitesses négatives!
la vie est une fête :)

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 06 Juil 2014, 16:10

J'ai pas lu ske ta fait. Est-ce que ça marche pour un Vg non constant ?

bleumiel
Messages: 9
Enregistré le: 06 Juil 2014, 05:54

par bleumiel » 06 Juil 2014, 16:30

Ben314 a écrit:A) ça va pas toujours être possible : si par exemple tu est pas très loin derrière G mais avec une vitesse beaucoup plus grandes, tes contraintes vont faire que tu va forcément le doubler.

Il y a effectivement des cas où ça n'est pas possible comme tu le mentionnes, autre exemple genre si G va plus vite que notre vitesse max on ne l'atteindra jamais, etc... Dans ces cas là on se contente de la vitesse la moins pire, genre là on blinde à mort, ou dans ton exemple on ralentit au maximum pour le dépasser le moins possible.

Ben314 a écrit:B) si tu est suffisamment loin/lent pour arriver à ne pas le doubler, il me semble assez clair qu'il faut accélérer à fond jusqu'au moment où, en décélérant à fond tu arrive a son niveau à la même vitesse que lui : il te suffit de calculer pour une distance donnée D entre toi et lui la vitesse V que tu aurait au moment où tu le rattrape si tu décélérait à fond tout le temps. Si V<la vitesse de autre tu continue à accélérer a fond, sinon tu décélère.
ça, c'est l'optimum pour le cas "continue".
Pour ton cas (discret), il faut en plus anticiper pour voir si, en accélérant à fond, au pas suivant tu aura encore le temps de freiner. Si ce n'est pas le cas, tu n'accélère pas "à fond", voir tu commence à ralentir.

Est-ce que accélération max puis décélération max est la seule solution ? J'ai l'impression qu'il existe tout un panel de courbes de vitesse possibles pour atteindre notre objectif pour un même temps minimal, dans ce cas je voudrais privilégier la courbe la plus "lisse" possible (conduite souple plutôt que sportive).

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 06 Juil 2014, 16:43

bleumiel a écrit:Est-ce que accélération max puis décélération max est la seule solution ? J'ai l'impression qu'il existe tout un panel de courbes de vitesse possibles pour atteindre notre objectif pour un même temps minimal, dans ce cas je voudrais privilégier la courbe la plus "lisse" possible (conduite souple plutôt que sportive).
Tel que tu pose l'énoncé, je suis persuadé que la réponse optimale (en terme de temps mis pour rattraper l'autre) est en "tout ou rien", i.e. il faut tout le temps soit accélérer à fond, soit décélérer à fond.
Des conduites plus "cool" mèneront forcément à un allongement du temps mis pour rattraper G.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Groucho
Membre Naturel
Messages: 67
Enregistré le: 14 Mai 2014, 13:19

par Groucho » 07 Juil 2014, 12:49

Ben314 a écrit:Tel que tu pose l'énoncé, je suis persuadé que la réponse optimale (en terme de temps mis pour rattraper l'autre) est en "tout ou rien", i.e. il faut tout le temps soit accélérer à fond, soit décélérer à fond.
Des conduites plus "cool" mèneront forcément à un allongement du temps mis pour rattraper G.


Il faut peu être ajouter un tronçon à vitesse maximale constante entre l’accélération et la décélération si la voiture G a trop d'avance.

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 07 Juil 2014, 15:05

re, j'ai un peut réfléchi ce matin et j'ai essayer de le mettre sous forme d'un problème d'optimisation en gardant les mm notations : pdf .
Mais tu pourras pas le résoudre avec une simple fonction en C++ ^^.

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 18 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite