Le module Brute Force n'est pas fait pour être efficace, ni être executé. C'est un concept fonctionnel mais extrêmement lent.

Documents pareils
RÉALISATION DE GRAPHIQUES AVEC OPENOFFICE.ORG 2.3

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : bij@agasc.fr Word: Les tableaux.

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

Algorithmes de recherche

LES DÉTERMINANTS DE MATRICES

CHAPITRE IX : Les appareils de mesures électriques

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Architecture des Systèmes d Information Architecture des Systèmes d Information

Ebauche Rapport finale

WHS ProRealTime. édition

Les tests logiques avec Excel

Bien commencer avec un LaunchPad MSP430G et un Breadboard

PC Check & Tuning 2010 Optimisez et accélérez rapidement et simplement les performances de votre PC!

CH.6 Propriétés des langages non contextuels

OPTIMISATION À UNE VARIABLE

Complément d information concernant la fiche de concordance

SOMMAIRE. Travailler avec les requêtes... 3

VOTRE EAU CHAUDE ELECTRIQUE

EPFL TP n 3 Essai oedomètrique. Moncef Radi Sehaqui Hamza - Nguyen Ha-Phong - Ilias Nafaï Weil Florian

- Le Diagramme de Gantt. - Le Diagramme de Pert - La Méthode QQCQCCP - La Méthode MOSI - Cahier des charges fonctionnel

Bureau N301 (Nautile)

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Programmation par contraintes. Laurent Beaudou

ARBRES BINAIRES DE RECHERCHE

RÉALISATION D UN SITE DE RENCONTRE

TABLE DES MATIERES MENTIONS LEGALES QUI SUIS-JE? INTRODUCTION LES INDICATEURS DE LA STRATEGIE REGLES D ENTREE EN POSITION

Tableaux de bord de gestion du risque Rapport d audit permanent

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

Algorithmique I. Algorithmique I p.1/??

Aider à la décision. - La matrice d Eisenhower - Le diagramme de Pareto - Les arbres d objectifs - Le diagramme d affinités - La méthode Philips 6.

Projet ISN - dossier réalisé par Randrianarimanana Stéphanie. Titre du projet : Site de rencontre. le nom de notre site de rencontre : Linkymeet

ALICEBOX. Guide d installation ADSL + TÉLÉPHONE + TV NUMÉRIQUE. Découvrir ma télécommande 12 TÉLÉCOMMANDE. Accès au médiacenter

Feuille TD n 1 Exercices d algorithmique éléments de correction

Avis sur la 1 ère révision du schéma d'aménagement et de gestion des eaux «Nappes profondes de Gironde»

PROJET DE GESTION PORTEFEUILLE. Evaluation d une Stratégie de Trading

Pourquoi l apprentissage?

Application 1- VBA : Test de comportements d'investissements

Exercices de dénombrement

Programmation linéaire

Activité 11 : Nuage de points ou diagramme de dispersion

TRUCS & ASTUCES SYSTEME. 1-Raccourcis Programme sur le Bureau (7)

Seconde et première Exercices de révision sur les probabilités Corrigé

INDEX Fonctionnement Schéma de câblage... 24

Le contexte. Le questionnement du P.E.R. :

Premiers Pas avec OneNote 2013

Algorithmes d'apprentissage

Compte bancaire ou assurance vie? 5. Amortissement direct ou indirect?

III- Raisonnement par récurrence

Samuel Bassetto 04/2010

Une chaudière mixte est facilement identifiable : elle se déclenche chaque fois que vous ouvrez un robinet d eau chaude.

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Algorithmique avec Algobox

Un exemple avec WORKSPACE d'interwrite

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

Qui est Smart AdServer?

Logiciel SCRATCH FICHE 02

Le présent accord, pour un placement au pair, est conclu entre "l'hote" ci-aprés designé: Domicilié(e)á. Rue NOM: Né(e) le (1) Á De nationalité

