feat: presque fini

This commit is contained in:
Laureηt 2021-12-16 16:02:26 +01:00
parent 422543a5f8
commit 99ce6be786
No known key found for this signature in database
GPG key ID: D88C6B294FD40994
8 changed files with 97 additions and 230 deletions

View file

@ -117,7 +117,7 @@ function Lagrangien_Augmente(algo, f::Function, c::Function, gradf::Function, he
if norm(_gradL(x_k, lambda_k, 0)) <= max(tol * norm(_gradL(x_0, lambda_0, 0)), epsilon) && norm(c(x_k)) <= max(tol * norm(c(x_0), epsilon))
flag = 0
break
elseif k >= max_iter
elseif k >= itermax
flag = 1
break
end

View file

@ -125,12 +125,12 @@ function Regions_De_Confiance(algo, f::Function, gradf::Function, hessf::Functio
if norm(gradf(x_k1)) <= max(Tol_rel * norm(gradf(x0)), Tol_abs)
flag = 0
break
# elseif norm(x_k1 - x_k) <= max(Tol_rel * norm(x_k), Tol_abs)
# flag = 1
# break
# elseif abs(f(x_k1) - f(x_k)) <= max(Tol_rel * abs(f(x_k)), Tol_abs)
# flag = 2
# break
elseif rho_k >= eta1 && norm(x_k1 - x_k) <= max(Tol_rel * norm(x_k), Tol_abs)
flag = 1
break
elseif rho_k >= eta1 && abs(f(x_k1) - f(x_k)) <= max(Tol_rel * abs(f(x_k)), Tol_abs)
flag = 2
break
elseif k >= max_iter
flag = 3
break

View file

@ -35,83 +35,9 @@
},
{
"cell_type": "code",
"execution_count": 26,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-0.5463024898437906\n",
"0.5463024898437907 1.4901161193847656e-8\n",
"0.046335607865117034\n",
"0.04633560786511692 1.4901161193847656e-8\n",
"-3.311802133838644e-5\n",
"3.311802133842967e-5 1.4901161193847656e-8\n",
"[1.4802973661668753e-16, 1.0, 0.9999999999999998]\n",
"1.414213562373095 1.4901161193847656e-8\n",
"[-9.0, -2.0000000000000004, 3.1999999999999984]\n",
"9.759098319004682 1.4901161193847656e-8\n",
"[0.0247191011235956, 0.3806741573033705]\n",
"0.38147588128083515 1.4901161193847656e-8\n",
"[1.938395770052605, -4.555708012050932]\n",
"4.950944723224334 1.4901161193847656e-8\n",
"[0.0003148077076046218, 3.757858630244299]\n",
"3.757858643430518 1.4901161193847656e-8\n",
"[0.23656563220117438, 0.3612025483564667]\n",
"0.43177607538855944 1.4901161193847656e-8\n",
"[3.84568678781476e-7, 0.0559640674724924]\n",
"0.0559640674738137 1.4901161193847656e-8\n",
"[4.304346341338872e-6, 8.608655775764598e-6]\n",
"9.624778007431938e-6 1.4901161193847656e-8\n",
"[-0.0004499775011251476, 99.99100044997749]\n",
"99.99100045098997 1.4901161193847656e-8\n",
"[-8.99918559194064, -179.97561277424336]\n",
"180.20046208260007 1.4901161193847656e-8\n",
"[-2.2498396305867807e-8, 80.98534127317878]\n",
"80.98534127317878 1.4901161193847656e-8\n",
"[-0.0003644080598389195, -0.0007290817061411055]\n",
"0.0008150787497567694 1.4901161193847656e-8\n",
"[-4.4407648973031725e-16, 1.3279323318740367e-7]\n",
"1.3279323318737823e-7 1.4901161193847656e-8\n",
"[-4.99999958629818e9, -0.005000000001]\n",
"4.99999958629818e9 1.4901161193847656e-8\n",
"[-4.99999958629818e9, -0.005000000001]\n",
"4.99999958629818e9 1.4901161193847656e-8\n",
"[6.004800496839379e-7, 2.499999586298196e19]\n",
"2.499999586298196e19 4.99999958629818e-6\n",
"[-3518.437500703689, 3.518437209586888e13]\n",
"3.5184372097024e13 24999.995862981963\n",
"[2.0220898268939407, -2.0208532713048275e10]\n",
"2.0208533504e10 25000.03104735406\n",
"[-1.0e-9, -1.0e-9, -1.0e-9]\n",
"1.732050758583135e-9 1.4901161193847656e-8\n",
"[-4.9999974749156296e-5, 9899.99000000505]\n",
"9899.99000000505 1.4901161193847656e-8\n",
"[-98.99990041369064, -19799.970182750585]\n",
"19800.217681078513 1.4901161193847656e-8\n",
"[-2.529670807346846e-11, 9800.980281920612]\n",
"9800.980281920612 1.4901161193847656e-8\n",
"[-4.95863093076493e-5, -9.917753547159461e-5]\n",
"0.0001108827561570618 1.4901161193847656e-8\n",
"[0.0247191011235956, 0.3806741573033705]\n",
"0.38147588128083515 1.4901161193847656e-8\n",
"[1.938395770052605, -4.555708012050932]\n",
"4.950944723224334 1.4901161193847656e-8\n",
"\u001b[0m\u001b[1mTest Summary: | \u001b[22m\u001b[32m\u001b[1mPass \u001b[22m\u001b[39m\u001b[36m\u001b[1mTotal\u001b[22m\u001b[39m\n",
"L'algo de Newton | \u001b[32m 24 \u001b[39m\u001b[36m 24\u001b[39m\n"
]
},
{
"data": {
"text/plain": [
"Test.DefaultTestSet(\"L'algo de Newton\", Any[Test.DefaultTestSet(\"Cas test 0 x0 = solution\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 0 x0 = x001\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 0 x0 = x002\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 1 x0 = solution\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 1 x0 = x011\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 1 x0 = x012\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = solution\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = x021\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = x022\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = x023\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"exception\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test stagnation x\", Any[Test.DefaultTestSet(\"flag\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test stagnation f(x)\", Any[Test.DefaultTestSet(\"flag\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test itermax\", Any[Test.DefaultTestSet(\"itération\", Any[], 1, false, false), Test.DefaultTestSet(\"flag\", Any[], 1, false, false)], 0, false, false)], 0, false, false)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"outputs": [],
"source": [
"tester_algo_newton(false, Algorithme_De_Newton)"
]
@ -165,38 +91,6 @@
"2. Coder l'algorithme de régions de confiance (fichier `Regions_De_Confiance.jl`). Tester sur les problèmes de lAnnexe A."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"function my_afficher_resultats_cauchy(algo, s, e)\n",
" println(\"-------------------------------------------------------------------------\")\n",
" printstyled(\"Résultats de : \", algo, \"\\n\", bold = true, color = :blue)\n",
" println(\" * s = \", s)\n",
" println(\" * e = \", e)\n",
"end\n",
"\n",
"g1 = [0; 0]\n",
"H1 = [7 0; 0 2]\n",
"delta1 = 1\n",
"s1, e1 = Pas_De_Cauchy(g1, H1, delta1)\n",
"my_afficher_resultats_cauchy(\"Cauchy 1\", s1, e1)\n",
"\n",
"g2 = [6; 2]\n",
"H2 = [7 0; 0 2]\n",
"delta2 = 1\n",
"s2, e2 = Pas_De_Cauchy(g2, H2, delta2)\n",
"my_afficher_resultats_cauchy(\"Cauchy 2\", s2, e2)\n",
"\n",
"g3 = [-2; 1]\n",
"H3 = [-2 0; 0 10]\n",
"delta3 = 1\n",
"s3, e3 = Pas_De_Cauchy(g3, H3, delta3)\n",
"my_afficher_resultats_cauchy(\"Cauchy 3\", s3, e3)"
]
},
{
"cell_type": "code",
"execution_count": null,
@ -206,28 +100,6 @@
"tester_pas_de_cauchy(false, Pas_De_Cauchy)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"options = [10, 0.5, 2.00, 0.25, 0.75, 2, 10000, sqrt(eps()), 1e-15]\n",
"algo = \"cauchy\"\n",
"\n",
"x0 = sol_exacte_f0\n",
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f0, grad_f0, hess_f0, x0, options)\n",
"my_afficher_resultats(\"RC-Cauchy\", \"f0\", x0, xmin, f_min, flag, sol_exacte_f0, nb_iters)\n",
"\n",
"x0 = sol_exacte_f1\n",
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f1, grad_f1, hess_f1, x0, options)\n",
"my_afficher_resultats(\"RC-Cauchy\", \"f1\", x0, xmin, f_min, flag, sol_exacte_f1, nb_iters)\n",
"\n",
"x0 = sol_exacte_f2\n",
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f2, grad_f2, hess_f2, x0, options)\n",
"my_afficher_resultats(\"RC-Cauchy\", \"f2\", x0, xmin, f_min, flag, sol_exacte_f2, nb_iters)"
]
},
{
"cell_type": "markdown",
"metadata": {},
@ -265,49 +137,6 @@
"Annexe A."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"function my_afficher_resultats_gct(algo, s)\n",
" println(\"-------------------------------------------------------------------------\")\n",
" printstyled(\"Résultats de : \", algo, \"\\n\", bold = true, color = :blue)\n",
" println(\" * s = \", s)\n",
"end\n",
"\n",
"options = []\n",
"\n",
"gradf(x) = [-400 * x[1] * (x[2] - x[1]^2) - 2 * (1 - x[1]); 200 * (x[2] - x[1]^2)]\n",
"hessf(x) = [-400*(x[2]-3*x[1]^2)+2 -400*x[1]; -400*x[1] 200]\n",
"xk = [1; 0]\n",
"s = Gradient_Conjugue_Tronque(gradf(xk), hessf(xk), options)\n",
"my_afficher_resultats_gct(\"Cauchy 1\", s)\n",
"\n",
"grad = [0; 0]\n",
"Hess = [7 0; 0 2]\n",
"s = Gradient_Conjugue_Tronque(grad, Hess, options)\n",
"my_afficher_resultats_gct(\"Cauchy 2\", s)\n",
"\n",
"# le cas de test 2 H definie positive\n",
"max_iter = 100\n",
"tol = 1e-7\n",
"grad = [6; 2]\n",
"Hess = [7 0; 0 2]\n",
"delta = 0.5 # sol = pas de Cauchy \n",
"s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])\n",
"my_afficher_resultats_gct(\"Cauchy 3\", s)\n",
"\n",
"delta = 1.2 # saturation à la 2ieme itération\n",
"s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])\n",
"my_afficher_resultats_gct(\"Cauchy 4\", s)\n",
"\n",
"delta = 3 # sol = min global\n",
"s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])\n",
"my_afficher_resultats_gct(\"Cauchy 5\", s)"
]
},
{
"cell_type": "code",
"execution_count": null,
@ -323,29 +152,7 @@
"metadata": {},
"outputs": [],
"source": [
"options = [10, 0.5, 2.00, 0.25, 0.75, 2, 10000, sqrt(eps()), 1e-15]\n",
"algo = \"gct\"\n",
"\n",
"x0 = sol_exacte_f0\n",
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f0, grad_f0, hess_f0, x0, options)\n",
"my_afficher_resultats(\"RC-GCT\", \"f0\", x0, xmin, f_min, flag, sol_exacte_f0, nb_iters)\n",
"\n",
"x0 = sol_exacte_f1\n",
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f1, grad_f1, hess_f1, x0, options)\n",
"my_afficher_resultats(\"RC-GCT\", \"f1\", x0, xmin, f_min, flag, sol_exacte_f1, nb_iters)\n",
"\n",
"x0 = sol_exacte_f2\n",
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f2, grad_f2, hess_f2, x0, options)\n",
"my_afficher_resultats(\"RC-GCT\", \"f2\", x0, xmin, f_min, flag, sol_exacte_f2, nb_iters)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tester_regions_de_confiance(false, Regions_De_Confiance)"
"tester_regions_de_confiance(true, Regions_De_Confiance)"
]
},
{
@ -452,7 +259,7 @@
"metadata": {},
"outputs": [],
"source": [
"tester_lagrangien_augmente(false, Lagrangien_Augmente)"
"tester_lagrangien_augmente(true, Lagrangien_Augmente)"
]
},
{

View file

@ -97,7 +97,7 @@ hess_fct2(x) = [
-400*(x[2]-3*x[1]^2)+2 -400*x[1]
-400*x[1] 200
]
# solutions de la fonction fct2
# solutions de la fonction fct2
sol_exacte_fct2 = [1; 1]
sol_fct2_augm = [0.9072339605110892; 0.82275545631455] # pour les problèmes avec contraintes

View file

@ -168,7 +168,7 @@ function tester_algo_newton(afficher::Bool, Algorithme_De_Newton::Function)
x0 = ones(3) .* 0.9999
xmin, f_min, flag, nb_iters = Algorithme_De_Newton(fct1, grad, hess, x0, options)
if (afficher)
afficher_resultats("stagnation x de Newton", "fct0", x0, xmin, f_min, flag, sol_exacte_fct0, nb_iters)
afficher_resultats("stagnation x de Newton", "fct0", x0, xmin, f_min, flag, sol_exacte_fct1, nb_iters)
end
@testset "flag" begin
@test flag == 1

View file

@ -25,55 +25,55 @@ function tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::Function)
Hess = [7 0; 0 2]
delta = 1
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s [0.0; 0.0] atol = tol_test
@test isapprox(s, [0.0; 0.0], atol = tol_test)
# le cas de test 2 H definie positive
grad = [6; 2]
Hess = [7 0; 0 2]
delta = 0.5 # sol = pas de Cauchy
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s -delta * grad / norm(grad) atol = tol_test
@test isapprox(s, -delta * grad / norm(grad), atol = tol_test)
delta = 1.2 # saturation à la 2ieme itération
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s [-0.8740776099190263, -0.8221850958502244] atol = tol_test
@test isapprox(s, [-0.8740776099190263, -0.8221850958502244], atol = tol_test)
delta = 3 # sol = min global
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s -Hess \ grad atol = tol_test
@test isapprox(s, -Hess \ grad, atol = tol_test)
# le cas test 2 bis matrice avec 1 vp < 0 et 1 vp > 0
grad = [1, 2]
Hess = [1 0; 0 -1]
delta = 1.0 # g^T H g < 0 première direction concave
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s -delta * grad / norm(grad) atol = tol_test
@test isapprox(s, -delta * grad / norm(grad), atol = tol_test)
grad = [1, 0]
delta = 0.5 # g^T H g > 0 sol pas de Cauchy
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s -delta * grad / norm(grad) atol = tol_test
@test isapprox(s, -delta * grad / norm(grad), atol = tol_test)
grad = [2, 1] # g^T H g > 0 sol à l'itération 2, saturation
delta = 6
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test isapprox(s, [0.48997991959774634, 5.979959839195494], atol = tol_test) || isapprox(s, [-4.489979919597747, -3.979959839195493], atol = tol_test)
# le cas de test 3
#grad = [-2 ; 1]
#Hess = [-2 0 ; 0 10]
#delta = 10
#s = Gradient_Conjugue_Tronque(grad,Hess,[delta;max_iter;tol])
#@test s ≈ [9.102342582478453; -4.140937032991381] atol = tol_test
grad = [-2; 1]
Hess = [-2 0; 0 10]
delta = 10
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test isapprox(s, [9.102342582478453; -4.140937032991381], atol = tol_test)
# le cas de test 4
#grad = [0 ; 0]
#Hess = [-2 0 ; 0 10]
#delta = 1
#s = Gradient_Conjugue_Tronque(grad,Hess,[delta;max_iter;tol])
#@test s ≈ [0.0 ; 0.0] atol = tol_test
grad = [0; 0]
Hess = [-2 0; 0 10]
delta = 1
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test isapprox(s, [0.0; 0.0], atol = tol_test)
# le cas de test 5
grad = [2; 3]
Hess = [4 6; 6 5]
delta = 3
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s [1.9059020876695578; -2.3167946029410595] atol = tol_test
@test isapprox(s, [1.9059020876695578; -2.3167946029410595], atol = tol_test)
# le cas de test 6
# Le pas de Cauchy conduit à un gradient nul en 1 itération
@ -81,6 +81,6 @@ function tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::Function)
Hess = [4 0; 0 -15]
delta = 2
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
@test s [-0.5; 0.0] atol = tol_test
@test isapprox(s, [-0.5; 0.0], atol = tol_test)
end
end

