<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/geqo.sgml,v 1.9 2001/09/13 05:00:53 junichi Exp $
Genetic Optimizer
-->

 <chapter id="geqo">
  <docinfo>
   <author>
    <firstname>Martin</firstname>
    <surname>Utesch</surname>
    <affiliation>
     <orgname>
      University of Mining and Technology
     </orgname>
     <orgdiv>
      Institute of Automatic Control
     </orgdiv>
     <address>
      <city>
       <!-- Freiberg -->
       フライブルグ 
      </city>
      <country>
       <!-- Germany -->
       ドイツ
      </country>
     </address>
    </affiliation>
   </author>
   <date>1997-10-02</date>
  </docinfo>

  <!-- <title>Genetic Query Optimization</title> -->
  <title>遺伝的問い合わせ最適化</title>
<indexterm><primary>GEQO</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>GEQO</secondary></indexterm><indexterm><primary sortas="いでんてきといあわせさいてきか">遺伝的問い合わせの最適化</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary sortas="いでんてきといあわせさいてきか">遺伝的問い合わせの最適化</secondary></indexterm><indexterm><primary sortas="といあわせ">問い合わせ</primary><secondary sortas="さいてきか">最適化</secondary></indexterm>

   <note>

    <!-- <title>Author</title> -->
    <title>著者</title>

    <para>
     <!-- Written by Martin Utesch (<email>utesch@aut.tu-freiberg.de</email>)
     for the Institute of Automatic Control at the University of Mining and 
     Technology in Freiberg, Germany. -->
     
     このドキュメントはMartin Utesch（<email>utesch@aut.tu-freiberg.de</email>）によって、ドイツ、フライブルグにあるUniversity of Mining and TechnologyのInstitute of Automatic Controlのために書かれました。

    </para>
   </note>

  <sect1 id="geqo-intro">
   <!-- <title>Query Handling as a Complex Optimization Problem</title> -->
   <title>複雑な最適化問題としての問い合わせ処理</title>

   <para>
    <!-- Among all relational operators the most difficult one to process and
    optimize is the <firstterm>join</firstterm>. The number of alternative plans
    to answer a query grows exponentially with the number of <command>join
    </command>s included in it. Further
    optimization effort is caused by the support of a variety of
    <firstterm>join methods</firstterm>(e.g., nested loop, hash join, merge 
    join in <productname>Postgres</productname>) to
    process individual <command>join</command>s and a diversity of
    <firstterm>indices</firstterm> (e.g., r-tree,
    b-tree, hash in <productname>Postgres</productname>) as access paths for 
    relations. -->

    リレーショナル演算子の中で、処理と最適化が一番難しいのは<firstterm>結合</firstterm>です。ある問い合わせに答えるための計画の侯補は、その問い合わせが持つ<command>結合</command>の数によって指数的に増えます。さらなる最適化の努力はさまざまな<firstterm>結合メソッド</firstterm>のサポートによってなされます（たとえば<productname>Postgres</productname>の入れ子ループ、ハッシュ結合、マージ結合など）。これは個々の<command>結合</command>やさまざまな<firstterm>インデックス</firstterm>（たとえば<productname>Postgres</productname>のr-tree、b-tree、ハッシュなど）をリレーションのアクセスパスとして処理するためです。
   </para>

   <para>
    <!-- The current <productname>Postgres</productname> optimizer
    implementation performs a <firstterm>near-exhaustive search</firstterm>
    over the space of alternative strategies. This query 
    optimization technique is inadequate to support database application
    domains that involve the need for extensive queries, such as artificial
    intelligence. -->

    現在の<productname>Postgres</productname>オプティマイザの実装は、ストラテジの侯補空間の<firstterm>しらみつぶしに近い検索</firstterm>を行います。この問い合わせ最適化技術は、大規模な問い合わせを必要とするデータベースアプリケーションのドメイン（人工知能など）をサポートするには向いていません。

   </para>

   <para>
    <!-- The Institute of Automatic Control at the University of Mining and
    Technology, in Freiberg, Germany, encountered the described problems as its
    folks wanted to take the <productname>Postgres</productname> DBMS as the 
    backend for a decision support knowledge based system for the maintenance 
    of an electrical power grid. The DBMS needed to handle large <command>join
    </command> queries for the inference machine of the knowledge based 
    system. -->

    ドイツ、フライブルグにあるUniversity of Mining and TechnologyのInstitute of Automatic Controlでは、送電網の保守のための意志決定知識ベースシステムのためのバックエンドとして<productname>Postgres</productname> DBMSを使おうとしたため問題が起こりました。そのDBMSは知識ベースシステムの推論マシンのために、大きな<command>結合</command>の問い合わせを処理する必要があったのです。 

   </para>

   <para>
    <!-- Performance difficulties in exploring the space of possible query
    plans created the demand for a new optimization technique being 
    developed. -->

    可能な問い合わせ計画の探策性能に問題があったため、新しい最適化技術の開発が必要とされるようになりました。

   </para>

   <para>
    <!-- In the following we propose the implementation of a <firstterm>
    Genetic Algorithm</firstterm>
    as an option for the database query optimization problem. -->

    そこで、データベース問い合わせ最適化問題へのオプションとして、<firstterm>遺伝的アルゴリズム</firstterm>の実装を提案します。

   </para>
  </sect1>

  <sect1 id="geqo-intro2">
   <!-- <title>Genetic Algorithms (<acronym>GA</acronym>)</title> -->
   <title>遺伝的アルゴリズム（<acronym>GA</acronym>）</title>
