Option Informatique Programmation dynamique : Optimisation d un produit matric

Documents pareils
Résolution du Problème du Voyageur de Commerce Métaheuristique

Chapitre 5 : Flot maximal dans un graphe

Plus courts chemins, programmation dynamique

Recherche dans un tableau

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

Examen Médian - 1 heure 30

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Organigramme / Algorigramme Dossier élève 1 SI

Cours d algorithmique pour la classe de 2nde

Cours de Programmation 2

Cours Informatique Master STEP

Algorithmique et Programmation, IMA

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

Architecture des ordinateurs

Optimisation Discrète

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Calcul Formel et Numérique, Partie I

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours d initiation à la programmation en C++ Johann Cuenin

1. Structure d'un programme FORTRAN 95

Programmation linéaire et Optimisation. Didier Smets

TRIGONOMETRIE Algorithme : mesure principale

Découverte de Python

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Programmation linéaire

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Algorithmique, graphes et programmation dynamique Notes de Cours Rapport de Travaux Pratiques. Laurent Canet

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Les deux points les plus proches

Programmation C++ (débutant)/instructions for, while et do...while

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Chap III : Les tableaux

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Algorithmes sur les mots (séquences)

Corrigé des TD 1 à 5

L ALGORITHMIQUE. Algorithme

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Application 1- VBA : Test de comportements d'investissements

Représentation d un entier en base b

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Enseignement secondaire technique

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Propagation sur réseau statique et dynamique

Cours 02 : Problème général de la programmation linéaire

Algorithmique et programmation : les bases (VBA) Corrigé

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Résolution de systèmes linéaires par des méthodes directes

Initiation à la programmation en Python

Journées Télécom-UPS «Le numérique pour tous» David A. Madore. 29 mai 2015

TD3: tableaux avancées, première classe et chaînes


Cours d analyse numérique SMI-S4

UE Programmation Impérative Licence 2ème Année

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Les algorithmes de base du graphisme


Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

1.6- Génération de nombres aléatoires

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Plan du cours Cours théoriques. 29 septembre 2014

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Exercice : la frontière des portefeuilles optimaux sans actif certain

Programmation linéaire

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Cours de Master Recherche

Introduction à MATLAB R

Cours 6 : Programmation répartie

ALGORITHMIQUE ET PROGRAMMATION En C

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

Algorithmes de recherche d itinéraires en transport multimodal

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

4. Les structures de données statiques

FOCUS Evolution. Lisez-Moi. Version FE 7.0.t

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Application de K-means à la définition du nombre de VM optimal dans un cloud

Peut-on tout programmer?

Algorithmes pour la planification de mouvements en robotique non-holonome

Rappel sur les bases de données

Chapitre 2. Matrices

Cours 1 : La compilation

Projet de programmation (IK3) : TP n 1 Correction

Simulation de variables aléatoires

Polynômes à plusieurs variables. Résultant

Ordonnancement temps réel

L analyse d images regroupe plusieurs disciplines que l on classe en deux catégories :

Théorie de la Programmation

1 Recherche en table par balayage

Optimisation multi-critère pour l allocation de ressources sur Clouds distribués avec prise en compte de l énergie

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

L exclusion mutuelle distribuée

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Transcription:

Programmation dynamique : Optimisation d un produit matriciel Option Informatique 2015

De quoi s agit-il? n matrices rectangulaires A 1,, A n. On veut calculer le produit B = A 1 A n. i {1,, n}, A i est de format p i 1 p i. Divers parenthésages sont envisageables. Ils donnent tous le même résultat (associativité), mais... peut-être pas avec la même efficacité!

Attention aux matrices en caml! Comment définir une matrice 10 10 d entiers? matrice = vecteur de vecteurs type = int vect vect let lgn = make_vect 10 0;; let mat = make_vect 10 lgn;; mat.(3).(1) 5;; mat;; on voulait modifier le terme (ligne 4, colonne 2)... c est raté! Le constater...

Attention aux matrices en caml! Solution correcte : mat = make_vect 10 [ ];; for i = 0 to 9 do mat.(i) make_vect 10 0 done;; mat.(3).(1) 5;; mat;; on peut aussi utiliser make_matrix

Produit de 2 matrices A = [ a i,j ] 1 i p 1 j q C = AB = [ c i,j ] 1 i p 1 j r et B = [ b i,j ] 1 i q 1 j r avec : (i, j) {1,, p} {1,, r}, c i,j = Algorithme naïf q k =1 a i,k b k,j