View file

@ -21,6 +21,10 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
H = [7 0; 0 2]
delta = 1
s, e = Pas_De_Cauchy(g, H, delta)
sol = [0; 0]
if afficher
println("Cauchy 1= ", sol)
end
@test (e == 0) && (isapprox(s, [0; 0], atol = tol_erreur))
end
@ -30,6 +34,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
delta = 1
s, e = Pas_De_Cauchy(g, H, delta)
sol = -(norm(g)^2 / (g' * H * g)) * g
if afficher
println("Cauchy 2= ", sol)
end
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
end
@testset "quad 2, saturé" begin
@ -38,6 +45,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
delta = 0.9
s, e = Pas_De_Cauchy(g, H, delta)
sol = -(delta / norm(g)) * g
if afficher
println("Cauchy 3= ", sol)
end
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
end
@testset "quad 3, non saturé" begin
@ -46,7 +56,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
delta = 6
s, e = Pas_De_Cauchy(g, H, delta)
sol = -(norm(g)^2 / (g' * H * g)) * g
println("Cauchy 4 = ", sol)
if afficher
println("Cauchy 4= ", sol)
end
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
end
@testset "quad 3, saturé" begin
@ -55,7 +67,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
delta = 5
s, e = Pas_De_Cauchy(g, H, delta)
sol = -(delta / norm(g)) * g
println("Cauchy 5= ", sol)
if afficher
println("Cauchy 5= ", sol)
end
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
end
@testset "quad 3, g'*H*g <0 saturé" begin
@ -64,7 +78,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
delta = 5
s, e = Pas_De_Cauchy(g, H, delta)
sol = -(delta / norm(g)) * g
println("Cauchy 6= ", sol)
if afficher
println("Cauchy 6= ", sol)
end
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
end
@testset "quad 3, g'*H*g = 0 saturé" begin
@ -73,7 +89,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
delta = 5
s, e = Pas_De_Cauchy(g, H, delta)
sol = -(delta / norm(g)) * g
println("Cauchy 6= ", sol)
if afficher
println("Cauchy 7= ", sol)
end
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
end
end

View file

@ -29,6 +29,7 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
delta0_2 = 2
options1 = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_1, maxits, Tol_abs, Tol_rel]
options2 = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_2, maxits, Tol_abs, Tol_rel]
options_max_iter = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_2, 10, Tol_abs, Tol_rel]
# l'ensemble de tests
@testset "La méthode des RC " begin
@ -37,6 +38,13 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
###################################################
# Un premier sous-ensemble de tests
@testset "avec Cauchy " begin
# cas de test 0
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("cauchy", fct1, grad_fct1, hess_fct1, sol_exacte_fct1, options1)
if (afficher)
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 1", "sol_exacte", x_min11, fmin11, flag11, sol_exacte_fct1, nb_iters11)
end
@test isapprox(x_min11, sol_exacte_fct1, atol = tol_erreur)
# cas de test 1
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("cauchy", fct1, grad_fct1, hess_fct1, pts1.x011, options1)
if (afficher)
@ -60,12 +68,18 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
# cas de test 4
x_min22, fmin22, flag22, nb_iters22 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x022, options2)
println("iters = ", nb_iters22)
if (afficher)
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 2", "x022", x_min22, fmin22, flag22, sol_exacte_fct2, nb_iters22)
end
@test isapprox(x_min22, sol_exacte_fct2, atol = tol_erreur)
# cas de test max_iter
x_min22, fmin22, flag22, nb_iters22 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x022, options_max_iter)
if (afficher)
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 2", "x022", x_min22, fmin22, flag22, sol_exacte_fct2, nb_iters22)
end
@test flag22 == 3
# cas de test 5
x_min23, fmin23, flag23, nb_iters23 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x023, options2)
if (afficher)
@ -79,6 +93,13 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
###################################################
# Un deuxième sous-ensemble de tests
@testset "avec GCT " begin
# cas de test 0
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("gct", fct1, grad_fct1, hess_fct1, sol_exacte_fct1, options1)
if (afficher)
afficher_resultats("régions de confiance avec " * "gct", "sol_exacte", "x011", x_min11, fmin11, flag11, sol_exacte_fct1, nb_iters11)
end
@test isapprox(x_min11, sol_exacte_fct1, atol = tol_erreur)
# cas de test 1
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("gct", fct1, grad_fct1, hess_fct1, pts1.x011, options1)
if (afficher)
@ -110,9 +131,30 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
# cas de test 5
x_min23, fmin23, flag23, nb_iters23 = Regions_De_Confiance("gct", fct2, grad_fct2, hess_fct2, pts1.x023, options2)
if (afficher)
afficher_resultats("régions de confiance avec " * "gct", "fonction 2", "x023", x_min11, fmin23, flag23, sol_exacte_fct2, nb_iters23)
afficher_resultats("régions de confiance avec " * "gct", "fonction 2", "x023", x_min23, fmin23, flag23, sol_exacte_fct2, nb_iters23)
end
@test isapprox(x_min23, sol_exacte_fct2, atol = tol_erreur)
end
# @testset "Cas test stagnation x" begin
# hess(x) = [
# 1e15 0 0
# 0 1e15 0
# 0 0 1e15
# ]
# grad(x) = [
# 10
# 10
# 10
# ]
# x0 = ones(3) .* 0.9999
# xmin, f_min, flag, nb_iters = Regions_De_Confiance("cauchy", fct1, grad, hess, x0, options2)
# if (afficher)
# afficher_resultats("stagnation x regions de confiance avec cauchy", "fct0", x0, xmin, f_min, flag, sol_exacte_fct1, nb_iters)
# end
# @testset "flag" begin
# @test flag == 1
# end
# end
end
end