<indexterm><primary>GA</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>GA</secondary></indexterm><indexterm><primary sortas="いでんてきあるごりずむ">遺伝的アルゴリズム</primary></indexterm>
   <para>
    <!-- The <acronym>GA</acronym> is a heuristic optimization method which
    operates through
    determined, randomized search. The set of possible solutions for the
    optimization problem is considered as a
    <firstterm>population</firstterm> of <firstterm>individuals</firstterm>.
    The degree of adaption of an individual to its environment is specified
    by its <firstterm>fitness</firstterm>. -->

    <acronym>GA</acronym>（Genetic Algorithms：遺伝的アルゴリズム）は発見的な最適化手法で、限定された無作為の検索の中で働きます。最適化の問題に対する一式の解は<firstterm>個体</firstterm>の<firstterm>人口</firstterm>と呼ばれます。個体の環境への適応の度合いは<firstterm>適合度</firstterm>によって指定されます。
    
   </para>

   <para>
   <!--     The coordinates of an individual in the search space are 
   represented   by <firstterm>chromosomes</firstterm>, in essence a set of 
   character
    strings. A <firstterm>gene</firstterm> is a
    subsection of a chromosome which encodes the value of a single parameter
    being optimized. Typical encodings for a gene could be <firstterm>binary
    </firstterm> or
    <firstterm>integer</firstterm>. -->

    探策空間の中で個体の座標は、<firstterm>染色体</firstterm>によって表されます。これは本質的には一式の文字列です。<firstterm>遺伝子</firstterm>は染色体の一部であり、最適化をしようとしているパラメータの値をコード化します。遺伝子のコード化の典型的な例としては<firstterm>バイナリ</firstterm>や<firstterm>整数</firstterm>があります。

   </para>

   <para>
    <!-- Through simulation of the evolutionary operations <firstterm>
    recombination</firstterm>,
    <firstterm>mutation</firstterm>, and
    <firstterm>selection</firstterm> new generations of search points are found
    that show a higher average fitness than their ancestors. -->

    進化論の過程のシミュレーションである、<firstterm>組換え</firstterm>、<firstterm>突然変異</firstterm>、<firstterm>選択</firstterm>を通して、祖先よりも適合度の平均が高い新世代の探策点が見つけられます。

   </para>

   <para>
    <!-- According to the "comp.ai.genetic" <acronym>FAQ</acronym> it cannot be 
    stressed too
    strongly that a <acronym>GA</acronym> is not a pure random search for a solution 
    to a
    problem. A <acronym>GA</acronym> uses stochastic processes, but the result is 
    distinctly
    non-random (better than random). -->

    comp.ai.geneticの<acronym>FAQ</acronym>によると、<acronym>GA</acronym>が問題に対する純粋な無作為検索ではないことを強調し過ぎることはないとしています。<acronym>GA</acronym>は確率的なプロセスを使いますが、結果は明らかに無作為的ではありません（無作為よりもよりよいものです）。
</para>

<example>
<title><acronym>GA</acronym>の構造図</title>
<!-- Structured Diagram of a <acronym>GA</acronym>: -->
<programlisting>
<!-- P(t)    generation of ancestors at a time t
P''(t)  generation of descendants at a time t -->
P(t)    時間 t における先祖の発生
P''(t)  時間 t における子孫の発生