RESEAU TRES HAUT DEBIT EN FIBRE OPTIQUE - DOSSIER TECHNIQUE FTTH

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

WARREN BUFFETT ^INTERPRETATION DES ETATS FINANCIERS. La recherche des entreprises qui possedent un avantage competitif durable

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Rank Xerox (UK) Business Services

NOTICE D' UTILISATION CAMWORKS FRAISAGE. Luc Vallée Lycée Blaise Pascal Segré

PIN Entry Plus Guide de l'utilisateur de la gestion des listes

Calcul de développements de Puiseux et application au calcul du groupe de monodromie d'une courbe algébrique plane

Bases de données réparties: Fragmentation et allocation

Nuxeo Enterprise Platform: Guide utilisateur

L exclusion mutuelle distribuée

Date : Tangram en carré page

5 CLES DE SUCCES POUR L E-TOURISME EN 2013 TRAVEL D OR 2013

E.I.S : Un outil performant pour I'analyse du risque en Assurance

Vue d'ensemble OBJECTIFS

Didier Pietquin. Timbre et fréquence : fondamentale et harmoniques

Release notes Release BE.12.27

Note de cours. Introduction à Excel 2007

Chapitre 7. Récurrences

Les quatre chantiers :

Module Communication - Messagerie V6. Infostance. Messagerie

Documentation RBS Change E-Commerce Core

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

2.4 Représentation graphique, tableau de Karnaugh

Fichiers, dossiers, enregistrer et arborescence

Exercice 1 : Questions théoriques (3 points)

12, PLACE DU PANTHEON PARIS. ADRESSE ELECTRONIQUE : capitant@clubinternet.fr TELEPHONE : + 33 (0) TELECOPIE : + 33 (0)

Comment battre Milos Raonic?

TP Service HTTP Serveur Apache Linux Debian

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

A B C D. Wireless Mobile Utility (ios) Manuel d utilisation D600, D7100, D D3200, COOLPIX A Nikon 1 : V2, J3, S

a) La technique de l analyse discriminante linéaire : une brève présentation. 3 étapes de la méthode doivent être distinguées :

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Manuel de configuration du Wi-Fi

Windows sur Kimsufi avec ESXi

Etude de fonctions: procédure et exemple

Sage Start Saisie des collaborateurs Instructions. A partir de la version

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Résolution d équations non linéaires

Transcription:

Rendu ESPERON DEPRESLE I) Séance 1 Le principe de notre code est le suivant : Un module pur "Brute Force" Un module pur "Branch and Bound" 1) Brute Force Le module Brute Force n'est pas fait pour être efficace, ni être executé. C'est un concept fonctionnel mais extrêmement lent. Une façon efficace de le faire trouver une premier solution serait de ne pas lui faire commencer par une liste parfaitement ordonnée, étant donné que prendre cette liste en premier éloigne naturellement la première solution trouvée d'un enorme nombre de permutations 2) Branch and Bound Notre module Branch and Bound est tout à fait classique, et consiste à partir d'un constat simple : On ne va pas tester toutes les valeurs d'une sous-permutation à partir du moment ou les valeurs fixées de celles-ci ne remplissent pas la condition de

l'invariant. On fait donc un maximum de tests au fur et à mesure pour éviter de descendre dans les branches de l'arbre des permutations qui sont inutiles. 3) Méthode de permutation des diagonales Comme montré en cours, la méthode des diagonales 4*4 a été très simplement implémentée. Le principe correspond, sur du 4x4, a partir du carré généré par les nombres placés dans l'ordre, a permuter les elements x(n) avec x(ordre² - n - 1), soit sur les diagonales, soit sur tout sauf les diagonales. Le principe mathématique derrière cette technique est le suivant. On a les diagonales qui répondent naturellement a la contrainte de l'invariant, parce que, quelle que soit la méthode, ses membres restent les mêmes. On va poser deux concepts pour essayer d'expliquer la méthode mathématique ensuite pour les lignes et les colonnes. Je vais parler de nombre "complément bas", pour parler des nombre qui sont d'indice x(n), avec n < ordre²/2, et pour chaque complement bas, il y'a son "complement haut", qui est égal a x(ordre² - n + 1) La méthode d'inversion des valeurs va donc, pour chaque ligne, permuter deux nombres complémentaires. Cela va être fait exactement de la même façon pour les colonnes, deux permutations de nombres complémentaires.

