L'optimisation continue consiste à trouver des solutions dans un domaine continue satisfaisant un certain nombre de contraintes continues.
On adopte une notation qui s'inspire de la thermodynamique et des réseaux de neurones. Étant donné une fonction `f` de `RR` vers `RR`, on considère qu'elle s'applique par défaut sur `x` en la déclarant ainsi :
`f : x|->f(x)`
Dès lors l'expression `f`, apparaissant dans une équation où l'on attend un nombre réel, représentera la valeur `f(x)`.
Tout se passe comme si nous étions dans un système physique possédant deux variables d'état `f` et `x`, et que nous affirmions d'une part, que la variable `f` ne dépend que de la variable `x`, et d'autre part que la variable de nom "`x`" constitue un système de coordonnés implicite pour la variable `f`, faisant que la valeur `f` est défini par défaut en `x`, ce qui s'écrit `f = f(x)`.
La définition `f : x|->f(x)` s'appel un neurone. Elle détermine les relations de dépendance nécessaires pour le calcul de f et fixe par défaut un système de coordonnés pour `f`.
La notation différentielle se forrmalise grâce aux corps des hyperréels. On construit le corps des hyperréels notés `"*"RR`, possédants des nombres infiniment grands et infiniment petits, simplement en effectuant une extension élémentaire du corps ordonnée des réels, en lui ajoutant un nouvel élément noté `omega` qui possède la propriété d'être plus grand que tous les réels.
`AA r in RR, r < omega`
`omega` est ce que l'on appelle un nombre transfinie, qui va au delà de la finitude, et qui représente un infiniment grand particulier. Le corps des hyperréels est trés grand. Il comprend une partie qui est un `RR`-espace vectoriel de dimension infinie dont une base est donnée par la suite suivante :
`..., 1/(omega^n), ..., 1/(omega^3), 1/(omega^2), 1/omega, 1, omega, omega^2, omega^3, ..., omega^n, ...`
Le corps des hyperréels, comme le corps des réels, est clos par les suites de Cauchy modulo l'égalité de convergence entres suites de Cauchy.
Le corps des hyperréels n'est pas archimédien. Etant donné deux hyperréels strictements positifs, la multiplication de l'un par un entier peut ne jamais pouvoir dépasser l'autre.
Les hyperréels sont classés selon leur ordre de grandeur. Deux hyperréels `u` et `v` sont de même ordre de grandeur ssi ils sont archimediens entre eux, c'est à dire s'il existe un entier `K` tel que `Ku>v` et s'il existe un entier `L` tel que `Lv>u`. Et les ordres de grandeurs forment un ensemble ordonné.
Remarquez qu'entre `1` et `omega`, il existe des ordres de grandeurs intermédiaires. En effet, on peut définir la racine carré par une suite de cauchy calculable. Et `sqrt(omega)` constitue bien un infini d'un ordre plus petit que `omega`.
La notation de Landau, `O`, inventé par le mathématicien Edmund Landau (Allemagne 1877 - 1938) permet de comparer des suites de réels selon les façons dont elles convergent mutuellement. On l'adapte ici pour pouvoir comparer les hyperréels entre eux. On note `u = O(v)` ssi l'ordre de `u` est inférieur ou égale à l'ordre de `v`, autrement dit, ssi il existe un entier `K` tel que `K|v|>|u|`. Par définition nous avons :
`u = O(v) iff EE K in NN, K|v|>|u|`
L'infiniment petit de premier ordre se note `epsilon`, et est définie par `epsilon = 1"/"omega`. C'est un hyperéel strictement positif qui possède la propriété de l'infiniment petit, à savoir `epsilon > 0` et `AA K in NN, Kepsilon < 1`. Le corps des hyperréels contient un `RR`-espace vectoriel de dimension infinie dont une base est donnée par la suite `..., epsilon^-n, ..., epsilon^-3, epsilon^-2, epsilon^-1, 1, epsilon, epsilon^2, epsilon^3, ..., epsilon^n, ...`
Etant donné un système physique possédant des variables d'état `f` et `x` obéissant à une loi dérivable et qui possède une liberté de mouvement. On peut alors considérer un mouvement infinitésimal de l'état du système caractérisé par les variations infinitésimales de chaque variable d'état `df` et `dx` dans le respect de sa loi.
A notre échelle, à l'échelle réel, on fait le choix de négliger les infiniment petits dans le résultat de la fonction `f` comme si nous ne retenions que la partie réels du résultat. Cela revient à définir la fonction `f` par le neurone `f : x|->f(x) + O(epsilon)`. Cela signifie que l'on néglige la présence de composantes infiniment petites (en nombre réel) dans la valeur de `f`.
La variable `x` pouvant évoluer librement, on définie une nouvelle variable d'état `dx` mais dont la valeur est un infiniment petit du premier ordre. Dans la suite de l'exposé on choisie`dx = epsilon`.
La différentielle de `f` est définie par `df =f(x+dx)-f(x)`.
La fonction `f` est dérivable ssi `f` varie de façon infiniment petite, c'est à dire ssi `df = O(epsilon)`. Autrement dit `f` est dérivable ssi `f(x+dx)=f(x)+O(epsilon)`. Lorsque `f` est dérivable, on définie une nouvelle variable d'état `df` d'ordre `O(epsilon)` c'est à dire dont l'ordre de grandeur est inférieur ou égale à celui d'`epsilon`. Dans la suite de l'exposé on pose `f` dérivable et donc `df = O(epsilon)`.
Concernant `df`, à l'échelle des infiniment petits du premier ordre, c'est à dire à l'échelle d'`epsilon`, on fait le choix de négliger les infiniment petits d'ordre 2 et supérieur dans le résultat de la fonction `df` comme si nous ne retenions dans le résultat que la partie infiniment petite du premier ordre. Cela revient à définir la fonction `df` par le neurone `df : x|->df(x) + O(epsilon^2)`. Et cela signifie bien que l'on néglige la présence de composantes infiniment petites d'ordre 2 ou supérieur dans la valeur de `df`. Puis par définition de la différentielle on peut développer ce neurone `df : x|->f(x+dx)-f(x)+O(epsilon^2)`.
Cette approximation obtenue en ajoutant un flou en `O(epsilon^2)` est nécessaire pour que le système ne soit déterminé que par les valeurs réels (et non hyperréels) de ces variables d'état réels, et également en dans des termes équivalents pour ses variables d'état des autres ordres de grandeur.
La variable `dx` pouvant évoluer librement, on définie une nouvelle variable d'état `ddx` noté `d^2x` mais dont la valeur est un infiniment petit du second ordre. Dans la suite de l'exposé on choisie `d^2x = epsilon^2`.
La différentielle double de `f` s'obtient en appliquant deux fois la différentielle `ddf =df(x+dx)-df(x)`que l'on note `d^2f =df(x+dx)-df(x)`.
---- 7 juillet 2015 ----
La fonction `df` est dérivable si elle varie de façon infiniment petite relativement à son échelle qui est déjà en `epsilon`, c'est à dire si elle varie de façon infiniment petite d'ordre 2, `d^2f = O(epsilon^2)`. Autrement dit `df` est dérivable si `df(x+dx)=df(x)+O(epsilon^2)`. Lorsque `df` est dérivable, on définie une nouvelle variable d'état `d^2f` dont l'ordre de grandeur est celui d'`epsilon^2`. Dans la suite de l'exposé on pose `df` dérivable et donc `d^2f = O(epsilon^2)`.
Concernant `d^2f`, à l'échelle des infiniment petits du second ordre, c'est à dire à l'échelle d'`epsilon^2`, on fait le choix de négliger les infiniment petits d'ordre 3 et supérieur dans le résultat de la fonction `d^2f` comme si nous ne retenions dans le résultat que la partie infiniment petite du second ordre. Cela revient à définir la fonction `d^2f` par le neurone `d^2f : x|->d^2f(x) + O(epsilon^3)`. Et cela signifie bien que l'on néglige la présence de composantes infiniment petites d'ordre 3 ou supérieur (en nombre réel) dans la valeur de `d^2f`. Puis par définition de la différentielle on peut développer ce neurone `d^2f : x|->df(x+dx)-df(x)+O(epsilon^3)`.
Puis itérativement, on définie une nouvelle variable d'état `d^nx` dont la valeur est un infiniment petit d'ordre `n`. La différentielle `n`-ième de `f` est `d^nf =d^(n-1)f(x+dx)-d^(n-1)f(x)`
La fonction `d^nf` est dérivable si elle varie de façon infiniment petite d'ordre 1 relativement à son échelle qui est déjà en `epsilon^n`, c'est à dire si elle varie de façon infiniment petite d'ordre `n+1`, `d^(n+1)f = O(epsilon^(n+1))`. Autrement dit `d^nf` est dérivable si `d^nf(x+dx)=d^n f(x)+O(epsilon^(n+1))`. Lorsque `d^nf` est dérivable, on définie une nouvelle variable d'état `d^(n+1)f` dont l'orde de grandeur est celui d'`epsilon^(n+1)`.
Concernant `d^nf`, à l'échelle des infiniment petits du n-ième ordre, c'est à dire à l'échelle d'`epsilon^n`, on fait le choix de négliger les infiniment petits d'ordre `n+1` et supérieur dans le résultat de la fonction `d^nf` comme si nous ne retenions dans le résultat que la partie infiniment petite d'ordre n. Cela revient à définir la fonction `d^nf` par le neurone `d^nf : x|->d^nf(x) + O(epsilon^(n+1))`. Et cela signifie bien que l'on néglige la présence de composantes infiniment petites d'ordre `n+1` ou supérieur (en nombre réel) dans la valeur de `d^nf`. Puis par définition de la différentielle on peut développer ce neurone `d^nf : x|->d^(n-1)f(x+dx)-d^(n-1)f(x)+O(epsilon^(n+1))`.
Une part importante du calcul infinitésimal s'appuit sur le développement de Taylor. La variable `f` ne dépendant que de `x` admet des dérivées successives par rapport à `x` que l'on note `(f, f', f'', f''', f'''', ..., f^((n)))` ou bien `(f^((0)), f^((1)), f^((2)), f^((3)), ..., f^((n)))`. Si la fonction `f` est dérivable `n` fois. Chacune de ces dérivées est une variable d'état ne dépendant que de la coordonnée `x` et implicitement appliquée à `x`, ce qui s'écrit :
Dérivée Différentielle Opérateur dérivée `f' = f'(x)` `(df)/dx = (df)/dx(x)` `d/dx f= d/dx f(x)` `D_x f= D_x f(x)` `f''= f''(x)` `(d^2f)/dx^2 = (d^2f)/dx^2(x)` `d^2/dx^2 f= d^2/dx^2 f(x)` `D_x^2 f= D_x^2 f(x)` `f'''= f'''(x)` `(d^3f)/dx^3 = (d^3f)/dx^3(x)` `d^3/dx^3 f= d^3/dx^3 f(x)` `D_x^3 f= D_x^3 f(x)` `f^((n))= f^((n))(x)` `(d^nf)/dx^n = (d^nf)/dx^n(x)` `d^n/dx^n f= d^n/dx^n f(x)` `D_x^n f= D_x^n f(x)`
Notez que l'expression `dx^2` signifie `dxdx` et non `d(x^2)`.
Nous avons le développement de Taylor :
`f(x+dx) = f(x) + f'(x)dx + f''(x)dx^2/2 + f'''(x)dx^3/(3!) + ... + f^((n))(x)dx^n/(n!) + O(epsilon^(n+1))`
On choisi souvent `dx = epsilon` et on utilise la notation abrégée `f^((n)) = f^((n))(x)`. La série de Taylor s'écrit :
`f(x+dx) = f + f^((1))dx + f^((2))dx^2/2 + f^((3))dx^3/(3!) + ... + f^((n))dx^n/(n!) + O(dx^(n+1))`
La méthode shadok est la plus simple des méthodes. Elle s'applique aussi bien dans les cas continues que discrets. Elle consiste a essayer des valeurs au hasard et à ne retenir que celles satisfaisant les contraintes posées `P`. On considère la suite `[x_i] = [x_0, x_1,x_2,...]` de nombres au hasard compris dans un interval de recherche `]a, b[`, et on ne retient que les valeurs `x_i` satisfaisants les contraintes posées `P(x_i)`. Cette méthode n'est utilisable que si les contraintes `P` ne sont pas trops restrictives.
Si les contraintes s'expriment sous la forme d'une fonction de gain qu'il faut maximiser alors chaque solution possède un gain, et les solutions sont ordonnées selon ce gain. Il faut alors faire le choix d'une heuristique sur la conservation des solutions, dans le but de préserver en même temps les solutions de meilleur gain et la diversité des solutions.
Nous voulons trouver de façon approchée des racines de `f` c'est à dire des valeurs de `x` telle que la fonction s'annule, `f(x)=0`. Le qualificatif approchée signifie rechercher une valeur `x` tel que `|f(x)|` soit trés petit.
On considère un système physique possédant deux variables d'état `f` et `x` liées par le neurone `f : x|->f(x)` et on cherche des états de ce système tel que `f =0` ou plus exactement que `|f|` est trés petit.
Une variable `f` définie par le neurone `f : x|->f(x)` et dont la dérivé est bornée par `k<1`, c'est à dire telle que `f' in ]-k,+k[`, admet un unique point fixe noté `x_oo`. Et toute suite `[x_i] = [x, f(x), f(f(x)), f(f(f(x))),...]` converge vers ce point avec une rapidité de convergence `|x_n - x_oo|<|k^n - x_oo|`.
Chaque itération `x:=f(x)` augmente la précision de la racine de `k`.
--- 5 juiller 2015 ---
`f'` désigne une troisième variable d'état dépendant complètement de `f` et de `x`, et donc dépendant complètement que de `x`. Elle est définie par le neurone `f' : x|->f'(x)` et par l'égalité suivante :
`f' = lim_(delta->0) (f(x+delta)-f)/delta`
Grâce aux hyperréels, on peut remplacer cette limite par une fraction dans le corps des nombres hyperréels :
`f' = (f(x+dx)-f)/dx`
Notez que par défaut `f = f(x)`, `f' = f'(x)` et pour désigner la valeur de `f` et de `f'` appliqué à une autre valeur que `x`, il faut mentionner explicitement la coordonnée en question comme par exemple `f(x+dx)` pour désigne la valeur `f` à la coordonnée `x+dx`.
Néanmoins ce n'est pas la formule hyperréel qui nous intéresse, mais celle réel :
`f' = (f(x+dx)-f)/dx + O(dx)`
Ce qui se traduit par le dévelopement de Taylor associé :
`f(x+dx) = f + f'dx + O(dx^2)`
Une fonction dérivable `f` admet le développement de Taylor suivant :
`f(x+dx) = f + f'dx + O(dx^2)`
On pose une valeur `x` initiale et on cherche la variation `dx` telle que `x+dx` soit égal à la racine de `f`, c'est à dire telle que `f(x+dx)=0`.
`dx = (f(x+dx)-f)/(f') + O(dx^2)`
`dx = -f/(f') + O(dx^2)`
L'algorithme de recherche de la racine consiste à répéter l'itération suivantes :
`x := x - f/(f')`
(Le symbole := désigne une instruction impérative d'un programme qui va changer la valeur de `x`.)
---- 3 juillet 2015 ----
Étant donné une fonction `f` de `RR^2` vers `RR`. Nous voulons trouver de façon approchée une racine `v`, c'est à dire telle que `f(v)=0`.
Le vecteur `v` comprend deux composantes : `v = (x,y)`
La dérivé de `f` comprend deux composantes : `f' = ( (del f)/(del x), (del f)/(del y) )`
Par défaut la fonction, ses dérivés totales ou partielles, sont appliqués à `(x,y)`. On note indifféremment :
`f(v) = f(x,y)`
`f("("x,y")") = f(x,y)`
`f = f(x,y)`
`f' = f'(x,y)`
`(del f)/(del x) = (del f)/(del x)(x,y)`
`(del f)/(del y) = (del f)/(del y)(x,y)`
Le développement de Taylor donne l'approximation suivante :
`f(v+dv) = f + f'*dv+ O(dv*dv)`
`f((x,y)+(dx,dy)) = f + ((del f)/(del x), (del f)/(del y))*(dx,dy) + O((dx,dy)*(dx,dy))`
`f(x+dx,y+dy) = f + (del f)/(del x)dx + (del f)/(del y)dy + O(dx^2+dy^2)`
Comme les variables sont considérée de poids égal ou de même échelle, on choisie |dx| = |dy| tel que `f(x+dx,y+dy)=0`. Cela revient à ressoudre le système linéaire suivant où s peut valoir -1 ou +1:
`( ((del f)/(del x), (del f)/(del y)),(1, s))((dx),(dy)) = ((-f),(0))`
Étant donné une fonction `f` de `RR` vers `RR`.Nous voulons trouver de façon approchée une racine `x`, c'est à dire telle que a fonction s'annule, `f(x)=0`.
Nous voulons trouver de façon approchée un extrémum `x`, c'est à dire telle que la dérivé s'annule, `f'(x)=0`.
teste chaque valeur avec comme critère la minimalisation de `|f(x)|` si on cherche une racine, ou la maximalisation de `|f(x)|` si on cherche un extrémum.
--- 29 juin 2015 ---
1.2) Résolution d'équation polynomiale `a_0 + a_1x + a_2x^2 + a_3x^3 + ... + a_nx^n = 0`