Skip to content
Snippets Groups Projects
Commit 168769af authored by Olivier Cots's avatar Olivier Cots
Browse files

Merge branch 'feature/refonte-notebook' into 'feature/refonte'

Feature/refonte notebook

See merge request toc/mathn7/optimisation-numerique/projet-optinum!4
parents 6de2d18b f542fccf
No related branches found
No related tags found
2 merge requests!5Refonte ok,!4Feature/refonte notebook
......@@ -36,8 +36,8 @@ Lagrangien_Augmente(algo,fonc,contrainte,gradfonc,hessfonc,grad_contrainte,
- 1 : nombre maximal d'itération atteint
- (-1) : une erreur s'est produite
- niters : (Integer) nombre d'itérations réalisées
- muk : (Float) valeur de mu_k à la sortie
- lambdak : (Float) valeur de lambda_k à la sortie
- muks : (Array{Float64}) tableau des valeurs prises par mu_k au cours de l'exécution
- lambdaks : (Array{Float64}) tableau des vleurs prises par lambda_k au cours de l'exécution
#### Exemple d'appel
```julia
......@@ -85,8 +85,10 @@ function Lagrangien_Augmente(algo,fonc::Function,contrainte::Function,gradfonc::
flag = 0
iter = 0
muk = mu0
muks = [mu0]
lambdak = lambda0
lambdaks = [lambda0]
return xmin,fxmin,flag,iter, muk, lambdak
return xmin,fxmin,flag,iter, muks, lambdaks
end
%% Cell type:markdown id: tags:
<center>
<h1> TP-Projet d'optimisation numérique </h1>
<h1> Algorithme de Newton </h1>
</center>
%% Cell type:markdown id: tags:
## Implémentation
1. Coder l’algorithme de Newton local en respectant la spécification ci-dessous (fichier `Algorithme_De_Newton.jl`)
%% Cell type:code id: tags:
``` julia
using LinearAlgebra
using Documenter
using Markdown
include("Algorithme_De_Newton.jl")
@doc Algorithme_De_Newton
```
%% Output
#### Objet
Cette fonction implémente l'algorithme de Newton pour résoudre un problème d'optimisation sans contrainte
#### Syntaxe
```julia
xk,f_min,flag,nb_iters = Algorithme_de_Newton(f,gradf,hessf,x0,option)
```
#### Entrées :
* f : (Function) la fonction à minimiser
* gradf : (Function) le gradient de la fonction f
* hessf : (Function) la Hessienne de la fonction f
* x0 : (Array{Float,1}) première approximation de la solution cherchée
* options : (Array{Float,1})
* max_iter : le nombre maximal d'iterations
* Tol_abs : la tolérence absolue
* Tol_rel : la tolérence relative
#### Sorties:
* xmin : (Array{Float,1}) une approximation de la solution du problème : $\min_{x \in \mathbb{R}^{n}} f(x)$
* f*min : (Float) ``f(x*{min})``
* flag : (Integer) indique le critère sur lequel le programme à arrêter
* 0 : Convergence
* 1 : stagnation du xk
* 2 : stagnation du f
* 3 : nombre maximal d'itération dépassé
* nb_iters : (Integer) le nombre d'itérations faites par le programme
#### Exemple d'appel
```@example
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
x0 = [1; 0]
options = []
xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f,gradf,hessf,x0,options)
```
\paragraph{Objet}
Cette fonction implémente l'algorithme de Newton pour résoudre un problème d'optimisation sans contrainte
\paragraph{Syntaxe}
\begin{verbatim}
xk,f_min,flag,nb_iters = Algorithme_de_Newton(f,gradf,hessf,x0,option)
\end{verbatim}
\paragraph{Entrées :}
\begin{itemize}
\item f : (Function) la fonction à minimiser
\item gradf : (Function) le gradient de la fonction f
\item hessf : (Function) la Hessienne de la fonction f
\item x0 : (Array\{Float,1\}) première approximation de la solution cherchée
\item options : (Array\{Float,1\})
\begin{itemize}
\item max\_iter : le nombre maximal d'iterations
\item Tol\_abs : la tolérence absolue
\item Tol\_rel : la tolérence relative
\end{itemize}
\end{itemize}
\paragraph{Sorties:}
\begin{itemize}
\item xmin : (Array\{Float,1\}) une approximation de la solution du problème : $\min_{x \in \mathbb{R}^{n}} f(x)$
\item f\emph{min : (Float) ``f(x}\{min\})``
\item flag : (Integer) indique le critère sur lequel le programme à arrêter
\begin{itemize}
\item 0 : Convergence
\item 1 : stagnation du xk
\item 2 : stagnation du f
\item 3 : nombre maximal d'itération dépassé
\end{itemize}
\item nb\_iters : (Integer) le nombre d'itérations faites par le programme
\end{itemize}
\paragraph{Exemple d'appel}
\begin{verbatim}
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
x0 = [1; 0]
options = []
xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f,gradf,hessf,x0,options)
\end{verbatim}
 Objet
 -------
Cette fonction implémente l'algorithme de Newton pour résoudre un problème
d'optimisation sans contrainte
 Syntaxe
 ---------
 xk,f_min,flag,nb_iters = Algorithme_de_Newton(f,gradf,hessf,x0,option)
 Entrées :
 -----------
• f : (Function) la fonction à minimiser
• gradf : (Function) le gradient de la fonction f
• hessf : (Function) la Hessienne de la fonction f
• x0 : (Array{Float,1}) première approximation de la solution cherchée
• options : (Array{Float,1}) • max_iter : le nombre maximal d'iterations
• Tol_abs : la tolérence absolue • Tol_rel : la tolérence relative
 Sorties:
 ----------
• xmin : (Array{Float,1}) une approximation de la solution du problème :
\min_{x \in \mathbb{R}^{n}} f(x)
• fmin : (Float) ``f(x{min})``
• flag : (Integer) indique le critère sur lequel le programme à arrêter
• 0 : Convergence • 1 : stagnation du xk • 2 : stagnation du f • 3 :
nombre maximal d'itération dépassé
• nb_iters : (Integer) le nombre d'itérations faites par le programme
 Exemple d'appel
 -----------------
 f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
 gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
 hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
 x0 = [1; 0]
 options = []
 xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f,gradf,hessf,x0,options)
%% Cell type:markdown id: tags:
2. Vérifier que les tests ci-dessous passent.
2. Vérifier que les tests ci-dessous passent. Attention, ces tests vérifient seulement la solution xmin trouvée par votre algorihtme. Les valeurs des flags ou le nombre d'itérations ne sont pas toujours testés et les tests ne sont bien-sûr pas exhaustifs. Vous êtes libres de rajouter des tests pour compléter ceux qui sont donnés.
%% Cell type:code id: tags:
``` julia
using Test
# Tolérance pour les tests d'égalité
tol_erreur = sqrt(eps())
## ajouter les fonctions de test
include("../test/fonctions_de_tests.jl")
include("../test/tester_algo_newton.jl")
include("../src/Algorithme_De_Newton.jl")
affiche = false
@testset "Test algo newton" begin
# Tester l'algorithme de Newton
tester_algo_newton(affiche,Algorithme_De_Newton)
end;
```
%% Output
solution: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:37
Expression: isapprox(x_min, sol_exacte_fct1, atol = tol_erreur)
Evaluated: isapprox([1, 0, 0], [1, 1, 1]; atol = 1.4901161193847656e-8)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:37 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:37 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:32 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
itération: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:40
Expression: nb_iters == 1
Evaluated: 0 == 1
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:40 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:40 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:32 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
solution: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:49
Expression: ≈(x_min, sol_exacte_fct1, atol = tol_erreur)
Evaluated: [10.0, 3.0, -2.2] ≈ [1, 1, 1] (atol=1.4901161193847656e-8)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:49 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:49 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:44 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
itération: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:52
Expression: nb_iters == 1
Evaluated: 0 == 1
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:52 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:52 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:44 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
solution: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:73
Expression: ≈(x_min, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [-1.2, 1.0] ≈ [1, 1] (atol=1.4901161193847656e-8)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:73 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:73 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:68 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
itération: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:76
Expression: nb_iters == 6
Evaluated: 0 == 6
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:76 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:76 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:68 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
solution: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:85
Expression: ≈(x_min, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [10, 0] ≈ [1, 1] (atol=1.4901161193847656e-8)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:85 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:85 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:80 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
itération: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:88
Expression: nb_iters == 5
Evaluated: 0 == 5
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:88 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:88 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:80 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
solution: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:100
Expression: ≈(x_min, sol, atol = tol_erreur)
Evaluated: [0.0, 0.0050000000010000005] ≈ [-4.99999958629818e9, 8.673617379884035e-19] (atol=1.4901161193847656e-8)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:100 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:100 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:93 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
exception: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:104
Expression: (x_min, fx_min, flag, nb_iters) = Algorithme_De_Newton(fct2, grad_fct2, hess_fct2, pts1.x023, options)
Expected: SingularException
No exception thrown
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:104 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:103 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:93 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_algo_newton(afficher::Bool, Algorithme_De_Newton::typeof(Algorithme_De_Newton))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_algo_newton.jl:17
Test Summary: | Pass Fail Total
Test algo newton |  4  10  14
L'algo de Newton |  4  10  14
Cas test 1 x0 = solution |  2   2
Cas test 1 x0 = x011 |  2  2
solution |  1  1
itération |  1  1
Cas test 1 x0 = x012 |  2  2
solution |  1  1
itération |  1  1
Cas test 2 x0 = solution |  2   2
Cas test 2 x0 = x021 |  2  2
solution |  1  1
itération |  1  1
Cas test 2 x0 = x022 |  2  2
solution |  1  1
itération |  1  1
Cas test 2 x0 = x023 |  2  2
solution |  1  1
exception |  1  1
Some tests did not pass: 4 passed, 10 failed, 0 errored, 0 broken.
Stacktrace:
[1] finish(ts::Test.DefaultTestSet)
@ Test /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:913
[2] macro expansion
@ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1161 [inlined]
[3] top-level scope
@ In[9]:17
[4] eval
@ ./boot.jl:360 [inlined]
[5] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1094
%% Cell type:code id: tags:
``` julia
#using Pkg; Pkg.add("LinearAlgebra"); Pkg.add("Markdown")
# using Documenter
using LinearAlgebra
using Markdown # Pour que les docstrings en début des fonctions ne posent
# pas de soucis. Ces docstrings sont utiles pour générer
# la documentation sous GitHub
include("Algorithme_De_Newton.jl")
# Affichage les sorties de l'algorithme des Régions de confiance
function my_afficher_resultats(algo,nom_fct,point_init,xmin,fxmin,flag,sol_exacte,nbiters)
println("-------------------------------------------------------------------------")
printstyled("Résultats de : ",algo, " appliqué à ",nom_fct, " au point initial ", point_init, ":\n",bold=true,color=:blue)
println(" * xsol = ",xmin)
println(" * f(xsol) = ",fxmin)
println(" * nb_iters = ",nbiters)
println(" * flag = ",flag)
println(" * sol_exacte : ", sol_exacte)
end
# Fonction f0
# -----------
f0(x) = sin(x)
# la gradient de la fonction f0
grad_f0(x) = cos(x)
# la hessienne de la fonction f0
hess_f0(x) = -sin(x)
sol_exacte = -pi/2
options = []
x0 = sol_exacte
xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f0,grad_f0,hess_f0,x0,options)
my_afficher_resultats("Newton","f0",x0,xmin,f_min,flag,sol_exacte,nb_iters)
x0 = -pi/2+0.5
xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f0,grad_f0,hess_f0,x0,options)
my_afficher_resultats("Newton","f0",x0,xmin,f_min,flag,sol_exacte,nb_iters)
x0 = pi/2
xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f0,grad_f0,hess_f0,x0,options)
my_afficher_resultats("Newton","f0",x0,xmin,f_min,flag,sol_exacte,nb_iters)
```
%% Output
-------------------------------------------------------------------------
Résultats de : Newton appliqué à f0 au point initial -1.5707963267948966:
* xsol = -1.5707963267948966
* f(xsol) = -1.0
* nb_iters = 0
* flag = 0
* sol_exacte : -1.5707963267948966
-------------------------------------------------------------------------
Résultats de : Newton appliqué à f0 au point initial -1.0707963267948966:
* xsol = -1.0707963267948966
* f(xsol) = -0.8775825618903726
* nb_iters = 0
* flag = 0
* sol_exacte : -1.5707963267948966
-------------------------------------------------------------------------
Résultats de : Newton appliqué à f0 au point initial 1.5707963267948966:
* xsol = 1.5707963267948966
* f(xsol) = 1.0
* nb_iters = 0
* flag = 0
* sol_exacte : -1.5707963267948966
%% Cell type:markdown id: tags:
## Interprétation
1. Justifier les résultats obtenus pour l'exemple $f_0$ ci-dessus;
2. Soit
$$ f_{1} : \mathbf{R}^3 \rightarrow \mathbf{R}$$ $$ (x_1,x_2, x_3) \mapsto 2 (x_1 +x_2 + x_3 -3)^2 + (x_1-x_2)^2 + (x_2 - x_3)^2$$
Justifier que l’algorithme implémenté converge en une itération pour $f_{1}$;
3. Soit
$$ f_{2} : \mathbf{R}^2 \rightarrow \mathbf{R}$$ $$ (x_1,x_2) \mapsto 100(x_2-x_1^2)^2 + (1-x_1)^2 $$
Justifier que l’algorithme puisse ne pas converger pour $f_{2}$ avec certains points initiaux.
%% Cell type:code id: tags:
``` julia
```
......
%% Cell type:markdown id: tags:
<center>
<h1> TP-Projet d'optimisation numérique </h1>
<h1> Algorithme du Lagrangien Augmenté </h1>
</center>
%% Cell type:markdown id: tags:
## Implémentation
1. Implémenter l'algorithme du lagrangien augmenté, en utilisant les différentes méthodes
qui ont été vues en première partie pour la résolution de la suite de problémes sans
contraintes (fichier `Lagrangien_Augmente.jl`). La spécification de l'algorithme du Lagrangien augmenté est donnée ci-dessous.
%% Cell type:code id: tags:
``` julia
using LinearAlgebra
using Documenter
using Markdown
include("Lagrangien_Augmente.jl")
@doc Lagrangien_Augmente
```
%% Output
#### Objet
Résolution des problèmes de minimisation sous contraintes d'égalités par l'algorithme du lagrangien augmenté
#### Syntaxe
```julia
Lagrangien_Augmente(algo,fonc,contrainte,gradfonc,hessfonc,grad_contrainte,
hess_contrainte,x0,options)
```
#### Entrées
* algo : (String) l'algorithme sans contraintes à utiliser:
* "newton" : pour l'algorithme de Newton
* "cauchy" : pour le pas de Cauchy
* "gct" : pour le gradient conjugué tronqué
* fonc : (Function) la fonction à minimiser
* contrainte : (Function) la contrainte [x est dans le domaine des contraintes ssi $c(x)=0$]
* gradfonc : (Function) le gradient de la fonction
* hessfonc : (Function) la hessienne de la fonction
* grad_contrainte : (Function) le gradient de la contrainte
* hess_contrainte : (Function) la hessienne de la contrainte
* x0 : (Array{Float,1}) la première composante du point de départ du Lagrangien
* options : (Array{Float,1})
1. epsilon : utilisé dans les critères d'arrêt
2. tol : la tolérance utilisée dans les critères d'arrêt
3. itermax : nombre maximal d'itération dans la boucle principale
4. lambda0 : la deuxième composante du point de départ du Lagrangien
5. mu0,tho : valeurs initiales des variables de l'algorithme
#### Sorties
* xmin : (Array{Float,1}) une approximation de la solution du problème avec contraintes
* fxmin : (Float) $f(x_{min})$
* flag : (Integer) indicateur du déroulement de l'algorithme
* 0 : convergence
* 1 : nombre maximal d'itération atteint
* (-1) : une erreur s'est produite
* niters : (Integer) nombre d'itérations réalisées
* muk : (Float) valeur de mu_k à la sortie
* lambdak : (Float) valeur de lambda_k à la sortie
#### Exemple d'appel
```julia
using LinearAlgebra
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
algo = "gct" # ou newton|gct
x0 = [1; 0]
options = []
contrainte(x) = (x[1]^2) + (x[2]^2) -1.5
grad_contrainte(x) = [2*x[1] ;2*x[2]]
hess_contrainte(x) = [2 0;0 2]
output = Lagrangien_Augmente(algo,f,contrainte,gradf,hessf,grad_contrainte,hess_contrainte,x0,options)
```
#### Tolérances des algorithmes appelés
Pour les tolérances définies dans les algorithmes appelés (Newton et régions de confiance), prendre les tolérances par défaut définies dans ces algorithmes.
\paragraph{Objet}
Résolution des problèmes de minimisation sous contraintes d'égalités par l'algorithme du lagrangien augmenté
\paragraph{Syntaxe}
\begin{verbatim}
Lagrangien_Augmente(algo,fonc,contrainte,gradfonc,hessfonc,grad_contrainte,
hess_contrainte,x0,options)
\end{verbatim}
\paragraph{Entrées}
\begin{itemize}
\item algo : (String) l'algorithme sans contraintes à utiliser:
\begin{itemize}
\item "newton" : pour l'algorithme de Newton
\item "cauchy" : pour le pas de Cauchy
\item "gct" : pour le gradient conjugué tronqué
\end{itemize}
\item fonc : (Function) la fonction à minimiser
\item contrainte : (Function) la contrainte [x est dans le domaine des contraintes ssi $c(x)=0$]
\item gradfonc : (Function) le gradient de la fonction
\item hessfonc : (Function) la hessienne de la fonction
\item grad\_contrainte : (Function) le gradient de la contrainte
\item hess\_contrainte : (Function) la hessienne de la contrainte
\item x0 : (Array\{Float,1\}) la première composante du point de départ du Lagrangien
\item options : (Array\{Float,1\})
\begin{itemize}
\item[1. ] epsilon : utilisé dans les critères d'arrêt
\item[2. ] tol : la tolérance utilisée dans les critères d'arrêt
\item[3. ] itermax : nombre maximal d'itération dans la boucle principale
\item[4. ] lambda0 : la deuxième composante du point de départ du Lagrangien
\item[5. ] mu0,tho : valeurs initiales des variables de l'algorithme
\end{itemize}
\end{itemize}
\paragraph{Sorties}
\begin{itemize}
\item xmin : (Array\{Float,1\}) une approximation de la solution du problème avec contraintes
\item fxmin : (Float) $f(x_{min})$
\item flag : (Integer) indicateur du déroulement de l'algorithme
\begin{itemize}
\item 0 : convergence
\item 1 : nombre maximal d'itération atteint
\item (-1) : une erreur s'est produite
\end{itemize}
\item niters : (Integer) nombre d'itérations réalisées
\item muk : (Float) valeur de mu\_k à la sortie
\item lambdak : (Float) valeur de lambda\_k à la sortie
\end{itemize}
\paragraph{Exemple d'appel}
\begin{verbatim}
using LinearAlgebra
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
algo = "gct" # ou newton|gct
x0 = [1; 0]
options = []
contrainte(x) = (x[1]^2) + (x[2]^2) -1.5
grad_contrainte(x) = [2*x[1] ;2*x[2]]
hess_contrainte(x) = [2 0;0 2]
output = Lagrangien_Augmente(algo,f,contrainte,gradf,hessf,grad_contrainte,hess_contrainte,x0,options)
\end{verbatim}
\paragraph{Tolérances des algorithmes appelés}
Pour les tolérances définies dans les algorithmes appelés (Newton et régions de confiance), prendre les tolérances par défaut définies dans ces algorithmes.
 Objet
 -------
Résolution des problèmes de minimisation sous contraintes d'égalités par
l'algorithme du lagrangien augmenté
 Syntaxe
 ---------
 Lagrangien_Augmente(algo,fonc,contrainte,gradfonc,hessfonc,grad_contrainte,
 hess_contrainte,x0,options)
 Entrées
 ---------
• algo : (String) l'algorithme sans contraintes à utiliser: • "newton" :
pour l'algorithme de Newton • "cauchy" : pour le pas de Cauchy • "gct"
: pour le gradient conjugué tronqué
• fonc : (Function) la fonction à minimiser
• contrainte : (Function) la contrainte [x est dans le domaine des
contraintes ssi c(x)=0]
• gradfonc : (Function) le gradient de la fonction
• hessfonc : (Function) la hessienne de la fonction
• grad_contrainte : (Function) le gradient de la contrainte
• hess_contrainte : (Function) la hessienne de la contrainte
• x0 : (Array{Float,1}) la première composante du point de départ du
Lagrangien
• options : (Array{Float,1}) 1. epsilon : utilisé dans les critères
d'arrêt 2. tol : la tolérance utilisée dans les critères d'arrêt 3.
itermax : nombre maximal d'itération dans la boucle principale 4.
lambda0 : la deuxième composante du point de départ du Lagrangien 5.
mu0,tho : valeurs initiales des variables de l'algorithme
 Sorties
 ---------
• xmin : (Array{Float,1}) une approximation de la solution du problème
avec contraintes
• fxmin : (Float) f(x_{min})
• flag : (Integer) indicateur du déroulement de l'algorithme • 0 :
convergence • 1 : nombre maximal d'itération atteint • (-1) : une
erreur s'est produite
• niters : (Integer) nombre d'itérations réalisées
• muk : (Float) valeur de mu_k à la sortie
• lambdak : (Float) valeur de lambda_k à la sortie
 Exemple d'appel
 -----------------
 using LinearAlgebra
 f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
 gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
 hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
 algo = "gct" # ou newton|gct
 x0 = [1; 0]
 options = []
 contrainte(x) = (x[1]^2) + (x[2]^2) -1.5
 grad_contrainte(x) = [2*x[1] ;2*x[2]]
 hess_contrainte(x) = [2 0;0 2]
 output = Lagrangien_Augmente(algo,f,contrainte,gradf,hessf,grad_contrainte,hess_contrainte,x0,options)
 Tolérances des algorithmes appelés
 ------------------------------------
Pour les tolérances définies dans les algorithmes appelés (Newton et régions
de confiance), prendre les tolérances par défaut définies dans ces
algorithmes.
%% Cell type:markdown id: tags:
3. Vérifier que les tests ci-dessous passent.
3. Vérifier que les tests ci-dessous passent. Attention, ces tests vérifient seulement la solution xmin trouvée par votre algorihtme. Les valeurs des flags ou le nombre d'itérations ne sont pas toujours testés et les tests ne sont bien-sûr pas exhaustifs. Vous êtes libres de rajouter des tests pour compléter ceux qui sont donnés.
%% Cell type:code id: tags:
``` julia
using Test
# Tolérance pour les tests d'égalité
tol_erreur = sqrt(eps())
## ajouter les fonctions de test
include("../test/fonctions_de_tests.jl")
include("../test/tester_lagrangien_augmente.jl")
include("../src/Algorithme_De_Newton.jl")
include("../src/Pas_De_Cauchy.jl")
include("../src/Gradient_Conjugue_Tronque.jl")
include("../src/Regions_De_Confiance.jl")
include("../src/Lagrangien_Augmente.jl")
affiche = false
@testset "Test lagrangien augmente" begin
tester_lagrangien_augmente(affiche,Lagrangien_Augmente)
end;
```
%% Output
Avec newton: Error During Test at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35
Got exception outside of a @test
BoundsError: attempt to access 6-element Vector{Float64} at index [7]
Stacktrace:
[1] getindex
 @ ./array.jl:801 [inlined]
[2] Lagrangien_Augmente(algo::String, fonc::Function, contrainte::Function, gradfonc::Function, hessfonc::Function, grad_contrainte::Function, hess_contrainte::Function, x0::Vector{Int64}, options::Vector{Float64})
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/src/Lagrangien_Augmente.jl:79
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:37 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1226 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_lagrangien_augmente(afficher::Bool, Lagrangien_Augmente::typeof(Lagrangien_Augmente))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35
[8] macro expansion
 @ In[2]:24 [inlined]
[9] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[10] top-level scope
 @ In[2]:24
[11] eval
 @ ./boot.jl:360 [inlined]
[12] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
 @ Base ./loading.jl:1094
[13] softscope_include_string(m::Module, code::String, filename::String)
 @ SoftGlobalScope ~/.julia/packages/SoftGlobalScope/u4UzH/src/SoftGlobalScope.jl:65
[14] execute_request(socket::ZMQ.Socket, msg::IJulia.Msg)
 @ IJulia ~/.julia/packages/IJulia/e8kqU/src/execute_request.jl:67
[15] #invokelatest#2
 @ ./essentials.jl:708 [inlined]
[16] invokelatest
 @ ./essentials.jl:706 [inlined]
[17] eventloop(socket::ZMQ.Socket)
 @ IJulia ~/.julia/packages/IJulia/e8kqU/src/eventloop.jl:8
[18] (::IJulia.var"#15#18")()
 @ IJulia ./task.jl:406
Avec gct: Error During Test at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35
Got exception outside of a @test
BoundsError: attempt to access 6-element Vector{Float64} at index [7]
Stacktrace:
[1] getindex
 @ ./array.jl:801 [inlined]
[2] Lagrangien_Augmente(algo::String, fonc::Function, contrainte::Function, gradfonc::Function, hessfonc::Function, grad_contrainte::Function, hess_contrainte::Function, x0::Vector{Int64}, options::Vector{Float64})
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/src/Lagrangien_Augmente.jl:79
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:37 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1226 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_lagrangien_augmente(afficher::Bool, Lagrangien_Augmente::typeof(Lagrangien_Augmente))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35
[8] macro expansion
 @ In[2]:24 [inlined]
[9] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[10] top-level scope
 @ In[2]:24
[11] eval
 @ ./boot.jl:360 [inlined]
[12] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
 @ Base ./loading.jl:1094
[13] softscope_include_string(m::Module, code::String, filename::String)
 @ SoftGlobalScope ~/.julia/packages/SoftGlobalScope/u4UzH/src/SoftGlobalScope.jl:65
[14] execute_request(socket::ZMQ.Socket, msg::IJulia.Msg)
 @ IJulia ~/.julia/packages/IJulia/e8kqU/src/execute_request.jl:67
[15] #invokelatest#2
 @ ./essentials.jl:708 [inlined]
[16] invokelatest
 @ ./essentials.jl:706 [inlined]
[17] eventloop(socket::ZMQ.Socket)
 @ IJulia ~/.julia/packages/IJulia/e8kqU/src/eventloop.jl:8
[18] (::IJulia.var"#15#18")()
 @ IJulia ./task.jl:406
Avec cauchy: Error During Test at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35
Got exception outside of a @test
BoundsError: attempt to access 6-element Vector{Float64} at index [7]
Stacktrace:
[1] getindex
 @ ./array.jl:801 [inlined]
[2] Lagrangien_Augmente(algo::String, fonc::Function, contrainte::Function, gradfonc::Function, hessfonc::Function, grad_contrainte::Function, hess_contrainte::Function, x0::Vector{Int64}, options::Vector{Float64})
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/src/Lagrangien_Augmente.jl:79
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:37 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1226 [inlined]
[5] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35 [inlined]
[6] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[7] tester_lagrangien_augmente(afficher::Bool, Lagrangien_Augmente::typeof(Lagrangien_Augmente))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_lagrangien_augmente.jl:35
[8] macro expansion
 @ In[2]:24 [inlined]
[9] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[10] top-level scope
 @ In[2]:24
[11] eval
 @ ./boot.jl:360 [inlined]
[12] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
 @ Base ./loading.jl:1094
[13] softscope_include_string(m::Module, code::String, filename::String)
 @ SoftGlobalScope ~/.julia/packages/SoftGlobalScope/u4UzH/src/SoftGlobalScope.jl:65
[14] execute_request(socket::ZMQ.Socket, msg::IJulia.Msg)
 @ IJulia ~/.julia/packages/IJulia/e8kqU/src/execute_request.jl:67
[15] #invokelatest#2
 @ ./essentials.jl:708 [inlined]
[16] invokelatest
 @ ./essentials.jl:706 [inlined]
[17] eventloop(socket::ZMQ.Socket)
 @ IJulia ~/.julia/packages/IJulia/e8kqU/src/eventloop.jl:8
[18] (::IJulia.var"#15#18")()
 @ IJulia ./task.jl:406
Test Summary: | Error Total
Test lagrangien augmente |  3  3
Lagrangien augmenté |  3  3
Avec newton |  1  1
Avec gct |  1  1
Avec cauchy |  1  1
Some tests did not pass: 0 passed, 0 failed, 3 errored, 0 broken.
Stacktrace:
[1] finish(ts::Test.DefaultTestSet)
@ Test /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:913
[2] macro expansion
@ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1161 [inlined]
[3] top-level scope
@ In[2]:24
[4] eval
@ ./boot.jl:360 [inlined]
[5] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1094
%% Cell type:markdown id: tags:
## Interprétation
1. Commenter les résultats obtenus, en étudiant notamment les valeurs de $\lambda_k$ et $\mu_k$.
2. Étudier l'influence du paramètre $\tau$ dans la performance de l'algorithme.
3. **Supplémentaire** :
Que proposez-vous comme méthode pour la résolution des problèmes avec
des contraintes à la fois d'égalité et d'inégalité ? Implémenter (si le temps le permet)
ce nouvel algorithme
%% Cell type:code id: tags:
``` julia
```
......
%% Cell type:markdown id: tags:
<center>
<h1> TP-Projet d'optimisation numérique </h1>
<h1> Algorithme des Régions de Confiance </h1>
</center>
%% Cell type:markdown id: tags:
# Régions de confiance avec Pas de Cauchy
## Implémentation
1. Coder l'algorithme du pas de Cauchy d’un sous-problème de
régions de confiance (fichier `Pas_De_Cauchy.jl`). La spécification de cet algorithme est donnée ci-dessous.
%% Cell type:code id: tags:
``` julia
using LinearAlgebra
using Documenter
using Markdown
include("Pas_De_Cauchy.jl")
@doc Pas_De_Cauchy
```
%% Output
#### Objet
Cette fonction calcule une solution approchée du problème
$$
\min_{||s||< \delta_{k}} q_k(s) = s^{t}g + (1/2)s^{t}Hs
$$
par le calcul du pas de Cauchy
#### Syntaxe
```julia
s1, e1 = Pas_De_Cauchy(gradient,Hessienne,delta)
```
#### Entrées
* gradfk : (Array{Float,1}) le gradient de la fonction f appliqué au point $x_k$
* hessfk : (Array{Float,2}) la Hessienne de la fonction f appliqué au point $x_k$
* delta : (Float) le rayon de la région de confiance
#### Sorties
* s : (Array{Float,1}) une approximation de la solution du sous-problème
* e : (Integer) indice indiquant l'état de sortie: si g != 0 si on ne sature pas la boule e <- 1 sinon e <- -1 sinon e <- 0
#### Exemple d'appel
```julia
g1 = [0; 0]
H1 = [7 0 ; 0 2]
delta1 = 1
s1, e1 = Pas_De_Cauchy(g1,H1,delta1)
```
\paragraph{Objet}
Cette fonction calcule une solution approchée du problème
$$\min_{||s||< \delta_{k}} q_k(s) = s^{t}g + (1/2)s^{t}Hs$$
par le calcul du pas de Cauchy
\paragraph{Syntaxe}
\begin{verbatim}
s1, e1 = Pas_De_Cauchy(gradient,Hessienne,delta)
\end{verbatim}
\paragraph{Entrées}
\begin{itemize}
\item gradfk : (Array\{Float,1\}) le gradient de la fonction f appliqué au point $x_k$
\item hessfk : (Array\{Float,2\}) la Hessienne de la fonction f appliqué au point $x_k$
\item delta : (Float) le rayon de la région de confiance
\end{itemize}
\paragraph{Sorties}
\begin{itemize}
\item s : (Array\{Float,1\}) une approximation de la solution du sous-problème
\item e : (Integer) indice indiquant l'état de sortie: si g != 0 si on ne sature pas la boule e <- 1 sinon e <- -1 sinon e <- 0
\end{itemize}
\paragraph{Exemple d'appel}
\begin{verbatim}
g1 = [0; 0]
H1 = [7 0 ; 0 2]
delta1 = 1
s1, e1 = Pas_De_Cauchy(g1,H1,delta1)
\end{verbatim}
 Objet
 -------
Cette fonction calcule une solution approchée du problème
 \min_{||s||< \delta_{k}} q_k(s) = s^{t}g + (1/2)s^{t}Hs
par le calcul du pas de Cauchy
 Syntaxe
 ---------
 s1, e1 = Pas_De_Cauchy(gradient,Hessienne,delta)
 Entrées
 ---------
• gradfk : (Array{Float,1}) le gradient de la fonction f appliqué au
point x_k
• hessfk : (Array{Float,2}) la Hessienne de la fonction f appliqué au
point x_k
• delta : (Float) le rayon de la région de confiance
 Sorties
 ---------
• s : (Array{Float,1}) une approximation de la solution du sous-problème
• e : (Integer) indice indiquant l'état de sortie: si g != 0 si on ne
sature pas la boule e <- 1 sinon e <- -1 sinon e <- 0
 Exemple d'appel
 -----------------
 g1 = [0; 0]
 H1 = [7 0 ; 0 2]
 delta1 = 1
 s1, e1 = Pas_De_Cauchy(g1,H1,delta1)
%% Cell type:markdown id: tags:
2. Ecrire des tests exhaustifs (qui testent tous les cas de figure possibles) pour votre algorithme du Pas de Cauchy.
%% Cell type:code id: tags:
``` julia
```
%% Cell type:markdown id: tags:
3. Coder l'algorithme des Régions de Confiance (fichier `Regions_De_Confiance.jl`). Sa spécification est donnée ci-dessous.
%% Cell type:code id: tags:
``` julia
include("Regions_De_Confiance.jl")
@doc Regions_De_Confiance
```
%% Output
#### Objet
Minimise une fonction de R^n à valeurs dans R en utilisant l'algorithme des régions de confiance.
La solution approchées des sous-problèmes quadratiques est calculé par le pas de Cauchy ou le pas issu de l'algorithme du gradient conjugue tronqué
#### Syntaxe
```julia
xk, nb_iters, f(xk), flag = Regions_De_Confiance(algo,f,gradf,hessf,x0,option)
```
#### Entrées :
* algo : (String) string indicant la méthode à utiliser pour calculer le pas
* "gct" : pour l'algorithme du gradient conjugué tronqué
* "cauchy": pour le pas de Cauchy
* f : (Function) la fonction à minimiser
* gradf : (Function) le gradient de la fonction f
* hessf : (Function) la hessiene de la fonction à minimiser
* x0 : (Array{Float,1}) point de départ
* options : (Array{Float,1})
* deltaMax : utile pour les m-à-j de la région de confiance $R_{k}=\left\{x_{k}+s ;\|s\| \leq \Delta_{k}\right\}$
* gamma1,gamma2 : $0 < \gamma_{1} < 1 < \gamma_{2}$ pour les m-à-j de $R_{k}$
* eta1,eta2 : $0 < \eta_{1} < \eta_{2} < 1$ pour les m-à-j de $R_{k}$
* delta0 : le rayon de départ de la région de confiance
* max_iter : le nombre maximale d'iterations
* Tol_abs : la tolérence absolue
* Tol_rel : la tolérence relative
#### Sorties:
* xmin : (Array{Float,1}) une approximation de la solution du problème : $min_{x \in \mathbb{R}^{n}} f(x)$
* fxmin : (Float) $f(x_{min})$
* flag : (Integer) un entier indiquant le critère sur lequel le programme à arrêter
* 0 : Convergence
* 1 : stagnation du $x$
* 2 : stagnation du $f$
* 3 : nombre maximal d'itération dépassé
* nb_iters : (Integer)le nombre d'iteration qu'à fait le programme
#### Exemple d'appel
```julia
algo="gct"
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
x0 = [1; 0]
options = []
xmin, fxmin, flag,nb_iters = Regions_De_Confiance(algo,f,gradf,hessf,x0,options)
```
\paragraph{Objet}
Minimise une fonction de R\^{}n à valeurs dans R en utilisant l'algorithme des régions de confiance.
La solution approchées des sous-problèmes quadratiques est calculé par le pas de Cauchy ou le pas issu de l'algorithme du gradient conjugue tronqué
\paragraph{Syntaxe}
\begin{verbatim}
xk, nb_iters, f(xk), flag = Regions_De_Confiance(algo,f,gradf,hessf,x0,option)
\end{verbatim}
\paragraph{Entrées :}
\begin{itemize}
\item algo : (String) string indicant la méthode à utiliser pour calculer le pas
\begin{itemize}
\item "gct" : pour l'algorithme du gradient conjugué tronqué
\item "cauchy": pour le pas de Cauchy
\end{itemize}
\item f : (Function) la fonction à minimiser
\item gradf : (Function) le gradient de la fonction f
\item hessf : (Function) la hessiene de la fonction à minimiser
\item x0 : (Array\{Float,1\}) point de départ
\item options : (Array\{Float,1\})
\begin{itemize}
\item deltaMax : utile pour les m-à-j de la région de confiance $R_{k}=\left\{x_{k}+s ;\|s\| \leq \Delta_{k}\right\}$
\item gamma1,gamma2 : $0 < \gamma_{1} < 1 < \gamma_{2}$ pour les m-à-j de $R_{k}$
\item eta1,eta2 : $0 < \eta_{1} < \eta_{2} < 1$ pour les m-à-j de $R_{k}$
\item delta0 : le rayon de départ de la région de confiance
\item max\_iter : le nombre maximale d'iterations
\item Tol\_abs : la tolérence absolue
\item Tol\_rel : la tolérence relative
\end{itemize}
\end{itemize}
\paragraph{Sorties:}
\begin{itemize}
\item xmin : (Array\{Float,1\}) une approximation de la solution du problème : $min_{x \in \mathbb{R}^{n}} f(x)$
\item fxmin : (Float) $f(x_{min})$
\item flag : (Integer) un entier indiquant le critère sur lequel le programme à arrêter
\begin{itemize}
\item 0 : Convergence
\item 1 : stagnation du $x$
\item 2 : stagnation du $f$
\item 3 : nombre maximal d'itération dépassé
\end{itemize}
\item nb\_iters : (Integer)le nombre d'iteration qu'à fait le programme
\end{itemize}
\paragraph{Exemple d'appel}
\begin{verbatim}
algo="gct"
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
x0 = [1; 0]
options = []
xmin, fxmin, flag,nb_iters = Regions_De_Confiance(algo,f,gradf,hessf,x0,options)
\end{verbatim}
 Objet
 -------
Minimise une fonction de R^n à valeurs dans R en utilisant l'algorithme des
régions de confiance.
La solution approchées des sous-problèmes quadratiques est calculé par le
pas de Cauchy ou le pas issu de l'algorithme du gradient conjugue tronqué
 Syntaxe
 ---------
 xk, nb_iters, f(xk), flag = Regions_De_Confiance(algo,f,gradf,hessf,x0,option)
 Entrées :
 -----------
• algo : (String) string indicant la méthode à utiliser pour calculer le
pas • "gct" : pour l'algorithme du gradient conjugué tronqué •
"cauchy": pour le pas de Cauchy
• f : (Function) la fonction à minimiser
• gradf : (Function) le gradient de la fonction f
• hessf : (Function) la hessiene de la fonction à minimiser
• x0 : (Array{Float,1}) point de départ
• options : (Array{Float,1}) • deltaMax : utile pour les m-à-j de la
région de confiance R_{k}=\left\{x_{k}+s ;\|s\| \leq
\Delta_{k}\right\} • gamma1,gamma2 : 0 < \gamma_{1} < 1 < \gamma_{2}
pour les m-à-j de R_{k} • eta1,eta2 : 0 < \eta_{1} < \eta_{2} < 1 pour
les m-à-j de R_{k} • delta0 : le rayon de départ de la région de
confiance • max_iter : le nombre maximale d'iterations • Tol_abs : la
tolérence absolue • Tol_rel : la tolérence relative
 Sorties:
 ----------
• xmin : (Array{Float,1}) une approximation de la solution du problème :
min_{x \in \mathbb{R}^{n}} f(x)
• fxmin : (Float) f(x_{min})
• flag : (Integer) un entier indiquant le critère sur lequel le
programme à arrêter • 0 : Convergence • 1 : stagnation du x • 2 :
stagnation du f • 3 : nombre maximal d'itération dépassé
• nb_iters : (Integer)le nombre d'iteration qu'à fait le programme
 Exemple d'appel
 -----------------
 algo="gct"
 f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
 gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
 hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
 x0 = [1; 0]
 options = []
 xmin, fxmin, flag,nb_iters = Regions_De_Confiance(algo,f,gradf,hessf,x0,options)
%% Cell type:markdown id: tags:
4. Vérifier que les tests ci-dessous passent.
%% Cell type:code id: tags:
``` julia
using Test
# Tolérance pour les tests d'égalité
tol_erreur = sqrt(eps())
## ajouter les fonctions de test
include("../test/fonctions_de_tests.jl")
include("../test/tester_regions_de_confiance.jl")
include("../src/Pas_De_Cauchy.jl")
include("../src/Regions_De_Confiance.jl")
affiche = false
@testset "Test rc avec cauchy" begin
tester_regions_de_confiance(affiche,Regions_De_Confiance)
end;
```
%% Output
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:45
Expression: isapprox(x_min11, sol_exacte_fct1, atol = tol_erreur)
Evaluated: isapprox([0.0, 0.0, 0.0], [1, 1, 1]; atol = 0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:45 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:52
Expression: ≈(x_min12, sol_exacte_fct1, atol = tol_erreur)
Evaluated: [0.0, 0.0, 0.0] ≈ [1, 1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:52 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:59
Expression: ≈(x_min21, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [0.0, 0.0] ≈ [1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:59 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
iters = 0
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:67
Expression: ≈(x_min22, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [0.0, 0.0] ≈ [1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:67 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:74
Expression: ≈(x_min23, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [0.0, 0.0] ≈ [1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:74 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
Test Summary: | Fail Total
Test rc avec cauchy |  5  5
La méthode des RC |  5  5
avec Cauchy |  5  5
Some tests did not pass: 0 passed, 5 failed, 0 errored, 0 broken.
Stacktrace:
[1] finish(ts::Test.DefaultTestSet)
@ Test /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:913
[2] macro expansion
@ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1161 [inlined]
[3] top-level scope
@ In[5]:18
[4] eval
@ ./boot.jl:360 [inlined]
[5] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1094
%% Cell type:markdown id: tags:
## Interprétation
<!-- Pour ces questions, des représentations graphiques sont attendues pour corroborer vos réponses. -->
1. Soit $$ f_{1} : \mathbf{R}^3 \rightarrow \mathbf{R}$$ $$ (x_1,x_2, x_3) \mapsto 2 (x_1 +x_2 + x_3 -3)^2 + (x_1-x_2)^2 + (x_2 - x_3)^2$$ Quelle relation lie la fonction $f_1$ et son modèle de Taylor à l’ordre 2 ? Comparer alors les performances de Newton et RC-Pas de Cauchy sur cette fonction.
2. Le rayon initial de la région de confiance est un paramètre important dans l’analyse
de la performance de l’algorithme. Sur quel(s) autre(s) paramètre(s) peut-on jouer
pour essayer d’améliorer cette performance ? Étudier l’influence d’au moins deux de
ces paramètres.
%% Cell type:markdown id: tags:
# Régions de confiance avec Gradient Conjugué
## Implémentation
1. Implémenter l’algorithme du Gradient Conjugué Tronqué (fichier `Gradient_Conjugue_Tronque.jl`). Sa spécification est donnée ci-dessous.
%% Cell type:code id: tags:
``` julia
include("Gradient_Conjugue_Tronque.jl")
@doc Gradient_Conjugue_Tronque
```
%% Output
#### Objet
Cette fonction calcule une solution approchée du problème
$$
\min_{||s||< \delta_{k}} q_k(s) = s^{t}g + (1/2)s^{t}Hs
$$
par l'algorithme du gradient conjugué tronqué
#### Syntaxe
```julia
sk = Gradient_Conjugue_Tronque(fk,gradfk,hessfk,option)
```
#### Entrées :
* gradfk : (Array{Float,1}) le gradient de la fonction f appliqué au point xk
* hessfk : (Array{Float,2}) la Hessienne de la fonction f appliqué au point xk
* options : (Array{Float,1})
* delta : le rayon de la région de confiance
* max_iter : le nombre maximal d'iterations
* tol : la tolérance pour la condition d'arrêt sur le gradient
#### Sorties:
* s : (Array{Float,1}) le pas s qui approche la solution du problème : $min_{||s||< \delta_{k}} q(s)$
#### Exemple d'appel:
```julia
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
xk = [1; 0]
options = []
s = Gradient_Conjugue_Tronque(gradf(xk),hessf(xk),options)
```
\paragraph{Objet}
Cette fonction calcule une solution approchée du problème
$$\min_{||s||< \delta_{k}} q_k(s) = s^{t}g + (1/2)s^{t}Hs$$
par l'algorithme du gradient conjugué tronqué
\paragraph{Syntaxe}
\begin{verbatim}
sk = Gradient_Conjugue_Tronque(fk,gradfk,hessfk,option)
\end{verbatim}
\paragraph{Entrées :}
\begin{itemize}
\item gradfk : (Array\{Float,1\}) le gradient de la fonction f appliqué au point xk
\item hessfk : (Array\{Float,2\}) la Hessienne de la fonction f appliqué au point xk
\item options : (Array\{Float,1\})
\begin{itemize}
\item delta : le rayon de la région de confiance
\item max\_iter : le nombre maximal d'iterations
\item tol : la tolérance pour la condition d'arrêt sur le gradient
\end{itemize}
\end{itemize}
\paragraph{Sorties:}
\begin{itemize}
\item s : (Array\{Float,1\}) le pas s qui approche la solution du problème : $min_{||s||< \delta_{k}} q(s)$
\end{itemize}
\paragraph{Exemple d'appel:}
\begin{verbatim}
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
xk = [1; 0]
options = []
s = Gradient_Conjugue_Tronque(gradf(xk),hessf(xk),options)
\end{verbatim}
 Objet
 -------
Cette fonction calcule une solution approchée du problème
 \min_{||s||< \delta_{k}} q_k(s) = s^{t}g + (1/2)s^{t}Hs
par l'algorithme du gradient conjugué tronqué
 Syntaxe
 ---------
 sk = Gradient_Conjugue_Tronque(fk,gradfk,hessfk,option)
 Entrées :
 -----------
• gradfk : (Array{Float,1}) le gradient de la fonction f appliqué au
point xk
• hessfk : (Array{Float,2}) la Hessienne de la fonction f appliqué au
point xk
• options : (Array{Float,1}) • delta : le rayon de la région de
confiance • max_iter : le nombre maximal d'iterations • tol : la
tolérance pour la condition d'arrêt sur le gradient
 Sorties:
 ----------
• s : (Array{Float,1}) le pas s qui approche la solution du problème :
min_{||s||< \delta_{k}} q(s)
 Exemple d'appel:
 ------------------
 gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
 hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
 xk = [1; 0]
 options = []
 s = Gradient_Conjugue_Tronque(gradf(xk),hessf(xk),options)
%% Cell type:markdown id: tags:
2. Vérifier que les tests ci-dessous passent.
2. Vérifier que les tests ci-dessous passent. Attention, ces tests vérifient seulement la solution xmin trouvée par votre algorihtme. Les valeurs des flags ou le nombre d'itérations ne sont pas toujours testés et les tests ne sont bien-sûr pas exhaustifs. Vous êtes libres de rajouter des tests pour compléter ceux qui sont donnés.
%% Cell type:code id: tags:
``` julia
using Test
# Tolérance pour les tests d'égalité
tol_erreur = sqrt(eps())
## ajouter les fonctions de test
include("../test/fonctions_de_tests.jl")
include("../test/tester_gct.jl")
include("../src/Gradient_Conjugue_Tronque.jl")
affiche = false
@testset "Test gct" begin
tester_gct(affiche,Gradient_Conjugue_Tronque)
end;
```
%% Output
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:35
Expression: ≈(s, (-delta * grad) / norm(grad), atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [-0.4743416490252569, -0.15811388300841897] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:35 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:38
Expression: ≈(s, [-0.8740776099190263, -0.8221850958502244], atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [-0.8740776099190263, -0.8221850958502244] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:38 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:41
Expression: ≈(s, -Hess \ grad, atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [-0.8571428571428571, -1.0] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:41 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:48
Expression: ≈(s, (-delta * grad) / norm(grad), atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [-0.4472135954999579, -0.8944271909999159] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:48 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:52
Expression: ≈(s, (-delta * grad) / norm(grad), atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [-0.5, -0.0] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:52 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Error During Test at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:56
Test threw exception
Expression: isapprox(s, [0.48997991959774634, 5.979959839195494], atol = tol_test) || iapprox(s, [-4.489979919597747, -3.979959839195493], atol = tol_test)
UndefVarError: iapprox not defined
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:56 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:77
Expression: ≈(s, [1.9059020876695578; -2.3167946029410595], atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [1.9059020876695578, -2.3167946029410595] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:77 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Gradient-CT: Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:85
Expression: ≈(s, [-0.5; 0.0], atol = tol_test)
Evaluated: [0.0, 0.0] ≈ [-0.5, 0.0] (atol=0.001)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:85 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::typeof(Gradient_Conjugue_Tronque))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_gct.jl:24
Test Summary: | Pass Fail Error Total
Test gct |  1  7  1  9
Gradient-CT |  1  7  1  9
Some tests did not pass: 1 passed, 7 failed, 1 errored, 0 broken.
Stacktrace:
[1] finish(ts::Test.DefaultTestSet)
@ Test /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:913
[2] macro expansion
@ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1161 [inlined]
[3] top-level scope
@ In[7]:16
[4] eval
@ ./boot.jl:360 [inlined]
[5] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1094
%% Cell type:markdown id: tags:
3. Intégrer l’algorithme du Gradient Conjugué Tronqué dans le code de régions de confiance (fichier `Regions_De_Confiance.jl`).
4. Décommenter les tests avec le gradient conjugué dans `tester_regions_de_confiance.jl` et vérifier que les tests passent.
%% Cell type:code id: tags:
``` julia
using Test
# Tolérance pour les tests d'égalité
tol_erreur = sqrt(eps())
## ajouter les fonctions de test
include("../test/fonctions_de_tests.jl")
include("../test/tester_regions_de_confiance.jl")
include("../src/Pas_De_Cauchy.jl")
include("../src/Gradient_Conjugue_Tronque.jl")
include("../src/Regions_De_Confiance.jl")
affiche = false
@testset "Test rc avec cauchy et gct" begin
tester_regions_de_confiance(affiche,Regions_De_Confiance)
end;
```
%% Output
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:45
Expression: isapprox(x_min11, sol_exacte_fct1, atol = tol_erreur)
Evaluated: isapprox([0.0, 0.0, 0.0], [1, 1, 1]; atol = 0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:45 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:52
Expression: ≈(x_min12, sol_exacte_fct1, atol = tol_erreur)
Evaluated: [0.0, 0.0, 0.0] ≈ [1, 1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:52 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:59
Expression: ≈(x_min21, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [0.0, 0.0] ≈ [1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:59 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
iters = 0
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:67
Expression: ≈(x_min22, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [0.0, 0.0] ≈ [1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:67 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
avec Cauchy : Test Failed at /Users/ocots/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:74
Expression: ≈(x_min23, sol_exacte_fct2, atol = tol_erreur)
Evaluated: [0.0, 0.0] ≈ [1, 1] (atol=0.01)
Stacktrace:
[1] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:74 [inlined]
[2] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[3] macro expansion
 @ ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:41 [inlined]
[4] macro expansion
 @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
[5] tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::typeof(Regions_De_Confiance))
 @ Main ~/Boulot/cours/optimisation/optimisation_numerique_2A_SN/projet-optinum/test/tester_regions_de_confiance.jl:39
Test Summary: | Fail Total
Test rc avec cauchy et gct |  5  5
La méthode des RC |  5  5
avec Cauchy |  5  5
Some tests did not pass: 0 passed, 5 failed, 0 errored, 0 broken.
Stacktrace:
[1] finish(ts::Test.DefaultTestSet)
@ Test /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:913
[2] macro expansion
@ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1161 [inlined]
[3] top-level scope
@ In[8]:20
[4] eval
@ ./boot.jl:360 [inlined]
[5] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1094
%% Cell type:markdown id: tags:
## Interprétation
1. Comparer la décroissance obtenue avec celle du pas de Cauchy, en imposant la sortie
dans l’algorithme 3 au bout d’une itération seulement. Que remarquez vous ?
2. Comparer la décroissance obtenue avec celle du pas de Cauchy dans le cas général.
3. Quels sont les avantages et inconvénients des deux approches ?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment