1. premièrement nous avons essayé de comprendre le principe de l' algorithme de la boule pesante, pourquoi "boule pesante".

L'algorithme de la boule pesante (Heavy Ball Method) est une technique d'optimisation non linéaire qui permet de dénicher le plus vite possible l'un des minima d'une fonction. C'est en réalité une amélioration de la descente de gradient classique dont le principe ne dispose pas à l'accélération dans la recherche du minimum. Pour donc éviter de tomber sur un minimum local inefficient, on emploie l'algorithme de la boule pesante pour survoler (sauter) certains cas en espérant trouver un minimum efficient; autrement dit, on l'emploie pour parcourir les cas plus vite. C'est justement ce qui donne lieu à la relation de vitesse de parcours des paramètres de l'algorithme : vₖ₊₁ = γ·vₖ - α·∇f(θₖ) où α est le pas d'apprentissage, ∇f(θₖ) le gradient de la fonction coût appliquée aux paramètres à l'étape k, γ un facteur de régularisation de la vitesse et vₖ, la vitesse à l'étape k. L'idée de l'analogie due au principe est ainsi clarifiée : la vitesse avec laquelle les cas sont parcourus à l'étape k influencera la vitesse à laquelle les paramètres seront parcourus à l'étape k+1. À chaque étape k, on vérifie si les paramètres θₖ testés sont optimaux; s'ils ne sont pas optimaux on survole les cas qui précèdent θₖ + vₖ₊₁ pour aller directement refaire le test avec θₖ + vₖ₊₁. C'est de là que vient la deuxième relation principale de l'algorithme de la boule pesante : θₖ₊₁ = θₖ + vₖ₊₁.





2. Deuxièmement nous avons cherché un domaine d'application de l'algorithme de la boule pesante : Optimisation des paramètres de lancement d'un projectile qui perdra de la masse (masse du fluide de ravitaillement) pour minimiser l'écart entre l'abscisse de la position du projectile et l'abscisse d'une cible à un instant.

À l’heure où l’équilibre mondial repose sur une hégémonie nucléaire toujours plus fragile, la supériorité d’une nation ne se mesure plus à la simple puissance de son arsenal, mais à son niveau de précision dans l’armement de haute technologie




2.1 - étude phhysique du mouvement du projectile


2.1.1 - Masse de gaz restante dans le projectile : m_restante(t) = m₀·exp(-λt)

À t = 0 : m_restante(0) = m₀ (tout le carburant est présent)
Quand t → ∞ : m_restante → 0 (le carburant est épuisé)


2.1.2 - Masse de gaz consommée (échappée) : m_consommée(t) = m₀(1 - exp(-λt))

À t = 0 : m_consommée(0) = 0 (rien n'a été consommé)
Quand t → ∞ : m_consommée → m₀ (tout a été consommé)


2.1.3 - Masse totale du projectile : M(t) = M₀ + m₀·exp(-λt)

À t = 0 : M(0) = M₀ + m₀ (masse structure + carburant complet)
Quand t → ∞ : M(∞) → M₀ (il ne reste que la structure)


2.1.4 - Débit massique (pour la poussée) : dM/dt = -λ·m₀·exp(-λt)


2.1.5 - Force de poussée : F_poussée = V_e · λ · m₀ · exp(-λt)

Puisque dM/dt = -λ·m₀·exp(-λt) (négatif car la masse diminue), on a :
F_poussée = -V_e · (-λ·m₀·exp(-λt)) = V_e · λ · m₀ · exp(-λt)
où V_e est la vitesse d'éjection relative des gaz


2.1.6 - La traînée aérodynamique de l'air sur les parois du projectile : F_traînée,x = -½·ρ·C_x·A_x·V_r²

ρ est la masse volumique de l'air,
C_x représente le facteur des perturbations qui affectent le projectile dans la direction x
A_x représente la surface du projectile pressée par les fluctuations atmosphériques dans la direction x
V_r est une constante représentant l'intensité globale des perturbations atmosphériques



2.2 - On a dû établir l'équation horaire du mouvement du projectile en x : x(t)

Après avoir établi l'équation différentielle qui résume le mouvement en x, on a pu établir l'expression de la vitesse en x en résolvant l'équation différentielle issue de l'application de la loi de Newton. Ayant alors l'expression de la vitesse, on a pu aisément établir celle de la distance balayée en abcisse : 

x(t) = [((M₀ + m₀)·Vo·cos(α) + m₀)/(λ·M₀)]·log[(M₀·exp(λt) + m₀)/(M₀ + m₀)] + (Ve/λ)·log[(M₀ + m₀·exp(-λt))/(M₀ + m₀)] + ½·ρ·C_x·A_x·V_r²·[(1/λ)·Li₂(-(M₀·exp(λt))/m₀ + t·log(m₀/(M₀·exp(λt)))]

où Li₂ est la fonction dilogarithme



2.3 - On a dû établir l'expression de notre fonction coût représentant de l'écart entre l'abcisse du projectile et l'abcisse cible à un instant t :

ε(t) = |x(t) - X|



2.4 - De là, on a donc pu établir l'expression du gradient de notre fonction coût par rapport à nos 3 variables de décision : l'angle de tir , la vitesse de propulsion et la vitesse d'éjection : 

grad_x = (-(M₀ + m₀)·Vo·sin(α)/(λ·M₀))·log((M₀·exp(λ·t) + M₀)/(M₀ + m₀)) + ((M₀ + m₀)·cos(α)/(λ·M₀))·log((M₀·exp(λ·t) + M₀)/(M₀ + m₀)) + (M₀/M₀)·(2·log((M₀·exp(λ·t) + M₀)/(M₀ + m₀)) - λ·t)



2.5 - Ayant donc l'expression du gradient de notre fonction coût, on a pû implémenter l'algorithme en ajustant les paramètres principaux et en respectant les contraintes

Exemple :

ALPHA_TEST <- 35
Vo_TEST <- 12
Ve_TEST <- 20
ALPHA_MIN <- 0
ALPHA_MAX <- 2·pi
Vo_MIN <- 30
Vo_MAX <- 90
Ve_MIN <- 7
Ve_MAX <- 24
HEAVY_ALPHA <- 0.001
HEAVY_GAMMA <- 0.83
LIMITE <- 150
TOLERANCE <- 0.006
DATE <- 5

ABCISSE_CIBLE <- 12779.2843
M_N <- 12
M_I <- 5
LAMBDA <- 0.02
V_E <- 22
Ro <- 0.01
A_X <- -8.33
C_X <- 4.345
V_R <- 0.47
ALPHA <- 0.41·pi
V_0 <- 80