0% ont trouvé ce document utile (0 vote)
85 vues11 pages

Ds Optimisation

Transféré par

aziz Bouhrem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
85 vues11 pages

Ds Optimisation

Transféré par

aziz Bouhrem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
oayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook MINIBeLR LOL ETEOMOReTT IMi siAlr 1 10IN} INSTITUT SUPERIEUR D‘INFORMATIQUE ET DE GESTION DE KAIR ouAN Mouhamed aziz bouhrem 3 Gust Gee 2 exercice 1 Pour résoudre l’équation f(x)=x3-2x2+x=0 dans I'intervalle [-2, 2 ] avec une tolérance de 10-4 , 10-6 et 10-8 en utilisant | algorithme de la dichotomie Entrée [1]: wavoununn 10 a 12 B 14 15 16 v7 18 19 20 21 22 23 24 *##* 1 algorithme de la dichotomie**** import numpy as np import matplotlib.pyplot as plt def #(x) return np.power(x, 3) - 24np.power(x, 2) + x def dichotomie (f, a, b, tol=1e-6, Niter =1000): assert(#(a) < @ and f(b) > @), “Erreur , on doit avoir f(a) < @ et assert(a tol: 45 if F(c) < F(d): 16 bed v7 else: 18 a 19 c=b- (b- a) / gr 20 d= a+ (b- a) / gr 21 return (b + a) / 2 22 23. # Trouver Le maximum ou Le minimum 24 x max = sectionDoree(@, 1) 25 26 # Tracer La fonction 27 x = np.linspace(®, 1, 400) 28 y = np.exp(-x) * np.cos(5*x) 29 plt.plot(x, y, label="F(x) 30 plt.plot(x_max, F(x_max), 31 plt.legend() 32. plt.show() 33 34 e*{-x} cos(5x)") "ro") 10 — F(x) =e“ {x} cos(5x) og 0.6 04 0.2 0.0 0.0 0.2 0.4 06 08 1.0 locathost'8888/notebooks/Optimsation et Processus de décision.ipynb oayt2r2028 14:92 Entrée [5 (Optimisation et Processus de décsion - Jupyter Notebook Alors F(x) donne une graphe unimodale sur lintervalle [0, 1] ‘comme F(x) donne un minimum ,On utilisez la méthode d’optimisation appropriée pour le déterminer numériquement. =** méthode d' optimisation appropriée*** import math import matplotlib.pyplot as plt import numpy as np from scipy.optimize import minimize # Definir La fonction def F(x) return math.exp(-x) * math.cos(5*x) 1@ # UtiLlisez La fonction minimiser de scipy pour trouver Le minimum 11 result = minimize(F, @.5, bounds=[(@, 1)]) 13. # Imprimer Le résultat 14 print("le minimum valueur est a x » result.x[@]) 16 le minimum valueur est a x = @,588839413095213 pour rechercher les nombres d'itérations nécessaires pour atteindre la convergence vers la solution avec une tolérance 10-6 prés on va utiliser méthode de gradient a pas constant (Descente de gradient & pas (quasi-) optimal) ***Descente de gradient a pas (quasi-) optima yee Pour illustrer graphiquement les différentes itérations on va utiliser aussi utiliser méthode de gradient a pas constant aussi locathost'8888/notebooks/Optimsation et Processus de décision.ipynb am oayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook Entrée [6]: import numpy as np 1 2 import matplotlib.pyplot as plt 3 4 # Define the function and its derivative 5 def F(x): 6 return np.exp(-x) * np.cos(5*x) 7 8 9 def dF(x): return -np.exp(-x) * np.cos(5*x) - 5 * np.exp(-x) * np.sin(S*x) 11 # Gradient descent algorithm 12. def gradient_descent(x_start, learning rate, tol): 3 x = x_start 14 x.values = [x] # List to store the x values at each iteration 45 i= 0 # Initialize the iteration counter 16 while Tru 7 x_new = x - learning_rate * dF(x) 18 if abs(x_new - x) < tol: 19 break 28 x = xnew 21 x_values.append(x) # Store the new x value 22 i++ 1 # Increment the iteration counter 23 return x_values, i 24 25 # Parameters 26 x_start = 0.5 27, learning_rate 28 tol = 10-6 29 3@ # Run the algorithm 31 xvalues, n_iters = gradient_descent(x_start, learning rate, tol) 32 33 print("Le nombre d'itérations nécessaires pour atteindre la convergence 34 35 # Plot the function and the x values at each iteration 36 x = np.linspace(a, 1, 400) 37 y = np.exp(-x) * np.cos(S*x) 38 plt.plot(x, y, label="F(x) = e%{-x} cos(5x)') 39 plt.plot(x_values, [F(x) for x in x_values], ‘ro-') # The red points a 4@ plt.legend() 41 plt.show() 42 43 4a. Le nombre d'itérations nécessaires pour atteindre la convergence est 62 locathost'8888/notebooks/Optimsation et Processus de décision.ipynb ant oayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook 10 — F(x) =e“ {x} cos(5x) og 0.6 04 0.2 0.0 0.0 0.2 0.4 06 08 1.0 exercice 3 Pour résoudre équation f(x) = 0 avec f(x)= cos(x) en utilisant la méthode d'optimisation Newton. on difinir la fonction et la mrthode de newton et on excute | algorithme avec le paramtre locathost'8888/notebooks/Optimsation et Processus de décision.ipynb ann oayt2r2028 14:92 (Optimisation et Processus de décsion - Jupyter Notebook Entrée [7]: import numpy as np # difinir La fonction def f(x) return np.cos(x) def df(x) return -np.sin(x) BSeavauaunn 1@ # Newton's method 11 def newton_method(x start, tol): 2 x = x start B while True: 14 xnew = x = F(x) / dF (x) 15 if abs(x_new - x) < tol: 16 break v7 x= xnew 18 return x 19 20 # paranetre 21 x.start = 2 # Start near pi 22 tol = 1e-6 23 24 # Excuter algorithm 25 x_zero = newton_method(x_start, tol) 26 27 print("La solution de 1'équation (x) = @ est x =", x_zero) 28 La solution de 1'équation f(x) = @ est x = 1.5707963267948066 Pour déterminer le nombre ditérations nécessaires pour résoudre I’équation {(x)=cos(x) en utilisant la méthode de Newton avec un point de départ x0=1 5 et une tolérance de 10-8, nous pouvons modifier 'algorithme précédent pour compter le nombre ditérations locathost'8888/notebooks/Optimsation et Processus de décision.ipynb sont oayt2r2028 14:92 Entrée [8]: BSeavauaunn 4 ct 12 3 14 45 16 7 18 19 20 21 22 23 24 25 26 27 28 29 38 (Optimisation et Processus de décsion - Jupyter Notebook import numpy as np # difinir La fonction def F(x): return np.cos(x) def df(x) return -np.sin(x) # Newton's method def newton_method(x_start, tol): x = xstart i= # Initialisation while Tru xnew = x = (x) / df(x) if abs(x_new - x) < tol: break x = xnew its 1 # Incrementation return i # Parametere x_start = 1.5 tol = 10-8 # excuter n_iters = newton_method(x_start, tol) print("Le nombre d'itérations nécessaires pour atteindre 1a convergence Le nombre d'itérations nécessaires pour atteindre la convergence est 2 locathost'8888/notebooks/Optimsation et Processus de décision.ipynb wnt

Vous aimerez peut-être aussi