Contenu du cours
Mathématiques pour l'Analyse de Données et la Modélisation
Mathématiques pour l'Analyse de Données et la Modélisation
Problème d'Optimisation
En mathématiques, un problème d'optimisation est un type de problème mathématique où l'objectif est de trouver la meilleure solution parmi toutes les solutions possibles réalisables. Le but est d'optimiser (maximiser ou minimiser) une certaine fonction objective, sous réserve d'un ensemble de contraintes.
La solution à un problème d'optimisation est un ensemble de valeurs pour les variables de décision qui satisfont les contraintes et optimisent la fonction objective. Selon le problème et les contraintes, la solution peut être unique ou avoir plusieurs solutions optimales.
Le problème d'optimisation le plus simple peut être défini comme suit :
Cette tâche peut être formulée comme suit : nous devons trouver la valeur du domaine X
(le point de maximum/minimum) pour laquelle la fonction f
aura une valeur maximale (minimale) dans le codomaine Y
.
Comment pouvons-nous résoudre le problème d'optimisation ?
Il n'existe pas de méthode universelle pour résoudre les problèmes d'optimisation, car l'approche dépend souvent du type de fonction et du domaine dans lequel nous cherchons la solution optimale. Cependant, lorsqu'il s'agit d'une fonction d'une variable, il existe un algorithme spécifique qui peut résoudre efficacement le problème d'optimisation :
Les solutions de l'équation décrite dans le premier point sont également appelées valeur critique de la fonction f
.
Voyons maintenant comment résoudre le problème d'optimisation en Python :
import sympy as sp # Step 1: Define the objective function x = sp.Symbol('x') f = x**3 - 6*x**2 + 9*x # Step 2: Calculate the first derivative f_prime = sp.diff(f, x) # Step 3: Calculate the second derivative f_double_prime = sp.diff(f_prime, x) # Step 4: Find the critical points critical_points = sp.solve(f_prime, x) # Step 5: Check the second derivative at the critical points optimal_points = [] # For loop to check all critical points for point in critical_points: second_derivative_at_point = f_double_prime.subs({x:point}) # Checking second derivative to deternine type of the point if second_derivative_at_point > 0: optimal_points.append((point, 'minima')) elif second_derivative_at_point < 0: optimal_points.append((point, 'maxima')) print(f'Objective function: f(x) = {f}') print(f'First derivative: f\'(x) = {f_prime}') print(f'Second derivative: f\'\'(x) = {f_double_prime}') print(f'Critical points: {critical_points}') print(f'Optimal points and type: {optimal_points}')
Nous avons utilisé la méthode sp.solve(f, x)
dans le code ci-dessus. Cette méthode trouve une solution numérique de l'équation f(x) = 0
par rapport à la variable x
.
Merci pour vos commentaires !