+=========================================+
|>>>>>>>>>>>  Algorithm GA  <<<<<<<<<<<<<<|
+=========================================+
| INITIALIZE t := 0                       |
+=========================================+
| INITIALIZE P(t)                         |
+=========================================+
| evalute FITNESS of P(t)                 |
+=========================================+
| while not STOPPING CRITERION do         |
|   +-------------------------------------+
|   | P'(t)  := RECOMBINATION{P(t)}       |
|   +-------------------------------------+
|   | P''(t) := MUTATION{P'(t)}           |
|   +-------------------------------------+
|   | P(t+1) := SELECTION{P''(t) + P(t)}  |
|   +-------------------------------------+
|   | evalute FITNESS of P''(t)           |
|   +-------------------------------------+
|   | t := t + 1                          |
+===+=====================================+
</programlisting>
   </example>
  </sect1>

  <sect1 id="geqo-pg-intro">
   <!-- <title>Genetic Query Optimization (<acronym>GEQO</acronym>) in Postgres
   </title> -->
   
   <title>Postgresの遺伝的問い合わせ最適化（<acronym>GEQO</acronym>）</title>

   <para>
    <!--  
    The <acronym>GEQO</acronym> module is intended for the solution of the query
    optimization problem similar to a traveling salesman problem (<acronym>TSP
    </acronym>).
    Possible query plans are encoded as integer strings. Each string
    represents the <command>join</command> order from one relation of the query 
    to the
    next.
    E. g., the query tree
<programlisting>
   /&bsol;
  /&bsol; 2
 /&bsol; 3
4  1
</programlisting>
    is encoded by the integer string '4-1-3-2',
    which means, first join relation '4' and '1', then '3', and
    then '2', where 1, 2, 3, 4 are relids within the
    <productname>Postgres</productname> optimizer.
    -->

   <acronym>GEQO</acronym>のモジュールは、巡回セールスマン問題（<acronym>TSP</acronym>）に似た問い合わせ最適化問題の解決策として意図されています。可能な問い合わせプランは、整数の文字列としてコード化されます。それぞれの文字列は、問い合わせの1つのリレーションから次へと<command>結合</command>の順番を表します。たとえば、以下問い合わせツリーは整数文字列「4-1-3-2」によってコード化されています。
</para>

<programlisting>
   /&bsol;
  /&bsol; 2
 /&bsol; 3
4  1
</programlisting>

<para>
    これが意味するのは、まずリレーション「4」と「1」を、次に「3」を、そして「2」を結合するということです。ここで1、2、3、4は<productname>Postgres</productname>オプティマイザ内でrelidを表します。
   </para> 

   <para>
    <!-- Parts of the <acronym>GEQO</acronym> module are adapted from D. 
    Whitley's Genitor
    algorithm. -->

    <acronym>GEQO</acronym>モジュールの一部はD. WhitleyのGenitorアルゴリズムを適合させたものです。

   </para>

   <para>
    <!-- Specific characteristics of the <acronym>GEQO</acronym>
    implementation in <productname>Postgres</productname>
    are: -->

    <productname>Postgres</productname>における<acronym>GEQO</acronym>の実装特有の特徴は下記のとおりです。
</para>

    <itemizedlist spacing="compact" mark="bullet">
     <listitem>
      <para>
       <!-- Usage of a <firstterm>steady state</firstterm> <acronym>GA
       </acronym> (replacement of the least fit
       individuals in a population, not whole-generational replacement)
       allows fast convergence towards improved query plans. This is
       essential for query handling with reasonable time; -->

       <firstterm>安定状態</firstterm><acronym>GA</acronym>の使用（世代全体の置き換えではなく、個体群の中で適合度の低いものだけの置き換え）は、よりよい問い合わせ計画へのすばやい収束を可能にします。これは、妥当な時間内での問い合わせ処理にはきわめて重要なものです。

      </para>
     </listitem>

     <listitem>
      <para>
       <!-- Usage of <firstterm>edge recombination crossover</firstterm> 
       which is
       especially suited
       to keep edge losses low for the solution of the
       <acronym>TSP</acronym> by means of a <acronym>GA</acronym>; -->

       <acronym>GA</acronym>による<acronym>TSP</acronym>の解決策のエッジ損失を低く抑えるために特別に作られた、<firstterm>エッジ再交配交叉</firstterm>を使用します。
       

      </para>
     </listitem>

     <listitem>
      <para>
       <!-- Mutation as genetic operator is deprecated so that no repair
       mechanisms are needed to generate legal <acronym>TSP</acronym> tours. -->

       <acronym>TSP</acronym>の合法な巡回を行うために必要な回復処理が必要ないように、遺伝的演算子の突然変異は低くしてあります。

      </para>
     </listitem>
    </itemizedlist>

   <para>
    <!-- The <acronym>GEQO</acronym> module allows
    the <productname>Postgres</productname> query optimizer to
    support large <command>join</command> queries effectively through
    non-exhaustive search. -->

    <acronym>GEQO</acronym>モジュールにより、<productname>Postgres</productname>問い合わせオプティマイザが、大きな<command>結合</command>問い合わせをしらみつぶし探策以外の方法で実行することが可能になります。

   </para>

  <sect2 id="geqo-future">
   <!-- <title>Future Implementation Tasks for
    <productname>PostgreSQL</> <acronym>GEQO</acronym></title> -->

<title><productname>PostgreSQL</> <acronym>GEQO</acronym>の今後の実装作業</title>
 
     <para>
      <!-- Work is still needed to improve the genetic algorithm parameter
      settings.
      In file <filename>backend/optimizer/geqo/geqo_params.c</filename>, 
      routines
      <function>gimme_pool_size</function> and <function>
      gimme_number_generations</function>,
      we have to find a compromise for the parameter settings
      to satisfy two competing demands: -->

      遺伝的アルゴリズムのパラメータ設定を改善するためにはまだ課題が残っています。次の2つの相反する要求を満たす妥協点を見つけなければいけません。
</para>

      <itemizedlist spacing="compact">
       <listitem>
	<para>
	 <!-- Optimality of the query plan -->
         問い合わせ計画の最適性

	</para>
       </listitem>
       <listitem>
	<para>
	 <!-- Computing time -->
          計算時間
	</para>
       </listitem>
      </itemizedlist>

   </sect2>

   <bibliography id="geqo-biblio">
    <title>
     <!-- References -->
      参考資料
    </title>
    <para><!-- Reference information for <acronym>GEQ</acronym> algorithms. -->
          <acronym>GEQ</acronym>アルゴリズム関連情報
    </para>
    <biblioentry>

     <bookbiblio>
      <title>
       The Hitch-Hiker's Guide to Evolutionary Computation
      </title>
      <authorgroup>
       <author>
	<firstname>J&ouml;rg</firstname>
	<surname>Heitk&ouml;tter</surname>
       </author>
       <author>
	<firstname>David</firstname>
	<surname>Beasley</surname>
       </author>
      </authorgroup>
      <publisher>
       <publishername>
	InterNet resource
       </publishername>
      </publisher>
      <abstract>
       <para>
	<!-- FAQ in <ulink url="news://comp.ai.genetic">comp.ai.genetic</ulink>
	is available at <ulink
	 url="ftp://ftp.Germany.EU.net/pub/research/softcomp/EC/Welcome.html">Encore</ulink>. -->

        <ulink url="news://comp.ai.genetic/">comp.ai.genetic</ulink><![%book-publish;[（news://comp.ai.genetic/）]]>のFAQは<ulink url="ftp://ftp.Germany.EU.net/pub/research/softcomp/EC/Welcome.html">Encore</ulink><![%book-publish;[（ftp://ftp.Germany.EU.net/pub/research/softcomp/EC/Welcome.html）]]>で見ることができます。

       </para>
      </abstract>
     </bookbiblio>

     <bookbiblio>
      <title>
       The Design and Implementation of the Postgres Query Optimizer
      </title>
      <authorgroup>
       <author>
	<firstname>Z.</firstname>
	<surname>Fong</surname>
       </author>
      </authorgroup>
      <publisher>
       <publishername>
	University of California, Berkeley Computer Science Department
       </publishername>
      </publisher>
      <abstract>
       <para>
	<!-- File <filename>planner/Report.ps</filename> in the 'postgres-papers' distribution. -->
        ファイル<filename>planner/Report.ps</filename>は「postgres-papers」配布物の中にあります<footnote><para>訳注：この論文は<ulink url="http://db.cs.berkeley.edu/papers/">Database Papers</ulink><![%book-publish;[（http://db.cs.berkeley.edu/papers/）]]>にあります</para></footnote>。
       </para>
      </abstract>
     </bookbiblio>

     <bookbiblio>
      <title>
       Fundamentals of Database Systems
      </title>
      <authorgroup>
       <author>
	<firstname>R.</firstname>
	<surname>Elmasri</surname>
       </author>
       <author>
	<firstname>S.</firstname>
	<surname>Navathe</surname>
       </author>
      </authorgroup>
      <publisher>
       <publishername>
	The Benjamin/Cummings Pub., Inc.
       </publishername>
      </publisher>
     </bookbiblio>

    </biblioentry>
   </bibliography>

  </sect1>
 </chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-->