Cela entraine dans un premier temps la présence dans chaque ligne et chaque colonnes 2 complémentaires hauts, et 2 complémentaires bas. Cela entraine aussi, grâce à l'ordre initial du carré de 4x4, le fait que les lignes soient de la forme pour n=1,13, x(n) + x(16 - (n+1) + 1 ) + x( 16 -(n+2) + 1) + x(n+3) c'est a dire 2n - 2n + 32-1 + 3 = 34 Or ce calcul n'étant plus dépendant de n, on a bien l'invariant pour ces lignes pour n = 5, 9 x(16 - (n) + 1 ) + x(n+1) + x(n+2) + x(16 - (n+3) + 1 ) Encore une fois, on a : 32-2n + 2n + 4-3 + 1 = 34 Pour les colonnes, on aura le même phénomène, que je vais détailler pour n = 1, 4 x(n) + x(16 - (n+4)+ 1) + x(16 - (n+8) + 1) + x(n + 12) Ce qui fait 2n - 2n + 32-12 + 12 + 2, c'est a dire 34. De la même facon, pour n=2,3 x(16 - (n)+ 1) + x(n+4) + x(n+8) + x(16 - (n+12) + 1) Ce qui fait 2n - 2n + 32 + 1 + 12-12 + 1 c'est a dire 34.

On peut évidemment poser ce raisonnement si et seulement si la position (n) a une valeur égale à sa position initale, c'est à dire si le tableau a été initialisé dans l'ordre... On a grâce a cette méthode de permutation donc une façon sûre de faire un carré magique sur 4x4. Cette méthode aura exactement le même résultat sur tous les multiples de 4, avec les mêmes comportements de calcul, étant donné que de la même facon, on va avoir ordre/2 compléments hauts et bas par lignes, dont les n vont s'annuler, et les additions et soustractions naturelles des lignes et colonnes génèreront l'invariant. II) Séance 2 1) Calcul du nombre de solutions possibles Nous avons tout d'abord du vérifier le nombre de solutions totales possibles pour un carré de 4x4. La plupart des ressources ne prenant pas en compte les permutations possibles pour chaque carré, nous avons donc du dénombrer tout d'abord le nombre de permutations possibles. Ce nombre est 8 pour les raisons suivantes. 1)

x o o y 2) rotation vers droite o o o x o o o y 3) rotation vers droite y o o x 4) rotation vers droite y o o o x o o o 5) symétrie verticale

o o o y o o o x 6) rotation vers droite x o o y 7) rotation vers droite x o o o y o o o 8) rotation vers droite y o o x Ce déroulement permet de générer les 8 permutations possibles,

même si il existe d'autres. Par exemple, 2 + symétrie verticale = 7, ou encore 6) + symétrie horizontale = 1) 2) Solutions évaluées Dans un premier temps, nous avons vérifié notre méthode, qui devait générer 7040, c'est à dire 8 permutations de 880 solutions. Avec la première implémentation de nos heuristiques, c'est à dire une vérification uniquement sur les lignes, colonnes et diagonales remplies, nous avions une performance d'environ 3 minutes pour la génération de toutes les solutions. Le travail principal à donc été de réduire ce temps au maximum. Nous sommes partis sur plusieurs pistes, qui vont être détaillées dans les prochaines sous-parties. 3) Génération de toutes les solutions à partir d'une solution Dans un premier temps, nous nous sommes renseignés sur l'état de l'art en matière de carrés magiques, de manière à limiter encore plus la taille de l'arbre généré, pour trouver une première solution, puis générer toutes les autres à partir de celle-ci. Visiblement, les carrés magiques 4x4 peuvent appartenir à 12 groupes différents, qui ont des propriétés différentes. Ces groupes sont classifiés vis-à-vis des positions des deux valeurs complémentaires. Ils correspondent à une généralisation

