root/traduc/branches/bv747/manuel/geqo.sgml

Revision 128, 11.1 kB (checked in by gleu, 3 years ago)

Relecture d'Hervé Dumont (features, filelist, func, geqo, gist et history).

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/geqo.sgml,v 1.5.2.1 2005/03/20 22:34:40 guillaume Exp $
3 Genetic Optimizer
4 -->
5
6  <chapter id="geqo">
7   <docinfo>
8    <author>
9     <firstname>Martin</firstname>
10     <surname>Utesch</surname>
11     <affiliation>
12      <orgname>
13       University of Mining and Technology
14      </orgname>
15      <orgdiv>
16       Institute of Automatic Control
17      </orgdiv>
18      <address>
19       <city>
20        Freiberg
21       </city>
22       <country>
23        Germany
24       </country>
25      </address>
26     </affiliation>
27    </author>
28    <date>1997-10-02</date>
29   </docinfo>
30
31   <title id="geqo-title">Optimiseur génétique de requêtes
32     (<foreignphrase>Genetic Query Optimizer</foreignphrase>)</title>
33
34   <para>
35    <note>
36     <title>Auteur</title>
37     <para>
38      Écrit par Martin Utesch (<email>utesch@aut.tu-freiberg.de</email>)
39      de l'institut de contrôle automatique de l'université des mines et de
40      technologie de Freiberg, Allemagne.
41     </para>
42    </note>
43   </para>
44
45   <sect1 id="geqo-intro">
46    <title>Gestion des requêtes comme un problème complexe d'optimisation</title>
47
48    <para>
49     Parmi tous les opérateurs relationnels, le plus difficile à exécuter et à
50     optimiser est la jointure (<firstterm>join</firstterm>). Le nombre de plans
51     alternatifs pour répondre à une requête croît de façon exponentielle avec le
52     nombre de jointures inclus. Un effort supplémentaire d'optimisation est dû
53     au support d'une variété de <firstterm>méthodes de jointure</firstterm>
54     (par exemple les boucles imbriquées, les jointures de découpage, les
55     jointures d'assemblage dans <productname>PostgreSQL</productname>) pour
56     exécuter des jointures individuelles et une diversité
57     d'<firstterm>index</firstterm> (par exemple R-tree, B-tree, découpage
58     dans <productname>PostgreSQL</productname>) comme chemins d'accès des
59     relations.
60    </para>
61
62    <para>
63     L'implémentation de l'optimiseur de <productname>PostgreSQL</productname>
64     réalise une <firstterm>recherche pratiquement exhaustive</firstterm> sur
65     tout l'espace des stratégies alternatives. Cet algorithme, tout d'abord
66     introduit dans la base de données <quote>System R</quote>, produit un ordre
67     de jointure presque optimal mais peut prendre beaucoup de temps et d'espace
68     mémoire lorsque le nombre de jointures dans une requête devient important.
69     Ceci rend inapproprié l'optimiseur ordinaire de requêtes de
70     <productname>PostgreSQL</productname> pour les domaines d'applications des
71     bases de données ayant besoin de requêtes complexes, comme en intelligence
72     artificielle.
73    </para>
74
75    <para>
76     L'institut de contrôle automatique de l'université des mines et de
77     technologie, basé à Freiberg, Allemagne, a rencontré les problèmes décrits
78     car ces employés voulaient utiliser le DBMS
79     <productname>PostgreSQL</productname> comme moteur pour leur système de
80     support pour la maintenance d'une grille de courant électrique. Le DBMS
81     avait besoin de gérer des requêtes comprenant des jointures larges pour la
82     machine d'inférence du système de connaissances.
83    </para>
84
85    <para>
86     Les difficultés en terme de performance pour l'exploration des plans de
87     requêtes possibles ont créé la demande du développement d'une nouvelle
88     technique d'optimisation.
89    </para>
90
91    <para>
92     Dans la suite, nous décrivons l'implémentation d'un <firstterm>algorithme
93     génétique</firstterm> pour résoudre le problème des ordres de jointure
94     d'une façon efficace pour les requêtes impliquant un grand nombre de ces
95     jointures.
96    </para>
97   </sect1>
98
99   <sect1 id="geqo-intro2">
100    <title>Algorithmes génétiques</title>
101
102    <para>
103     L'algorithme génétique (<acronym>GA</acronym>) est une méthode
104     heuristique d'optimisation qui opère via des recherches déterminées au
105     hasard. L'ensemble des solutions possibles pour le problème d'optimisation
106     est considéré comme une <firstterm>population</firstterm>
107     d'<firstterm>individus</firstterm>. Le degré d'adaptation d'un individu
108     dans son environnement est spécifié par sa <firstterm>forme
109     physique</firstterm>.
110    </para>
111
112    <para>
113     Les coordonnées d'un individu dans l'espace de recherche sont représentées
114     par des <firstterm>chromosomes</firstterm>, en fait un ensemble de chaînes
115     de caractères. Un <firstterm>gène</firstterm> est une sous-section d'un
116     chromosome qui code la valeur d'un seul paramètre en cours d'optimisation.
117     Les codages typiques pour un gène pourraient être
118     <firstterm>binary</firstterm> ou <firstterm>integer</firstterm>.
119    </para>
120
121    <para>
122     À travers la simulation des opérations évolutives
123     (<firstterm>recombinaison</firstterm>, <firstterm>mutation</firstterm> et
124     <firstterm>sélection</firstterm>), de nouvelles générations de points de
125     recherche sont trouvées affichant une meilleure forme physique que leurs
126     ancêtres.
127    </para>
128
129    <para>
130     D'après la <acronym>FAQ</acronym> de <systemitem
131     class="resource">comp.ai.genetic</>, il ne peut pas être dit plus fortement
132     qu'un <acronym>GA</acronym> n'est pas une recherche effectuée seulement au
133     hasard. Un <acronym>GA</acronym> utilise des processus stochastiques mais
134     le résultat n'est pas du tout dû au hasard (mieux que cela).
135    </para>
136
137    <figure id="geqo-diagram">
138     <title>Diagramme structuré d'un algorithme génétique</title>
139
140     <informaltable frame="none">
141      <tgroup cols="2">
142       <tbody>
143        <row>
144         <entry>P(t)</entry>
145         <entry>génération des ancêtres au temps t</entry>
146        </row>
147
148        <row>
149         <entry>P''(t)</entry>
150         <entry>génération des descendants au temps t</entry>
151        </row>
152       </tbody>
153      </tgroup>
154     </informaltable>
155
156 <literallayout class="monospaced">
157 +=========================================+
158 |>>>>>>>>>>>  Algorithme GA <<<<<<<<<<<<<<|
159 +=========================================+
160 | INITIALISE t := 0                       |
161 +=========================================+
162 | INITIALISE P(t)                         |
163 +=========================================+
164 | évalue FORMEPHYSIQUE de P(t)            |
165 +=========================================+
166 | tant que pas ARRET CRITERE faire        |
167 |   +-------------------------------------+
168 |   | P'(t)  := RECOMBINAISON{P(t)}       |
169 |   +-------------------------------------+
170 |   | P''(t) := MUTATION{P'(t)}           |
171 |   +-------------------------------------+
172 |   | P(t+1) := SELECTION{P''(t) + P(t)}  |
173 |   +-------------------------------------+
174 |   | évalue FORMEPHYSIQUE de P''(t)      |
175 |   +-------------------------------------+
176 |   | t := t + 1                          |
177 +===+=====================================+
178 </literallayout>
179    </figure>
180   </sect1>
181
182   <sect1 id="geqo-pg-intro">
183    <title>Optimisation génétique des requêtes (<acronym>GEQO</acronym>) avec
184      PostgreSQL</title>
185
186    <para>
187     Le module <acronym>GEQO</acronym> est la solution du problème
188     d'optimisation des requêtes, une solution similaire au problème du voyageur
189     de commerce (<acronym>TSP</acronym>). Les plans de requêtes possibles sont
190     codés comme des chaînes d'entiers. Chaque chaîne représente l'ordre de
191     jointure d'une relation de la requête à une autre. Par exemple, l'arbre de
192     requêtes
193 <literallayout class="monospaced">
194    /\
195   /\ 2
196  /\ 3
197 4  1
198 </literallayout>
199     est codé avec la chaîne d'entiers '4-1-3-2', ce qui signifie&nbsp;:
200     première jointure entre les relations '4' et '1', puis '3' et enfin
201     '2', avec 1, 2, 3, 4 les identifiants des relations pour l'optimiseur de
202     <productname>PostgreSQL</productname>.
203    </para>
204
205    <para>
206     Des parties du module <acronym>GEQO</acronym> sont adaptées de l'algorithme
207     Genitor de D. Whitley.
208    </para>
209
210    <para>
211     Les caractéristiques spécifiques de l'implémentation de
212     <acronym>GEQO</acronym> dans <productname>PostgreSQL</productname>
213     sont&nbsp;:
214
215     <itemizedlist spacing="compact" mark="bullet">
216      <listitem>
217       <para>
218        Utilisation d'un <firstterm>état d'équilibre</firstterm> du
219        <acronym>GA</acronym> (remplacement des individus les moins performants
220        d'une population, pas un remplacement d'une génération complète) qui
221        permet une convergence rapide vers les plans de requêtes améliorés. C'est
222        essentiel pour une gestion des requêtes sur un temps raisonnable&nbsp;;
223       </para>
224      </listitem>
225
226      <listitem>
227       <para>
228        Utilisation d'un <firstterm>croisement de recombinaison de
229        bord</firstterm> qui convient tout spécialement pour garder bas le
230        nombre de pertes aux bords pour la solution du <acronym>TSP</acronym> en
231        utilisant un <acronym>GA</acronym>;
232       </para>
233      </listitem>
234
235      <listitem>
236       <para>
237        La mutation comme opérateur génétique est obsolète d'une telle façon
238        qu'aucun mécanisme de réparation n'est nécessaire pour générer des tours
239        <acronym>TSP</acronym> légaux.
240       </para>
241      </listitem>
242     </itemizedlist>
243    </para>
244
245    <para>
246     Le module <acronym>GEQO</acronym> permet à l'optimiseur de requêtes de
247     <productname>PostgreSQL</productname> de supporter les requêtes disposant
248     de jointures importantes de manière efficace via une recherche non
249     exhaustive.
250    </para>
251
252   <sect2 id="geqo-future">
253    <title>Tâches pour la future implémentation de <acronym>GEQO</acronym> pour
254     <productname>PostgreSQL</></title>
255
256      <para>
257       Un gros travail est toujours nécessaire pour améliorer les paramètres de
258       l'algorithme génétique.
259       Dans le fichier <filename>backend/optimizer/geqo/geqo_params.c</filename>,
260       pour les routines <function>gimme_pool_size</function> et
261       <function>gimme_number_generations</function>, nous devons trouver un
262       compromis dans les paramètres pour satisfaire deux demandes
263       concurrentes&nbsp;:
264       <itemizedlist spacing="compact">
265        <listitem>
266         <para>
267          Plan de requête optimum
268         </para>
269        </listitem>
270        <listitem>
271         <para>
272          Temps de calcul
273         </para>
274        </listitem>
275       </itemizedlist>
276      </para>
277
278    </sect2>
279   </sect1>
280
281  <sect1 id="geqo-biblio">
282   <title>Lectures supplémentaires</title>
283
284   <para>
285    Les ressources suivantes contiennent des informations supplémentaires sur
286    les algorithmes génétiques&nbsp;:
287
288    <itemizedlist>
289     <listitem>
290      <para>
291       <ulink url="http://surf.de.uu.net/encore/www/">The Hitch-Hiker's
292       Guide to Evolutionary Computation</ulink> (FAQ de <ulink
293       url="news://comp.ai.genetic">comp.ai.genetic</ulink>)
294      </para>
295     </listitem>
296    
297     <listitem>
298      <para>
299       <ulink url="http://www.red3d.com/cwr/evolve.html">Evolutionary
300        Computation and its application to art and design</ulink> par
301       Craig Reynolds
302      </para>
303     </listitem>
304
305     <listitem>
306      <para>
307       <xref linkend="ELMA99">
308      </para>
309     </listitem>
310
311     <listitem>
312      <para>
313       <xref linkend="FONG">
314      </para>
315     </listitem>
316    </itemizedlist>
317   </para>
318
319  </sect1>
320 </chapter>
321
322 <!-- Keep this comment at the end of the file
323 Local variables:
324 mode:sgml
325 sgml-omittag:nil
326 sgml-shorttag:t
327 sgml-minimize-attributes:nil
328 sgml-always-quote-attributes:t
329 sgml-indent-step:1
330 sgml-indent-data:t
331 sgml-parent-document:nil
332 sgml-default-dtd-file:"./reference.ced"
333 sgml-exposed-tags:nil
334 sgml-local-catalogs:("/usr/lib/sgml/catalog")
335 sgml-local-ecat-files:nil
336 End:
337 -->
Note: See TracBrowser for help on using the browser.