Produit de 2 matrices en caml let mult_matrices a b = let p = vect_length a in let q = vect_length a.(0) in let q = vect_length b in let r = vect_length b.(0) in if q <> q then failwith "produit impossible" else let c = make_matrix p r 0 in for i = 1 to p do for j = 1 to r do for k = 1 to q do c.(i-1).(j-1) c.(i-1).(j-1) + a.(i-1).(k-1) * b.(k-1).(j-1) done done done; c;; Coût = pqr multiplications

Parenthésages possibles pour n = 3 A 1 (A 2 A 3 ) (A 1 A 2 ) A 3 Total : 2

Parenthésages possibles pour n = 4 A 1 (A 2 (A 3 A 4 )) A 1 ((A 2 A 3 ) A 4 ) (A 1 A 2 ) (A 3 A 4 ) (A 1 (A 2 A 3 )) A 4 ((A 1 A 2 ) A 3 ) A 4 Total : 5

Impact du parenthésage sur le côut global A 1 de format 10 100, A 2 de format 100 5, A 3 de format 5 50. (A 1 A 2 ) A 3 10 100 5 + 10 5 50 = 7500 A 1 (A 2 A 3 ) 100 5 50 + 10 100 50 = 75000 Rapport de 1 à 10...!

Et si on les essaie tous? P n = nombre de parenthésages pour n matrices. P 1 = 1.

Et si on les essaie tous? P n = nombre de parenthésages pour n matrices. P 1 = 1. Pour tout n 2 : P n = n 1 k =1 P k P n k. P 10 = 4 862; P 20 = 1 767 263 190; P 30 > 10 15 C est beaucoup trop...! On peut montrer que P n = 1 n ( ) 2n 2 n 1 4n 1 n 3/2 π

Parenthésage optimal Structure nécessaire d un parenth. Opt. de A i A j : pour un certain k {i,, j 1} : parenth. opt. de A i A k + parenth. opt. de A k +1 A j Car sinon, on pourrait réduire strictement le nb de multiplications scalaires en remplaçant le parenthésage de A i A k ou de A k +1 A j par un parenthésage meilleur.

Parenthésage optimal Notation m (i, j) = nb minimal de multiplications pour A i A j. Objectif calculer m (1, n). Formule de récurrence 0 si i = j m (i, j) = min { } m (i, k ) + m (k + 1, j) + p i 1 p k p j si i < j On définit pour chaque (i, j) : s (i, j) = un entier k {i,, j 1} t.q. m (i, j) = m (i, k ) + m (k + 1, j) + p i 1 p k p j.

Calcul des m (i, j) et des s (i, j) Approche récursive complexité exponentielle.

Calcul des m (i, j) et des s (i, j) Approche récursive complexité exponentielle. Approche tabulaire :

Calcul des m (i, j) et des s (i, j) Approche récursive complexité exponentielle. Approche tabulaire : Calcul des m(i,i)

Calcul des m (i, j) et des s (i, j) Approche récursive complexité exponentielle. Approche tabulaire : Calcul des m(i,i+1)

Calcul des m (i, j) et des s (i, j) Approche récursive complexité exponentielle. Approche tabulaire : Calcul des m(i,i+2)

Calcul des m (i, j) et des s (i, j) Approche récursive complexité exponentielle. Approche tabulaire : Calcul de m(1,n)

Calcul des m (i, j) et des s (i, j) let calc_opt p = let n = (vect_length p) - 1 in let m = make_matrix (n+1) (n+1) 0 in let s = make_matrix (n+1) (n+1) 0 in for l = 2 to n do for i = 1 to n-l+1 do let j = i+l-1 in m.(i).(j) ; for k = i to j-1 do let q = m.(i).(k) + m.(k+1).(j) + p.(i-1) * p.(k) * p.(j) in if q < m.(i).(j) then ( m.(i).(j) q; s.(i).(j) k ) done done done; (m,s);;

Construction d une solution optimale Récursivement : ( Ai A s(i,j) ) ( As(i,j)+1 A j ) let rec aff_opt s i j = if i = j then ( print_char A ; print_int i ) else ( print_char ( ; aff_opt s i s.(i).(j); aff_opt s (s.(i).(j) + 1) j; print_char ) ; );;

Construction d une solution optimale let par_opt_et_nb_mult p = let (m,s) = calc_opt p in let n = (vect_length p) - 1 in aff_opt s 1 n; print_newline (); print_string "Nombre de multiplications = "; print_int m.(1).(n); print_newline () ;; par_opt_et_nb_mult [ 10;100;5;50 ];; ((A1A2)A3) Nombre de multiplications = 7500 par_opt_et_nb_mult [ 56;27;171;10;100;5;50 ];; ((A1(A2(A3(A4A5))))A6) Nombre de multiplications = 58195

b y e