de la méthode que nous avions vue sur les diagonales. Nous pouvions donc implémenter une méthodes générant chaque possibilité de solution pour chaque groupe, puis toutes les rotations et symétries possibles à partir de chaque groupe, mais cet algo n'était plus de type branch and bound, et trop avantagé par une connaissance exhaustive des méthodes du carré 4x4. 4) Génération des 8 permutations à partir d'une solution Dans un second temps, nous nous sommes dit qu'il était possible de générer 7 solutions à partir d'une seule trouvée, en utilisant rotations et symétries comme indiqué dans le II)1). Cependant, cela sous-entend trois choses : Convenablement générer les solutions Les garder en mémoire pour ne pas les reproduire Couper intelligemment les branches situées autre part Ces trois besoins sont en fait 2 problèmes très importants : Générer les solutions n'est pas très difficile Stocker les matrices solutions en mémoire n'est pas nécéssairement extrèmement compliqué, mais parcourir ce tableau pour eventuellement chercher à couper une branche a un coût colossal Couper une branche de l'autre coté de l'arbre et pas encore

générée est littéralement impossible dans notre algorithme récursif. Ces problèmes nous ont donc poussés à laisser de côté cette méthode 5) Explication détaillée de notre méthode finale Notre méthode finale est somme toute très simple, et s'approche d'un branch and bound très pur, sans bornage de solutions. Nous partons d'une matrice vide, dans laquelle aucune valeur est insérée comme racine de l'arbre. Nous allons ensuite construire 16 fils, l'un avec 1 en première valeur fixée dans la matrice, la suivante avec 2... jusqu'a 16. Nous faisons un parcours Depth-First, nous allons donc privilégier la profondeur, juste après avoir construit la matrice 1, nous allons donc descendre dans ce fils, et construire la suite (2, 3, etc...) A partir du moment ou des vérifications peuvent-être faites, elles sont faites : A partir de deux valeurs sur une ligne, colonne ou diagonale, nous vérifions qu'il reste dans la liste des valeurs possibles des nombres assez hauts pour atteindre l'invariant A partir de 3 valeurs sur une ligne, colonne ou diagonale, nous vérifions que la somme est bien à moins de 16 de l'invariant, 16 étant la valeur maximale (Un parcours de liste ici

signifie une perte de temps). Nous vérifions aussi que la somme ne dépasse pas déjà l'invariant. A partir de 4 valeurs sur une ligne, colonne ou diagonale, nous vérifions qu'elle est bien égale à l'invariant. Ces vérifications permettent donc bien d'élaguer l'arbre au fur et à mesure pour limiter les récursions inutiles. 6) Tweaking et optimisation fine Plusieurs choses ont été testées de façon à optimiser au maximum le temps de notre algorithme. Nous avons tout d'abord testé toutes les combinaisons possibles des heuristiques listées cidessus de manière à avoir le meilleur ratio gain de temps / opération. Après un certain nombre de tests, nous en sommes arrivés à la conclusion que les tests sur 2 valeurs sont trop chers en temps pour le nombre de branches élaguées (~ 75s vs ~ 70s), nous avons donc décidé de désactiver ces vérifications. Ensuite, de manière à optimiser au maximum la rapidité, nous avons multithreadé notre algorithme : Chaque coeur du processeur va s'occuper d'une partie de l'arbre de manière à parallèliser au maximum les opérations. Il a fallu faire attention au fait d'avoir des structures de données compatibles avec ces méthodes.