(57)【特許請求の範囲】
【請求項１】
所望の目的関数を最適化する配置要素の配置結果が与えられたとき、該配置結果と、配置要素の大きさを考慮して、配置要素を重なりなく定められた領域に配置するコンピュータによるパッキング処理方法であって、
上記コンピュータが、上記領域を複数の部分配置領域に分割し、
上記部分領域のある位置から、配置要素を各部分領域に詰めていくことにより、該分割された各領域内で、局所パッキング法により、配置要素を重なりなく配置し、
上記部分領域間に配置要素の重なりが生じている場合、該部分領域間に生ずる配置要素の重なりを以下の（ａ）〜（ｄ）のステップからなる遺伝的アルゴリズムを実行し解消する
(ａ) 上記部分領域間に生ずる重なっている配置要素の座標と、その近傍の配置要素の座標を遺伝子とする染色体を生成するステップ。
（ｂ）上記生成された染色体を親として、２つの親の染色体から子供の染色体を作り出す交叉の操作を実行して、子供の染色体を作り出し、また、配置要素の座標をランダムに動かす突然変異の操作を実行して、上記染色体に突然変位を作用させるステップ。
（ｃ）上記交叉および突然変異の操作により得られた染色体の内、適応度の高いものを選択し、適応度の高いものを自己複製するステップ。
（ｄ）得られた染色体の適応度が基準以上であるかを調べ、基準以上のものが得られるまで、上記処理を繰り返し、基準以上の適応度の染色体を求めるステップ。
ことを特徴とする配置問題における遺伝的アルゴリズムを用いたパッキング処理方法。
【請求項２】
上記生成された染色体を親として、２つの親の染色体から子供の染色体を作り出す交叉の操作において、親の２つの個体の染色体の同じ領域を選択し、この領域にある上記２つの個体の遺伝子の重み付き平均を計算し、
その結果得られた座標を該当する領域の遺伝子とする染色体をもつ個体を子供とすることで交叉を実行する
ことを特徴とする請求項１の配置問題における遺伝的アルゴリズムを用いたパッキング処理方法。
【請求項３】
遺伝的アルゴリズムを実行する過程において、重なっている配置要素を選択し、重なっている配置要素の近傍の配置要素を選択し、選択された配置要素を上下左右斜めに定められた範囲で移動させ、移動した位置で、配置要素と重なってない場合に配置要素をそこに置く反復改善法を用いる
ことを特徴とする請求項１または請求項２の配置問題における遺伝的アルゴリズムを用いたパッキング処理方法。
【請求項４】
所望の目的関数を最適化する配置要素の配置結果が与えられたとき、該配置結果と、配置要素の大きさを考慮して、配置要素を重なりなく定められた領域に配置するパッキング・システムであって、
上記領域を複数の部分配置領域に分割する手段と
上記部分領域のある位置から、配置要素を各部分領域に詰めていくことにより、該分割された各領域内で、局所パッキング法により、配置要素を重なりなく配置する手段と、
上記部分領域間に配置要素の重なりが生じている場合、遺伝的アルゴリズムを実行し、上記部分領域間に生ずる配置要素の重なりを解消する手段とを備え、
遺伝的アルゴリズムを実行する手段は、上記部分領域間に生ずる重なっている配置要素の座標と、その近傍の配置要素の座標を遺伝子とする染色体を生成する手段と、
上記生成された染色体を親として、２つの親の染色体から子供の染色体を作り出す交叉の操作を実行して、子供の染色体を作り出し、また、配置要素の座標をランダムに動かす突然変異の操作を実行し、上記染色体に突然変位を作用させる手段と、
上記交叉および突然変異の操作により得られた染色体の内、適応度の高いものを選択し、適応度の高いものを自己複製する手段と、
得られた染色体の適応度が基準以上であるかを調べ、基準以上のものが得られるまで、上記処理を繰り返し、基準以上の適応度の染色体を求める手段とを備える
ことを特徴とする配置問題における遺伝的アルゴリズムを用いたパッキング・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、大規模集積回路（ＬＳＩ）設計に際してのセルの配置問題、あるいはフロアプラン等に適用することができる遺伝的アルゴリズムを用いたパッキング技術に関し、特に、配置要素を重なりなく最適な状態で配置することができる、配置結果をパッキングするためのパッキング技術に関するものである。
【０００２】
【従来の技術】
配置問題とは、大規模集積回路（ＬＳＩ）の設計に際して配線距離を最短化する要素の配置を求めたり、あるいは、ガントチャート（時間と生産量の関係を表すチャート）の最適化をはかる等のために、配置要素の最適配置を決定する問題である。
上記配置問題の解法として、本発明者らは先に遺伝的アルゴリズムによる解法を提案した（特願平１０−２５８３３４号）。先に提案した技術は、配置問題の配置結果の疎密を遺伝的アルゴリズムにより解消するものである。
遺伝的アルゴリズムとは、最適解を求める１手法であり、生物の遺伝の機構を模倣して、それを工学的に応用した技術である。
【０００３】
生物の進化の過程では、既存の個体（親）から新たなる個体（子）が生まれる際に、個体の持つ染色体同士の交叉、染色体上の遺伝子の突然変異などが起こる。そして、環境に適応しない個体は淘汰され、環境により適応した個体が生きのびて新たな親となり、さらに新たな子孫を作っていく。
このようにして、環境に適応した個体の集団が生き伸びていく。各個体がどの程度環境に適応するかは、染色体（遺伝子の一次元ストリング）によって決定される。遺伝的アルゴリズムでは、最適化問題の解候補を遺伝子の一次元ストリングである染色体として表現し、図３１に示すように、解候補の集団に対して選択（selection ）／自己複製（reproduction）・交叉（crossover ）・突然変異（mutation）等の操作を繰り返し施すことにより最適解の探索を行なう
【０００４】
最適化問題の目的関数が環境に相当し、目的関数を最適にするものほど大きい値を取るような適応度関数が染色体に対して定義される。選択／自己複製とは、図３２に示すように、集団の中で適応度の高い染色体を持つ個体をより高い確率で選択して次世代の親とする操作である。交叉とは、図３３に示すように、２つの染色体（親）の一部を互いに入れ換えて新たな個体（子）を作り出す繰作である。また、突然変異とは、図３４に示すように、一つの染色体の一部の遺伝子をランダムに置き換える操作である。
これらの操作を繰り返すことによって適応度のより高い染色体（＝目的関数をより最適化する解）が得られる。
【０００５】
【発明が解決しようとする課題】
ところで、上記した配置問題において、最適配置を求める要素数が非常に多い等、問題の規模が大きいときには、通常、配置すべき各要素の大きさを考慮せず、各要素を点として要素の最適配置を決定している。
しかしながら、要素はそれぞれ大きさを持っているため、上記のようにして決定された最適配置に基づいて要素を配置すると、要素が重なるという問題が生ずる。
このため、配線距離を最短にするなどの所望の目的関数（これを以下では元の配置問題の目的関数という）を最適化した最適配置（この段階では要素を点として配置を決定している）について、要素の大きさを考慮して、要素が重ならないように定められた領域内に配置する（これをここではパッキングという）必要がある。
【０００６】
本発明は上記した事情に鑑みなされたものであって、その目的とするところは、遺伝的アルゴリズムを用いて、要素の重なりを解消する解を高速に求め、所望の目的関数を最適化させるように決定された要素配置に基づき、各要素を効率的に定められた領域内にパッキングすることである。
【０００７】
【課題を解決するための手段】
配置問題とは、所定の制約条件のもとで所望の目的関数を最小化するように配置要素の配置を決定することであり、ここでは次の前提条件のもとで説明する。
・配置要素は指定された領域に配置される。
・配置要素は大きさをもつ。
・便宜上、配置要素は長方形とする。
本発明は、大規模な配置問題において、配置要素を上記指定された配置領域に重ならないように配置するものであり、この場合の目的関数は元の配置問題の目的関数（前記した例えば配線距離を最短化するなど）と、配置要素間の重なりを示す関数の重みづけられた和である。
【０００８】
図１は本発明の基本原理を示す原理図であり、本発明においては次のようにして前記課題を解決する。
図１のＡに示すように、元の配置問題の目的関数を最適化した配置結果が与えられたとする。この段階では、前記したように配置すべき各要素各要素を点として要素の最適配置を決定しており、一般に配置要素は点ではなく大きさを持つために、同図Ａに示すように配置領域にお互い同士重なって配置される。このため配置要素の間の重なりを解消する必要がある。
そこで、例えば、同図ＢのＢ−１〜Ｂ−３に示すように、配置領域を縦または横または縦と横に適当な幅で分割する。これらの分割された領域を部分配置領域と呼ぶ。
配置要素の相対的な位置関係をできるかぎり保存するために、上記で定義された各部分配置領域内で配置要素を、先に決定された要素の位置を元にして、ある定められた方法で順序を付ける。
【０００９】
この順序を元にして、部分配置領域内の適当な位置から配置要素を詰めていくことによって配置結果の重なりをとる局所的パッキング法により、同図Ｃに示すように、重なりを解消する。
さらに、遺伝的アルゴリズムによって部分配置領域を合わせた配置領域全体の配置要素の重なりを解消する。また局所的パッキング法と遺伝的アルゴリズムを組み合わせて大局的に最適なパッキングを実現する。
以上のように、局所的パッキング法はパッキングを見通し良くかつ効果的に実施することができ、また、遺伝的アルゴリズムによるパッキング法は、適応度の増大に寄与するとともに、遺伝的アルゴリズムの計算速度を増加させることができる。したがって、本発明において提案する方法によって、遺伝的アルゴリズムの大域的探索法により効率的に配置問題の配置結果のパッキングを実施することができる。
【００１０】
以上に基づき、本発明においては次のようにして前記課題を解決する。
１．所望の目的関数を最適化する配置要素の配置結果が与えられたとき、該配置結果と、配置要素の大きさを考慮して、配置要素を重なりなく定められた領域に配置するに際し、上記領域を複数の部分配置領域に分割し、局所パッキング法により該分割された各領域内で配置要素を重なりなく配置し、遺伝的アルゴリズムを実行して上記部分領域間に生ずる配置要素の重なりを解消する。
２．上記１．において、上記部分領域間に生ずる重なっている配置要素の座標と、その近傍の配置要素の座標を遺伝子とする染色体を生成し、該染色体を用いて遺伝的アルゴリズムを実行し、部分領域間に生ずる配置要素の重なりを解消する。
３．上記２．において、遺伝的アルゴリズムを実行する過程において、親の２つの個体の染色体の同じ領域を適当な方法で選択し、この領域にある上記２つの個体の遺伝子の重み付き平均を計算し、その結果得られた座標を該当する領域の遺伝子とする染色体をもつ個体を子供とすることで交叉を実行する。
４．上記２．，３．において、遺伝的アルゴリズムを実行する過程において、配置要素の重なりを取り除く操作を配置要素の重なりが解消されるまで繰り返す反復改善法を用いる。
【００１１】
なお、本発明は次のようにして実現することもできる。
（Ａ）上記１．における部分配置領域への分割および局所パッキングを次のように行う。
(1) 配置領域全体を格子状に分割することで部分配置領域を定義し、この部分配置領域で局所的パッキング法を実施する。
(2) 配置領域を部分配置領域へ分割する方法として、大きな固定配置要素を配置領域から取り去った残りの領域を元にして部分配置領域を定義する。
(3) 配置領域を部分配置領域へ分割する方法として、細長い固定配置領域を配置領域から取り去った残りの領域を元にして部分配置領域を定義する。
(4) 配置領域を部分配置領域へ分割する方法として、階層的に配置領域を分割して部分配置領域を作る。
(5) 配置領域を部分配置領域へ分割する方法として、配置領域を適当な多角形に分解し部分配置領域を作る。
(6) 配置領域を部分配置領域へ分割する方法として、配置要素を置かない部分配置領域を設定する。
【００１２】
(7) 配置領域を部分配置領域へ分割する方法として、上記(1) 、(2) 、(3) 、(4) を組み合わせる。
(8) 局所的パッキング法として煉瓦積み方式のパッキング法を実行する。
(9) 局所的パッキング法としてテトリス方式のパッキング法を実行する。
(10)局所的パッキング法として凝縮方式のパッキング法を実行する。
(11)局所的パッキング法として拡散方式のパッキング法を実行する。
(12)局所的パッキング法として上記(8) の煉瓦積み方式を実行する際に使用する配置要素の順序としてパッキングの際に、配置要素の相対的な位置関係と配置要素の横幅と配置領域の横幅をもとにして配置要素の順序を決定する。
(13)局所的パッキング法として上記(9) のテトリス方式を実行する際に使用する配置要素の順序として配置結果の相対的な位置関係とパッキングの際に配置要素が部分配置領域の外へでない順序を採用する。
(14)局所的パッキング法として上記(10)の凝縮方式を実行する際に使用する配置要素の順序として、配置要素のパッキングの中心を原点とする極座標をもとにした方法によって決められた順序を用いる。
【００１３】
(15)局所的パッキング法として上記(11)の拡散方式を実行する際に使用する配置要素の順序として、配置要素をそのｘ座標とｙ座標によってそれぞれに基づいて順序をつけ、これら２つの順序を用いる。
(16)局所的パッキング法として上記(11)の拡散方式を実行する際の手順として、配置要素でＯｘ，Ｏｙの両方で前にある要素を部分配置領域の左下から詰めていく。
(17)局所的パッキング法として上記(11)の拡散方式を実行する際の手順として、配置要素でＯｘ，Ｏｙの両方で後にある要素を部分配置領域の右上から詰めていく。
(18)局所的パッキング法として上記(11)の拡散方式を実行する際の手順として、配置要素でＯｘでは後ろ、Ｏｙでは前にある要素を部分配置領域の右下から詰めていく。
(19)局所的パッキング法として上記(11)の拡散方式を実行する際の手順として、配置要素でＯｘでは前、Ｏｙでは後ろにある要素を部分配置領域の左上から詰めていく。
【００１４】
(20)局所的パッキング法として上記(11)の拡散方式を実行する際の手順として、上記(16)(17)(18)(19)の手順を組み合わせる。
(21)局所的パッキング法において、部分配置領域に大きな配置要素があるばあいに、配置結果において配置要素がこれと重なっている場合において、大きな配置要素との重なりがなくなる位置までの距離が最小となる位置にパッキングする。
(22)局所的パッキング法において、部分配置領域に大きな配置要素がありかつ、配置結果において大きな配置要素が配置領域の境界付近にある場合には、大きな配置要素に重なっている配置要素が配置領域から出ないように配置要素を動かす向きをあらかじめ決めておく。
(23)局所的パッキング法において、部分配置領域に大きな配置要素がある場合には、大きなビルを風が迂回していく空気の移動のアナロジーを使って重なっている配置要素を大きな配置要素の周りに分散して配置する。
(24)局所的パッキング法において、部分配置領域に固定した配置要素があり、かつ配置結果において配置要素がこれと重なっている場合において、固定した配置要素との重なりがなくなる位置までの距離が最小となる位置にパッキングする。
【００１５】
(25)局所的パッキング法において、部分配置領域に固定した配置要素があり、かつ配置結果において配置要素がこれと重なっており、かつ固定した配置要素が配置領域の境界付近にある場合において、重なっている配置要素が配置領域から出ないように配置要素を動かす向きをあらかじめ決めておく。
(26)局所的パッキング法において、部分配置領域に固定した配置要素があり、かつ配置結果において配置要素がこれと重なっている場合において、計算の高速化を計るために、重ならないように配置要素を移動する向きをあらかじめ決めておく。
(27)局所的パッキング法において、部分配置領域に非常に細長い固定した配置要素があり、かつ配置結果において配置要素がこれと重なっている場合において、ある特定の方向（ｘ方向またはｙ方向）に細長い固定要素がある場合には、この細長い固定要素に重なっている配置要素を移動する方向はこの固定要素の幅（ｘ方向）、高さ（ｙ方向）のうち短いものを選択しその方向へ重ならなくなるまで移動する。
【００１６】
（Ｂ）前記１．〜４．において、次のように遺伝的アルゴリズムの実行する。
(1) 遺伝的アルゴリズムにおいて前記２．の染色体のコード法を用いる場合に、親の２つの個体のうち一つの親の染色体の領域を適当な方法で選択し、この領域の遺伝子をもう一方の親の染色体のコピーの対応する領域に張り付けることで子供の染色体を作り出す。
(2) 前記２．の染色体のコード法を用いる場合に、配置要素の座標をランダムに動かす突然変異を実行する。
(3) 前記２．の染色体のコード法を用いる場合に、重なっている配置要素の座標をランダムに動かす突然変異を実行する。
(4) 前記２．の染色体のコード法を用いる場合に、重なっている配置要素とその近傍にある配置要素の座標をランダムに動かす突然変異を実行する。
(5) 前記２．の染色体のコード法を用いる場合に、適応度として次のフィットネス関数を用いる。
（フィットネス）＝定数−（重み１）×（重なっている配置要素の総数）−（重み２）×（元の配置問題のコスト）
(6) 前記２．の染色体のコード法を用いる場合に、適応度として次のフィットネス関数を用いる。
（フィットネス）＝定数−（重み１）×（配置要素の重なっている部分の面積の総和）−（重み２）×（元の配置問題のコスト）
(7) 前記４．における反復改善法として、次の方法を用いる。
重なっている配置要素およびその近傍の配置要素を上下左右に限定された範囲で移動し配置要素間の重なりを取り除く処理を反復的に実行する。
【００１７】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。
１．実施例
図２には本発明が適用されるシステムの構成例を示す図である。同図において、１１はＣＰＵであり、ＣＰＵ１１にはバス１０が接続されており、バス１０にはメモリ１２、外部記憶装置１３、通信インタフェース１４、ＣＤ−ＲＯＭ、ＦＤ等からデータやプログラムを読み込むための媒体読取装置１５、キーボードやマウス等の入力デバイスを含む入力装置１６が接続され、さらに、ディスプレイ等の出力装置１７が接続されている。
【００１８】
外部記憶装置１３には本発明の遺伝的アルゴリズムを用いたパッキング処理を行うためのプログラムやデータが格納され、これらのプログラム等は、メモリ１２に読み込まれＣＰＵ１１により実行される。また、通信インタフェース１４により通信回線を介して、データやプログラムを授受することもできる。
本実施例の処理を行うには、予め配線距離を最短にするなどの所望の目的関数を最適化する最適配置を求めておく。このデータは上記外部記憶装置１３に記憶される。ついで、本実施例に基づく局所パッキング、遺伝的アルゴリズムによる処理を行い、配置要素を重ならないように定められた領域内に配置する。
【００１９】
図３は本発明の実施例の処理を示すフローチャートであり、まず、同図により本実施例の遺伝的アルゴリズムを用いたパッキング処理について説明する。
元の目的関数による配置結果が与えられると（ステップＳ１）、ステップＳ２において、配置領域を前記図１のＢに示したように部分配置領域に分割する。この分割の仕方は、元の目的関数による配置結果に応じて適宜選定する。例えば、元の目的関数による配置要素の配置結果が、大きく分けて左右に二分される場合には、前記図１のＢ−１に示したように２つの部分配置領域に分割する。また、例えば、配置結果が格子状に分割される場合には、図１のＢ−２のように部分配置領域を分割する。
ステップＳ３において、後述する局所的パッキング法により各部分配置領域で配置要素のパッキングを行う。
【００２０】
ステップＳ４からステップＳ８は遺伝的アルゴリズムによる最適化処理であり、この処理において、前記したように部分配置領域を合わせた配置領域全体の配置要素の重なりを解消する。まず、ステップＳ４において、遺伝的アルゴリズムの遺伝子の一次元ストリングである染色体から構成される初期集団を生成する。ついで、ステップＳ５、ステップＳ６において前記した交叉、突然変異の操作を行い、さらにステップＳ７において、後述する反復改善法による高速アルゴリズムを実行する。
ステップＳ８において、上記交叉、突然変異の操作により得られた染色体のうち適応度の高いものを選択し、より適応度の高いものを自己複製する。
ステップＳ９において、得られた染色体の適応度が基準以上であるかを調べ、基準以上でなければ、ステップＳ５に戻り上記処理を繰り返す。そして、基準以上の適応度のものが得られた処理を終了する。
【００２１】
次に上記処理における各ステップの処理について具体的に説明する。
（１）配置領域の分割方法
配置要素の相対的な位置関係をなるべく維持するために、パッキングを配置領域全体で行なうのではなく、配置領域をいくつかの部分配置領域に分割し、これらの部分配置領域に含まれている配置要素ごとにパッキングを行なう。このように部分配置領域で行なうパッキングを局所的パッキング法と呼ぶ。ここでは配置領域が長方形の場合、次にような分割法が考えられる。
【００２２】
・図４（ａ）〜（ｃ）に示すように配置領域全体を格子状に分割することで部分配置領域を定義する。
・図５に示すように大きな固定配置要素（例えば既に配置が決まっているＬＳＩ等）を配置領域から取り去った残りの領域を元にして部分配置領域を定義する。
・図６に示すように細長い固定配置要素（例えば電源ライン等）を配置領域から取り去った残りの領域を元にして部分配置領域を定義する。
・図７に示すように階層的に配置領域を分割して部分配置領域を作る。
・図８に示すように、配置領域を適当な多角形に分解し部分配置領域を作る。
・図９に示すように配置要素を置かない部分配置領域を設定してもよい（例えば、配置領域の中央付近は配線が混み合うので、この部分には要素を配置しないようにする場合にこのような配置要素を置かない部分を設定する）。
【００２３】
（２−１）局所的パッキング法
以上のようにして領域が部分配置領域に分割されると、分割された各部分領域に前記したように配置要素をパッキングする。この局所的パッキング法として、以下の方法を用いることができる。また、これらを組み合わせて使用することもできる。
(a) 煉瓦積み方式のパッキング法
この局所的パッキング法は部分配置領域の隅の一つから順に配置要素を詰めていく方法である。例えば、図１０に示すように、左下のすみから右側へ順に詰めていき、最右翼の端まできたら、再び最左翼へ戻り、既に置かれた配置要素の上に詰める。以下同様のことを部分配置領域の配置要素がなくなるまで繰り返す。
局所的パッキング法においては、前記したように配置要素に順序を付け、この順序に従って配置要素を既に局所的パッキング法によって位置が定まった配置要素に重なることがないように位置を定める。
一般に、この順序は配置問題の配置結果を基にして決める。例えば、配置要素の相対的な位置関係からパッキングの順番を決める。この場合は、例えば配置要素の横幅の総和が配置領域の横幅を越えてはならないという条件をつけて配置要素の順序を決める。
【００２４】
(b) テトリス方式のパッキング法
これは煉瓦積み方式を拡張した方法である。配置要素の大きさを考慮にいれ、パッキングした結果、パッキングの境界付近が極端に凸凹しないようにある程度配慮する方法である。
まず規準の高さを決め、これをＨｓとする。すでに決まっている配置要素の順番に従って、図１１に示すように、配置要素の高さの和がＨｓに達するまで詰めていく。次にいま積み上げたすぐ横に（ここでは便宜上右側とする）配置要素を前と同じように規準の高さＨｓに達するまで詰めていく。
これを配置領域の最右側に達するまで続ける。配置領域の最右端に達したら、配置領域の最左端に戻り既にパッキングしてある配置要素の上に重ならないように積み重ねる。これを繰り返すことで配置要素を最後まで詰める。
配置要素の順序は、煉瓦積み方式の場合と同様に、配置要素の相対的な位置関係から順序を決める。この場合も例えば左から右へ詰めていく一つのパッキング過程を考える。この過程で配置要素が配置領域の最右端を飛び越えないという条件で順番を決める。
【００２５】
(c) 凝縮方式のパッキング法
この局所的パッキング法は部分配置領域内の適当な位置を選択し、この位置を中心として、図１２に示すように配置要素をパッキングしていく。この中心の位置を「パッキングの中心」と呼ぶ。
配置要素の順序は、パッキングの中心を原点とする極座標を考える。部分配置領域に属する配置要素の極座標（ｒ、θ）の動径座標ｒの小さい順に、動径座標が同じ場合には、偏角θの小さい順に配置要素に順序をつける。
【００２６】
(d) 拡散方式のパッキング法
この方式は凝縮方式のパッキングとは正反対の局所的パッキング法である。一点のまわりに配置要素を集めるのではなく、部分配置領域の境界付近から配置要素をパッキングしていく。例えば図１３に示すように、部分配置領域内にある配置要素を四つの隅から水平方向に（垂直方向に）パッキングしていく。
配置要素の順序は、部分配置領域内の配置要素のｘ座標をもとにしてｘ座標の小さい順に配置要素に順序をつける。同様にして配置要素のｙ座標をもとにしてｙ座標の小さな配置要素に順序をつける。これら２つの配置要素の順序をＯｘ，Ｏｙで示すことにする。配置要素をパッキングする手順は次の四つの手順を組み合わせる。
Ｄ１：配置要素でＯｘ，Ｏｙの両方で前にある要素を部分配置領域の左下から詰めていく。
Ｄ２：配置要素でＯｘ，Ｏｙの両方で後にある要素を部分配置領域の右上から詰めていく。
Ｄ３：配置要素でＯｘでは後ろ、Ｏｙでは前にある要素を部分配置領域の右下から詰めていく。
Ｄ４：配置要素でＯｘでは前、Ｏｙでは後ろにある要素を部分配置領域の左上から詰めていく。
【００２７】
例えば、上記Ｄ１に従ってＯｘ，Ｏｙの両方の順序で最も前にある配置要素Ｃｉｊを部分配置領域の左下に置く。この配置要素Ｃｉｊを２つの順序Ｏｘ，Ｏｙから取り除く。次に上記Ｄ２に従ってＯｘ，Ｏｙの両方で最も後ろにある配置要素Ｃｉｊを右上に置く。この配置要素Ｃｉｊを２つの順序Ｏｘ，Ｏｙから取り除く。さらにＤ３に従ってＯｘでは後ろにＯｙでは前にある配置要素Ｃｋｌを右上に置く。この配置要素Ｃｋｌを順序Ｏｘ，Ｏｙから取り除く。次にはＤ４に従って配置要素を選択し、選択した配置要素を順序Ｏｘ，Ｏｙから取り除く。これらの手順を配置要素がなくなるまで続ける。もちろん配置要素を置く手順はＤ１，Ｄ２，Ｄ３，Ｄ４の順序である必要はなく、任意の組み合わせで実施できる。
【００２８】
（２−２）配置領域に制限がある場合の局所的パッキング法
配置領域に固定配置要素がある場合など配置領域に制限がある場合には、次のようにしてパッキングを行う。
(a) 大きな配置要素がある場合
大きな配置要素がある場合には、大きな配置要素とそれ以外の配置要素の位置関係を保持するように局所的なパッキング法を実施する必要がある。
特に、元の目的関数により決定された配置結果に基づき大きさを持つ配置要素を配置したとき、配置要素が大きな配置要素と重なる場合には、大きな配置要素との位置関係を考慮してパッキングを実施する必要がある。
具体的には、以下のような方法が考えられる。
・図１４に示すように、大きな配置要素との重なりがなくなる位置までの距離が最小となる位置にパッキングする
・大きな配置要素が配置領域の境界付近にある場合には、重なっている配置要素が配置領域から出ないように配置要素を動かす向きをあらかじめ決めておき、図１５に示すように、配置要素を移動させる。
・図１６に示すように、大きなビルを風が迂回していく空気の移動のアナロジーを使って重なっている配置要素を大きな配置要素の周りに分散して配置する。
【００２９】
(b) 固定した配置要素がある場合
予め位置が定められた固定した配置要素がある場合、この固定要素を考慮せずに配置要素をパッキングすると固定要素と重なってしまう場合が生じる。
これを避けるために、配置要素を固定要素の上または下または右または左に置く。その際には以下のような方針で固定配置要素から移動する。
・図１７に示すように、固定した配置要素との重なりがなくなる位置までの距離が最小となる位置にパッキングする。
・固定した配置要素が配置領域の境界付近にある場合には、重なっている配置要素が配置領域から出ないように配置要素を動かす向きをあらかじめ決めておき、図１８に示すように移動させる。
・固定した配置要素と重なった場合には重ならないように配置要素を移動する向きをあらかじめ決めておき、図１９に示すように移動させる。こうすることで、計算の高速化が計られる。
【００３０】
(c) 非常に細長い固定要素がある場合
図２０に示すように、ある特定の方向（ｘ方向またはｙ方向）に細長い固定要素がある場合を考える。この場合には、この細長い固定要素に重なっている配置要素を移動する方向はこの固定要素の幅（ｘ方向）、高さ（ｙ方向）のうち短いものを選択しその方向へ重ならなくなるまで移動することでパッキングする。これによって配置要素の相対的な位置関係を崩さずにパッキングが可能になる。
【００３１】
（３）遺伝的アルゴリズムによる部分配置領域の境界部分における噛み合わせ
上記したように、部分配置領域ごとに局所的パッキング法を実施すると、ある部分配置領域での配置要素と他の部分配置領域の配置要素の境界部分が噛み合わない状況が一般には起こる。この境界部分における噛み合わせを本実施例においては、以下のような遺伝的アルゴリズムによって実施する。
(a) 染色体のコード法
部分配置領域の境界の噛み合っていない境界にある配置要素は、重なっている配置要素とその近傍にある配置要素として定義される。これらの配置要素に番号を付ける。染色体はこれらの重なっている配置要素とその近傍の配置要素の座標の値を並べたものである。
例えば、図２１に示すように重なっている部分が３か所ある場合には、染色体は、各部分の配置要素の座標を並べたものとなる。
すなわち、図２２（ａ）に示すように、重なっている配置要素およびその近傍の配置要素に番号を付け、各配置要素０〜８の中心座標（Ｘ０，Ｙ０）〜（Ｘ８，Ｙ８）を遺伝子として、同図（ｂ）に示すように染色体を定める。
また、各染色体の遺伝子情報として、配置要素の幅、高さ、を記憶し、さらに重なっている配置要素（同図の場合は配置要素０と配置要素６）については、重なりフラグを１にしておく。なお、重なり部分が一か所しかない場合に、その重なり部分について染色体を作り、重なり部分の配置要素の座標をランダムに動かして、必要数の染色体を作る。
【００３２】
(b) 交叉
上記の染色体に作用する交叉としては以下のような方法が考えられる。
・張り付け交叉法
張り付け交叉法は、親の２つの個体のうち一つの親の染色体の領域を適当な方法で選択し、この領域の遺伝子をもう一方の親の染色体のコピーの対応する領域に張り付けることで子供の染色体を作り出す方法である。
例えば、図２３に示すように、一方の親の染色体の遺伝子の一部を他方の親の染色体の遺伝子に置き換えて子供の染色体を作りだす。
・座標の重み付き平均をもとにした交叉法
座標の重み付き平均をもとにした交叉法は、親の２つの個体の染色体の同じ領域を適当な方法で選択する。この領域にある遺伝子すなわち配置要素の座標の親の２個体の重み付き平均を計算しその結果得られた座標を該当する領域の遺伝子とする染色体をもつ個体を子供とする方法である。
【００３３】
例えば、図２４に示すように、一方の親の染色体の一部の遺伝子〔同図の場合（Ｘ２，Ｙ２）〜（Ｘ４，Ｙ４）〕と、他方の親の一部の遺伝子〔同図の場合（Ｘ２’，Ｙ２’）〜（Ｘ４’，Ｙ４’）〕との重み付き平均を求め〔同図の場合（Ｘ２”，Ｙ２”）〜（Ｘ４”，Ｙ４”）〕、重み付き平均により求めた遺伝子を一方の親の遺伝子と置き換え、子供の染色体を作りだす。例えば、重み付き平均Ｘｉ”は、Ｘｉ”＝（ｍＸｉ＋ｎＸｉ’）／（ｍ＋ｎ）〔ｍ，ｎは重み〕等の式で計算される。
これらの交叉法によって親の遺伝子を保存することによって適応度の増大を高速に行なうことが可能になる。
【００３４】
(c) 突然変異
前期の染色体に作用する突然変異としては以下のような方法が考えられる。
・図２５に示すように、配置要素の座標をランダムに動かす突然変異。
具体的には、染色体中の特定の遺伝子の値をランダムに動かす。
・図２６に示すように、重なっている配置要素の座標をランダムに動かす突然変異。
具体的には染色体中の重なりフラグが１の遺伝子の値をランダムに動かす。
・図２７に示すように、重なっている配置要素とその近傍にある配置要素の座標をランダムに動かす突然変異。
具体的には染色体中の重なりフラグが１の遺伝子の値と、該遺伝子から所定の距離内にある遺伝子の値をランダムに動かす。
以上のように、突然変異は配置要素の座標に微小な正または負の値をランダムに加えることで実行する。
図２６に示すように座標を変更するセルの選択を他のセルと重なっているセルとするとセルの重なりの解消を効率よく進めることができる。また図２７に示すように、重なっているセルだけでなくこれらのセルの近傍にあるセルをも動かすことで解空間の探索を広く行なうことができる。
【００３５】
(c) 適応度
染色体の適応度としては、以下のように定義されたフイットネス関数を使用することができる。
・（フィットネス）＝定数−（重み１）×（重なっている配置要素の総数）−（重み２）×（元の配置問題のコスト）
・（フィットネス）＝定数−（重み１）×（配置要素の重なっている部分の面積の総和）−（重み２）×（元の配置問題のコスト）
このようにフィットネスを定義することによって配置要素の重なりを取り除きパッキングすることができる。
【００３６】
（４）本実施例の遺伝的アルゴリズムと組み合わせる高速化アルゴリズム（反復改善法）
前記図３で説明したように、本実施例においては、遺伝的アルゴリズムの高速化のために高速なアルゴリズムを組み合わせる。
本実施例においては、部分配置領域ごとに局所的なパッキングを施すため、どうしても、部分配置領域の境界付近で配置要素が噛み合わない事態がおこることがある。この境界付近の配置要素の不一致を図２８に示すようなヒューリスティツクな方法を用いて解消する。
▲１▼  図２８に示すように重なっている配置要素を選択する。
▲２▼  重なっている配置要素の近傍にある配置要素を選択する。
▲３▼  選択された配置要素を上下左右斜めに定められた距離の範囲で移動させる。
▲４▼  移動した位置で他の配置要素と重なっていない場合には配置要素をそこに置く。
▲５▼  以上の操作を選択した全ての配置要素について実施する。
【００３７】
すなわち、図２８（ａ）に示すように配置要素を移動して、移動した位置で他の配置要素と重なっていない場合には配置要素をそこに置き、ついで、同図（ｂ）に示すように配置要素を移動して、移動した位置で他の配置要素と重なっていない場合には配置要素をそこに置く処理を反復的に繰り返し、重なりを解消する。
以上のような反復改善法による高速アルゴリズムを前記図３に示したように、遺伝的アルゴリズムのループ内に設けることにより、上記した配置要素が噛み合わない事態が起こるのを解消することができ、高速に最適配置を求めることが可能となる。
【００３８】
２．具体的適用例
(a) セル配置問題への応用
次に本発明の具体的適用例であるセル配置問題への応用について説明する。
ここでは、ＬＳＩの設計の際のセル配置問題を考える。目的関数を総配線長とする。この目的関数を最小にするために非線形計画法を用いてセルの配置を求めることができる。一般には、セルは重なってはならないという制約条件があるが、これを非線形計画法に導入して解を求めるのは原理的には可能であるが、セルは大きさを持つために、セルが重ならないという制約条件が必要となる。
【００３９】
これを実用的な規模の問題で制約条件付きの非線形計画法等を効率良く解くことは一般には難しい。
そこで、制約条件のない場合を解き、この後に本発明を適用して遺伝的アルゴリズムでセルの重なりを解消する。
図２９は上記のようにして求めたセル配置の一例を示す図である。同図（ａ）はセルは重なってはならないという制約条件なしに求めた総配線長を最小化するセル配置である。同図（ａ）に示されるセル配置に本発明を適用し、まず領域を４つに分割し、ついで前記した局所パッキング方法および遺伝的アルゴリズムを適用することにより、同図（ｂ）に示すセル配置が得られる。
以上のように本発明を適用することにより、効率的に目的とする最適解を得ることができる。
【００４０】
(b) ＬＳＩのフロアープランヘの応用
ＬＳＩの配置問題の一種にフロアプランがある。フロアプランとは、配置するセルの面積は定まっているが、セルの各辺の長さが可変である問題をいう。
この問題にも本発明で提案する遺伝的アルゴリズムによるセルの重なりの解消法が使用できる。例えば、図３０（ａ）に示す配置が与えられたとき、本発明の方法を適用することにより、同図（ｂ）のように重なりのない配置を得ることができる。
【００４１】
【発明の効果】
以上説明したように、本発明においては、局所的パッキング法と遺伝的アルゴリズムとを組み合わせたことにより、適応度の増加を加速させることができる。また、遺伝的アルゴリズムに、配置要素の重なりの解消に適した高速アルゴリズム、および、交叉、突然変異を導入することによって解を効率的に発生させ、最適解を効率的に探索することができる。
【図面の簡単な説明】
【図１】本発明の基本原理を説明する原理図である。
【図２】本発明が適用されるシステムの構成例を示す図である。
【図３】本発明の実施例の処理を示すフローチャートである。
【図４】配置領域の部分配置領域への分割法（格子状に分割）を説明する図である。
【図５】配置要素を置くことを禁止されている領域を考慮した配置領域の分割法を説明する図である。
【図６】細長い配置禁止領域を除いて配置領域を分割する方法を説明する図である。
【図７】配置領域を階層的に分割する方法を説明する図である。
【図８】配置領域を多角形の領域へ分割する方法を説明する図である。
【図９】配置要素を置かない部分配置領域を設定しても良い例を説明する図である。
【図１０】煉瓦積み方式のパッキング法を説明する図である。
【図１１】テトリス方式のパッキング法を説明する図である。
【図１２】凝縮方式のパッキング法を説明する図である。
【図１３】拡散方式のパッキング法を説明する図である。
【図１４】大きな配置要素に配置要素が重なっている場合の移動法を説明する図である。
【図１５】大きな配置要素が配置領域の境界付近にある場合の移動法を説明する図である。
【図１６】配置要素を大きな配置要素の周りに分散して配置する方法を説明する図である。
【図１７】固定した配置要素と配置要素が重なっている場合の移動法を説明する図である。
【図１８】固定した配置要素が配置領域の境界付近にある場合の移動法を説明する図である。
【図１９】固定した配置要素がある場合に移動する向きをあらかじめ決めておく場合を説明する図である。
【図２０】特定の方向に非常に長い固定配置要素に配置要素が重なっている場合の移動方法を説明する図である。
【図２１】染色体の生成方法を説明する図である。
【図２２】局所的パッキング法の結果重なってしまった配置要素とその近傍の配置要素の座標から染色体を生成する方法を説明する図である。
【図２３】染色体間の交叉法（張り付け交叉）を説明する図である。
【図２４】染色体間の交叉法（重み付き平均による交叉）を説明する図である。
【図２５】配置要素の座標をランダムに動かすことによる突然変異を説明する図である。
【図２６】重なっているセルの座標をランダムに動かすことによる突然変異を説明する図である。
【図２７】重なっているセルとその近傍にあるセルの座標をランダムに動かすことによる突然変異を説明する図である。
【図２８】遺伝的アルゴリズムと組み合わされるヒューリスティツクな方法を説明する図である。
【図２９】本発明のＬＳＩのセル配置問題への応用例を説明する図である。
【図３０】本発明のフロアープランへの応用例を説明する図である。
【図３１】遺伝的アルゴリズムにおける一世代を説明するための図である。
【図３２】遺伝的アルゴリズムにおける選択を説明する図である。
【図３３】遺伝的アルゴリズムにおける交叉を説明する図である。
【図３４】遺伝的アルゴリズムにおける突然変異を説明する図である。
【符号の説明】
１０  バス
１１  ＣＰＵ
１２  メモリ
１３  外部記憶装置
１４  通信インタフェース
１５  媒体読取装置
１６  入力装置
１７  出力装置
【図１】
0004020532.tif 000002
【図２】
0004020532.tif 000003
【図３】
0004020532.tif 000004
【図４】
0004020532.tif 000005
【図５】
0004020532.tif 000006
【図６】
0004020532.tif 000007
【図７】
0004020532.tif 000008
【図８】
0004020532.tif 000009
【図９】
0004020532.tif 000010
【図１０】
0004020532.tif 000011
【図１１】
0004020532.tif 000012
【図１２】
0004020532.tif 000013
【図１３】
0004020532.tif 000014
【図１４】
0004020532.tif 000015
【図１５】
0004020532.tif 000016
【図１６】
0004020532.tif 000017
【図１７】
0004020532.tif 000018
【図１８】
0004020532.tif 000019
【図１９】
0004020532.tif 000020
【図２０】
0004020532.tif 000021
【図２１】
0004020532.tif 000022
【図２２】
0004020532.tif 000023
【図２３】
0004020532.tif 000024
【図２４】
0004020532.tif 000025
【図２５】
0004020532.tif 000026
【図２６】
0004020532.tif 000027
【図２７】
0004020532.tif 000028
【図２８】
0004020532.tif 000029
【図２９】
0004020532.tif 000030
【図３０】
0004020532.tif 000031
【図３１】
0004020532.tif 000032
【図３２】
0004020532.tif 000033
【図３３】
0004020532.tif 000034
【図３４】
0004020532.tif 000035