(57)【特許請求の範囲】
【請求項１】
制約条件を入力する入力手段と、入力された制約条件に基づいて制約グラフを生成する生成手段と、入力された制約グラフ中の閉路を分割することなく複数のサブグラフに分解する分解手段と、前記各サブグラフごとにバックエッジを検出するバックエッジ検出手段と、前記各サブグラフごとに前記バックエッジに係るＰＣを検出するＰＣ検出手段と、前記ＰＣの検出結果を出力する出力手段とを有するコンピュータを使用して、複数の制約に存在する過度の制約を前記制約グラフ中のＰＣとして検出する制約条件評価方法において、
前記入力手段により制約条件を入力する処理と、
前記制約グラフ生成手段により、前記入力手段によって入力された制約条件に基づいて、重みを表す値と方向を有する複数のエッジでそれぞれ位置情報を有する始点と終点を含む複数の点の間を接続し、前記始点から終点に至るまでの経路の長さを前記制約グラフにおける経路長とすると共に、複数の点を結ぶエッジの向きに逆らうことなく循環できる経路を閉路として表現し、前記複数の点をその位置を基準として一定の方向にソートし、このソート順に従って得られた各点の位置を結ぶエッジの中で、その始点が終点よりも前記ソート順で後にあるエッジをバックエッジとした制約グラフを生成する処理と、
前記分解手段により、前記制約グラフ生成手段により生成された制約グラフを、当該制約グラフ中の閉路を保持したまま複数のサブグラフに分解する分解処理と、
前記バックエッジ検出手段により、各サブグラフ中のバックエッジを検出するバックエッジ検出処理と、
前記ＰＣ検出手段により、各サブグラフ中の前記バックエッジに係るＰＣを検出するＰＣ検出処理とを有し、
前記ＰＣ検出処理は、
検出されたバックエッジを前記サブグラフから除去する処理と、
前記サブグラフ中のソースを基準点として、除去されたバックエッジの第１の点及び第２の点により最長路及びこの最長路の最長路長を含む所定の経路情報の算出が可能であるか否かを試みる経路情報算出処理と、
前記経路情報算出処理により最長路長が算出できた場合に、前記サブグラフにおけるＰＣの存在を判定する判定処理と、を含み、
前記経路情報算出処理は、
ソース以外の点の位置を示す値を少なくとも前記基準点の位置を示す値以下の値にセットする処理と、
所定のソート順に従って各点の位置を基準点として順次選択する処理と、各非基準点の位置を示す値に当該非基準点から当該基準点へのエッジの重みを加算した加算値を求める処理と、
加算値が当該基準点の位置を示す値を超えた場合に当該基準点の位置を示す値を当該加算値によって置き換えて当該基準点の位置を移動させる処理と、を含む、ことを特徴とする制約条件評価方法。
【請求項２】
前記経路情報算出処理により前記最長路が算出できなかった場合に、前記ＰＣ検出手段により、前記バックエッジ検出処理および当該ＰＣ検出処理を繰り返すことを特徴とする請求項１記載の制約条件評価方法。
【請求項３】
前記経路情報算出処理により前記最長路が算出できなかった場合に、前記分解手段により、前記サブグラフに対して前記分解処理を行なうことを特徴とする請求項１または２記載の制約条件評価方法。
【請求項４】
前記ＰＣ検出処理は、一の経路を最長路として、該最長路の最長路長の算出が可能であるか否かを試みる経路情報算出処理を含み、前記判定処理は、前記最長路長が前記除去されたバックエッジに与えられた重み以下である場合に、前記サブグラフ内にＰＣが存在しないと判定し、前記最長路長が前記除去されたバックエッジの重みを超える場合に、該最長路長と前記除去されたバックエッジとに基づくＰＣが存在すると判定する処理を含むことを特徴とする請求項１記載の制約条件評価方法。
【請求項５】
前記ＰＣ検出処理は、前記ＰＣ検出処理によって検出されたバックエッジが所定の数の場合に、前記サブグラフから当該バックエッジを除去し、前記除去されたバックエッジの始点および終点に基づいて、一の経路および該経路の経路長を含む所定の経路情報を所定の方法で算出し、前記経路長と前記バックエッジに与えられた重みとに基いて、前記経路と前記除去されたバックエッジとに基くＰＣを検出することを特徴とする請求項１記載の制約条件評価方法。
【請求項６】
前記所定の分解方法は、前記制約グラフを強連結成分ごとに分解することを特徴とする請求項１、２、４または５記載の制約条件評価方法。
【請求項７】
前記バックエッジ検出処理は、複数の点を有する前記サブグラフ中の一のサブグラフを検出対象とすることを特徴とする請求項１、２、４または５記載の制約条件評価方法。
【請求項８】
前記バックエッジ検出処理は、位置が最大となる点を始点とするサブグラフのエッジのうち、終点の位置が最小のエッジをバックエッジとして選択することを特徴とする請求項１記載の制約条件評価方法。
【請求項９】
前記ＰＣ検出手段により、前記ＰＣ検出処理に含まれる各処理を繰り返し、前記繰り返しにおいてサブグラフ中の点の数と同回数を超えた繰り返しにおいて点が移動しない場合には、シンクの位置とソースの位置の差を最長路長とし、かつ、ソースからシンクまでの経路のうち、エッジの重みが当該エッジの始点と終点間の位置の距離と一致しているエッジだけで構成される経路を最長路とし、前記繰り返しにおいてサブグラフ中の点の数と同回数を超えた繰り返しにおいて点が移動する場合には、最長路長が求まらないと判定することを特徴とする請求項１記載の制約条件評価方法。
【請求項１０】
前記基準点の値以下の値として、前記ソースの位置からバックエッジの重みの最小のものの値だけ小さい値を用いることを特徴とする請求項１記載の制約条件評価方法。
【請求項１１】
制約条件を入力する入力手段と、入力された制約条件に基づいて制約グラフを生成する生成手段と、入力された制約グラフ中の閉路を分割することなく複数のサブグラフに分解する分解手段と、前記各サブグラフごとにバックエッジを検出するバックエッジ検出手段と、前記各サブグラフごとに前記バックエッジに係るＰＣを検出するＰＣ検出手段と、前記ＰＣの検出結果を出力する出力手段とを有するコンピュータを使用して、複数の制約に存在する過度の制約を前記制約グラフ中のＰＣとして検出する制約条件評価方法において、
前記入力手段により制約条件を入力する処理と、
前記制約グラフ生成手段により、前記入力手段によって入力された制約条件に基づいて、重みを表す値と方向を有する複数のエッジでそれぞれ位置情報を有する始点と終点を含む複数の点の間を接続し、前記始点から終点に至るまでの経路の長さを前記制約グラフにおける経路長とすると共に、複数の点を結ぶエッジの向きに逆らうことなく循環できる経路を閉路として表現し、前記複数の点をその位置を基準として一定の方向にソートし、このソート順に従って得られた各点の位置を結ぶエッジの中で、その始点が終点よりも前記ソート順で後にあるエッジをバックエッジとした制約グラフを生成する処理と、
前記分解手段により、前記制約グラフ生成手段により生成された制約グラフを、当該制約グラフ中の閉路を保持したまま複数のサブグラフに分解する分解処理と、
前記バックエッジ検出手段により、各サブグラフ中のバックエッジを検出するバックエッジ検出処理と、
前記ＰＣ検出手段により、各サブグラフ中の前記バックエッジに係るＰＣを検出するＰＣ検出処理とを有し、
前記ＰＣ検出処理は、
検出されたバックエッジを前記サブグラフから除去する処理と、
除去されたバックエッジの第１の点及び第２の点により最長路及びこの最長路の最長路長を含む所定の経路情報の算出が可能であるか否かを試みる経路情報算出処理と、
前記経路情報算出処理により最長路長が算出できた場合に、前記サブグラフにおけるＰＣの存在を判定する判定処理と、
制約グラフからバックエッジを除去したフォワードグラフを得る抽出処理と、
得られたフォワードグラフの各点をソートするソート処理と、
フォワードグラフ中のソースを基準点として、当該ソース以外の点の位置を示す値を少なくとも前記基準点の値以下の値にセットする初期化処理と、
ソートされたフォワードグラフについて、エッジによって接続された各２点の位置を、当該２点間に少なくとも当該エッジの重み分の位置間隔を確保するように調整する第１の調整処理と、
除去された各バックエッジについて、当該バックエッジの始点の位置を示す値に当該バックエッジの重みを加算した加算値を求め、バックエッジの終点位置を示す値がこの加算値より小さい場合には当該終点位置を示す値を当該加算値によって置き換える第２の調整処理と、を含み、
前記第１の調整処理は、
前記ソート処理によって各点の位置を基準点として順次選択する処理と、
各非基準点の位置を示す値に当該非基準点から当該基準点へのエッジの重みを加算した加算値を求める処理と、
加算値が当該基準点の位置を示す値を超えた場合に当該基準点の位置を示す値を当該加算値によって置き換えて当該基準点の位置を移動させる処理と、を含み、
前記第１及び第２の調整処理をバックエッジの数と等しい回数だけ繰り返し、第１及び第２の調整処理が収束しない場合には最長路算出失敗を返すことによって処理を終了し、第１及び第２の調整処理が収束した場合には最長路長及び最長路を返す、ことを特徴とする制約条件評価方法。
【請求項１２】
重みを表す値と方向を有する複数のエッジでそれぞれ位置情報を有する始点と終点を含む複数の点の間を接続し、前記始点から終点に至るまでの経路の長さを制約グラフにおける経路長とすると共に、複数の点を結ぶエッジの向きに逆らうことなく循環できる経路を閉路として表現し、前記複数の点をその位置を基準として一定の方向にソートし、このソート順に従って得られた各点の位置を結ぶエッジの中で、その始点が終点よりも前記ソート順で後にあるエッジをバックエッジとした制約グラフを、当該制約グラフ中の閉路を保持したまま複数のサブグラフに分解する分解手段と、
前記各サブグラフ中のバックエッジを検出するバックエッジ検出手段と、
前記各サブグラフ中の前記バックエッジに係るＰＣを検出するＰＣ検出手段とを有し、
前記ＰＣ検出手段は、
検出されたバックエッジを前記サブグラフから除去する手段と、
前記サブグラフ中のソースを基準点として、除去されたバックエッジの第１の点及び第２の点により最長路及びこの最長路の最長路長を含む所定の経路情報の算出が可能であるか否かを試みる経路情報算出手段と、
前記経路情報算出手段により最長路長が算出できた場合に、前記サブグラフにおけるＰＣの存在を判定する判定手段と、を含み、
前記経路情報算出手段は、
前記ソース以外の点の位置を示す値を少なくとも前記基準点の位置を示す値以下の値にセットする手段と、
所定のソート順にしたがって各点の位置を基準点として順次選択する手段と、
各非基準点の位置を示す値に当該非基準点から当該基準点へのエッジの重みを加算した加算値を求める手段と、
加算値が当該基準点の位置を示す値を超えた場合に当該基準点の位置を示す値を当該加算値によって置き換えて当該基準点の位置を移動させる手段と、を含む、ことを特徴とする制約条件評価装置。
【請求項１３】
前記経路情報算出手段により前記最長路が算出できなかった場合に、前記バックエッジ検出手段および当該ＰＣ検出手段を繰り返し適用するように構成されたことを特徴とする請求項１２記載の制約条件評価装置。
【請求項１４】
前記経路情報算出手段により前記最長路が算出できなかった場合に、前記サブグラフに対して前記分解手段を適用するように構成されたことを特徴とする請求項１２または１３記載の制約条件評価装置。
【請求項１５】
前記ＰＣ検出手段は、一の経路を最長路として、該最長路の最長路長の算出が可能であるか否かを試みる経路情報算出手段を含み、前記判定手段は、前記最長路長が前記除去されたバックエッジに与えられた重み以下である場合に、前記サブグラフ内にＰＣが存在しないと判定し、前記最長路長が前記除去されたバックエッジの重みを超える場合に、該最長路長と前記除去されたバックエッジとに基づくＰＣが存在すると判定する手段を有することを特徴とする請求項１２記載の制約条件評価装置。
【請求項１６】
前記ＰＣ検出手段は、前記ＰＣ検出手段によって検出されたバックエッジが所定の数の場合に、前記サブグラフから当該バックエッジを除去し、前記除去されたバックエッジの始点および終点に基づいて、一の経路および該経路の経路長を含む所定の経路情報を所定の方法で算出し、前記経路長と前記バックエッジに与えられた重みとに基いて、前記経路と前記除去されたバックエッジとに基くＰＣを検出するように構成されたことを特徴とする請求項１２記載の制約条件評価装置。
【請求項１７】
前記所定の分解方法は、前記制約グラフを強連結成分ごとに分解することを特徴とする請求項１２、１３、１５または１６記載の制約条件評価装置。
【請求項１８】
前記バックエッジ検出手段は、複数の点を有する前記サブグラフ中の一のサブグラフを検出対象とするように構成されたことを特徴とする請求項１２、１３、１５または１６記載の制約条件評価装置。
【請求項１９】
前記バックエッジ検出手段は、位置が最大となる点を始点とするサブグラフのエッジのうち、終点の位置が最小のエッジをバックエッジとして選択するように構成されたことを特徴とする請求項１２記載の制約条件評価装置。
【請求項２０】
前記ＰＣ検出手段に含まれる各手段を繰り返し適用し、前記繰り返しにおいてサブグラフ中の点の数と同回数を超えた繰り返しにおいて点が移動しないとき、シンクの位置とソースの位置の差を最長路長とし、かつ、ソースからシンクまでの経路のうち、エッジの重みが当該エッジの始点と終点間の位置の距離と一致しているエッジだけで構成される経路を最長路とし、前記繰り返しにおいてサブグラフ中の点の数と同回数を超えた繰り返しにおいて点が移動するときは、最長路長が求まらないと判定するように構成されたことを特徴とする請求項１２記載の制約条件評価装置。
【請求項２１】
前記基準点の位置以下の値として、前記ソースの位置からバックエッジの重みの最小のものの値だけ小さい値を用いるように構成されたことを特徴とする請求項１２記載の制約条件評価装置。
【請求項２２】
重みを表す値と方向を有する複数のエッジでそれぞれ位置情報を有する始点と終点を含む複数の点の間を接続し、前記始点から終点に至るまでの経路の長さを制約グラフにおける経路長とすると共に、複数の点を結ぶエッジの向きに逆らうことなく循環できる経路を閉路として表現し、前記複数の点をその位置を基準として一定の方向にソートし、このソート順に従って得られた各点の位置を結ぶエッジの中で、その始点が終点よりも前記ソート順で後にあるエッジをバックエッジとした制約グラフを、当該制約グラフ中の閉路を保持したまま複数のサブグラフに分解する分解手段と、
前記各サブグラフ中のバックエッジを検出するバックエッジ検出手段と、
前記各サブグラフ中の前記バックエッジに係るＰＣを検出するＰＣ検出手段とを有し、
前記ＰＣ検出手段は、
検出されたバックエッジを前記サブグラフから除去する手段と、
除去されたバックエッジの第１の点及び第２の点により最長路及びこの最長路の最長路長を含む所定の経路情報の算出が可能であるか否かを試みる経路情報算出手段と、
前記経路情報算出手段により最長路長が算出できた場合に、前記サブグラフにおけるＰＣの存在を判定する判定手段と、
制約グラフからバックエッジを除去したフォワードグラフを得る抽出手段と、
得られたフォワードグラフの各点をソートするソート手段と、
フォワードグラフ中のソースを基準点として、当該ソース以外の点を少なくとも前記基準点の値以下の値にセットする初期化手段と、
ソートされたフォワードグラフについて、エッジによって接続された各２点の位置を、当該２点間に少なくとも当該エッジの重み分の位置間隔を確保するように調整する第１の調整手段と、
除去された各バックエッジについて、当該バックエッジの始点の位置を示す値に当該バックエッジの重みを加算した加算値を求め、バックエッジの終点位置を示す値がこの加算値より小さい場合には当該終点位置を示す値を当該加算値によって置き換える第２の調整手段と、を含み、
前記第１の調整手段は、
前記ソート手段によって各点の位置を基準点として順次選択する手段と、
各非基準点の位置を示す値に当該非基準点から当該基準点へのエッジの重みを加算した加算値を求める手段と、
加算値が当該基準点の位置を示す値を超えた場合に当該基準点の位置を当該加算値によって置き換えて当該基準点の位置を移動させる手段と、を含み、
前記第１及び第２の調整手段は、これらの手段による一連の処理を、バックエッジの数と等しい回数だけ繰り返し、処理が収束しない場合には最長路算出失敗を返すことによって処理を終了し、処理が収束した場合には最長路長及び最長路を返すように構成されたことを特徴とする制約条件評価装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＩＣなどの要素の配置における制約条件中の矛盾の有無を評価する制約条件評価方法及び制約条件評価装置の改良に関するものである。
【０００２】
【従来の技術】
ＩＣレイアウト中の要素の配置などを与えられた制約条件にしたがって修正する場合、制約条件を制約グラフと呼ばれる有向グラフで表し、このグラフに基づいて制約条件中の矛盾の有無を評価する方法が知られている。図１４は、制約グラフの一例を示す図である。すなわち、制約グラフは、通常複数の点ｖの間を枝（エッジ）で結んだもので、出発点たるソースと終着点たるシンクによって一体化された連結グラフである。この図では、点を円で、エッジを矢印で示している。
【０００３】
制約グラフでは、ソースから任意の点に到達する経路が存在し、各点は、一般に、配置しようとする要素の所定の基準点を表し、その点の位置Ｘ（ｖ）は要素を配置した際の要素の基準点の位置を表す。点の間のエッジには重みと呼ばれる数値が設定されている。各エッジの重みは、エッジの両端の点の要素を配置する際に要素の基準点間に必要な間隔ないし余地を表す。
【０００４】
例えば、図１５は、図１４の制約グラフに対応する要素の配置の実例を示す図である。この図は、要素Ａ，Ｂ，Ｃを配置する状態を示すもので、ここでは、Ｘ方向の配置を例にとる。この場合の制約条件は各要素間には２以上の余裕を要することである。
【０００５】
このとき、各要素Ａ，Ｂ，Ｃの配置は、それぞれ左端の点ｖａ  ，ｖｂ  ，ｖｃ  を基準に位置Ｘ（ｖａ  ），Ｘ（ｖｂ  ），Ｘ（ｖｃ  ）によって表すことができる。図１４はこの場合の制約条件に対応している。具体的には、点ｖａ  と点ｖｂ  の間の重み１３は、要素Ａの左端と要素Ｂの左端の間には、要素Ａの一部の幅１１に加え余裕２の計１３の幅が必要であることを表している。また、点ｖｂ  と点ｖｃ  の間の重み１２は、要素Ｂの左端と要素Ｃの左端の間には、要素Ｂの幅１０に加え余裕２の計１２の幅が必要であることを表している。
【０００６】
また、制約グラフには一般にバックエッジが含まれる。このバックエッジは、点を何らかの基準に従ってソートし、始点が終点よりソート順で後にある枝（エッジ）である。バックエッジには典型的には、負の重みが設定される。図１４のバックエッジは点ｖc から点ｖa に向かっており、このバックエッジの重み−２２は、要素Ａの左端は要素Ｃの左端との関係において、最大左に２２しか離れられないことを意味している。その理由は、要素Ａの左端から、要素Ｃを配置すべき要素Ａの凹み部分の右端までの余地が１１＋２１の計３２であるところに、要素Ｃは自らの幅８に加えて右側の余地２の計１０を要求し、この結果、２２の余地しか残らないからである。
【０００７】
すなわち、一般に、点ｖμから点ｖνに向かうエッジｅμνが存在し、エッジｅμνに割り当てられた重みをＷ（ｅμν）とするとき、点ｖνの位置Ｘ（ｖν）は、点ｖμの位置Ｘ（ｖμ）より重みＷ（ｅμν）分以上右の位置よりも右側に配置しなければならない。この関係は、
【数１】
Ｘ（ｖν）≧Ｘ（ｖμ）＋Ｗ（ｅμν）
と表すことができる。
【０００８】
制約グラフには一般に閉路が含まれている。閉路は、エッジの向きに逆らうことなく循環できる経路であり、閉路のエッジのうち少なくとも一つはバックエッジである。バックエッジの重みは各要素を配置すべき余地を表し、バックエッジの終点から始点に向かう経路上の各エッジの重みの和がバックエッジの重みに収まれば、各要素がバックエッジによって表される余地に配置できることを意味する。終点から始点に向かう経路上の各エッジの重みの和がバックエッジの重みに収まるとは、閉路中の重みをすべて加算した数値が負になることを意味し、もちろん、各重みに正負逆の符号を用いる場合は数値が正になることを意味する。
【０００９】
正のエッジの重みの和がバックエッジの重みに収まるか否かは、閉路中の重みを単純に加算することによって判定することができる。すなわち、エッジの重みの加算結果が正になる閉路はＰＣ（Ｐｏｓｉｔｉｖｅ  Ｃｙｃｌｅ）と呼ばれ、ＰＣが示す制約条件を満たす解は存在しないことが知られている（参考文献１：Ｙ．  Ｅ．  Ｃｈｏ：  Ａ  Ｓｕｂｊｅｃｔｉｖｅ  Ｒｅｖｉｅｗ  ｏｆ  Ｃｏｍｐａｃｔｉｏｎ，  Ｐｒｏｃ．  ２２ｎｄ  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ，  １９８５，  ｐｐ  ３９６−４０４．／参考文献２：Ｋ．  Ｉｓｈｉｍａ，  Ｓ．  Ｔｓｕｋｉｙａｍａ：  Ｏｎ  ａｎ  Ａｌｇｏｒｉｔｈｍ  ｔｏ  Ｄｅｔｅｃｔ  Ｐｏｓｉｔｉｖｅ  Ｃｙｃｌｅ  ｉｎ  ａ  Ｃｏｎｓｔｒａｉｎｔ  Ｇｒａｐｈ  ｆｏｒ  Ｌａｙｏｕｔ  Ｃｏｍｐａｃｔｉｏｎ，  ＩＥＩＣＥ  Ｔｒａｎｓ．  Ｖｏｌ．  Ｅ  ７４，  Ｎｏ．  １１  Ｎｏｖｅｍｂｅｒ  １９９１，  ｐｐ  ３６１３−３６１６  ）。
【００１０】
例えば、図１５において、要素Ｂ，Ｃの幅の合計１０＋８＝１８と要素間の余裕の合計２×３＝６との和である２４と比べ、実際の凹みの幅は２１しかないため幅は３不足しており、制約条件を満たすように要素を配置することは不可能である。この事実は、実際の配置を試みることなく、制約グラフ中の閉路の重みの加算によって確認することができる。すなわち、図１４において、制約グラフ中のエッジの重みの和は、
【数２】
１３＋１２−２２＝３＞０
であるから、この閉路はＰＣであり、余地が３不足するために制約条件を満たす解が存在しないことが判定できる。
【００１１】
このような制約グラフのＰＣは、ＩＣなどのレイアウトの決定作業に先だってあらかじめ制約グラフから除去しておく必要があり、制約グラフの矛盾の評価とは、実質的には、このようなＰＣを検出除去することを意味する。そして、制約グラフに基づくＰＣの検出は、配置する要素の数や制約の種類が増大したり、それら相互間の関係が複雑化している場合に特に実益が大きい。
【００１２】
ここで、制約グラフからＰＣを検出する従来の手法の一例を示す。この手法では、まず、点を何らかの基準にしたがってソートする。ここで、始点が終点よりソート順で後にある枝がバックエッジであるから、閉路が存在するときは閉路中の少なくとも１つの枝はバックエッジである。特に、点ｖをその位置Ｘ（ｖ）の小さいものから順に並べてソートする場合、制約グラフでは、バックエッジの数ｂがグラフ全体の枝の総数に比べて少なくなる。そこで、バックエッジを含む経路のみを調べることで、制約グラフ中の閉路を効率良く検索できる。
【００１３】
従来技術では、この事実を利用してＰＣの検出所要時間を短縮していた（前記参考文献２／参考文献３：Ｊ．  Ｄｏ，  Ｗ．  Ｄａｗｓｏｎ：  ＳＰＡＣＥＲ  ＩＩ：  Ａ  Ｗｅｌｌ  Ｂｅｈａｖｅｄ  ＩＣ  Ｌａｙｏｕｔ  Ｃｏｍｐａｃｔｏｒ，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＶＬＳＩ  ８５  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ，  １９８５．）。
【００１４】
具体的には、まず、制約グラフＧから全てのバックエッジｆｉ  （ｉ＝１，…，ｂ）を除去して、除去済みグラフＧ０  とする。すなわち、
【数３】
Ｇ０  ＝Ｇ−｛ｆ１  ，ｆ２  ，…，ｆｂ  ｝
とする。ただし、Ｇ０  が非連結な場合は例外的に連結になるように最低限のバックエッジを追加してＧ０  とし、バックエッジの集合から追加したバックエッジは除くことにする。なお、バックエッジの集合が空集合（ｂ＝０）になるときは、制約グラフ内にＰＣが存在しないので直ちに処理を終わることができる。
【００１５】
そして、除去済グラフＧ０  から始めて、各バックエッジｆｉ  についてｉ＝１，…，ｂの順で以下の処理を繰り返す。すなわち、まず、グラフＧｉ−１  にバックエッジｆｉ  を付加してＧｉ−１  ＋ｆｉ  とし、このグラフＧｉ−１  ＋ｆｉ  からＰＣを検出する。ＰＣが検出された場合はそのＰＣを所定のメモリ領域に記録し、グラフＧｉ−１  ＋ｆｉ  からバックエッジｆｉ  を再度除去したグラフＧｉ−１  を次のグラフＧｉとし次のバックエッジの処理を行う。バックエッジｆｉ  についてＰＣが検出されなかった場合はグラフＧｉ−１  ＋ｆｉ  はバックエッジｆｉ  は付加したまま次のグラフＧｉ  とし、次のバックエッジの処理を行う。
【００１６】
この手順を繰り返す場合、始めのグラフＧ０  はバックエッジを含まないのでＰＣを含まない。また、ＰＣが検出されたグラフＧｉ−１  ＋ｆｉ  からは当該ＰＣに含まれていたバックエッジｆｉ  が再度除去されるのであるから、次のバックエッジｆｉ＋１  の処理に移る際の前記次のグラフＧｉ  にもＰＣは含まれない。この手順を繰り返す結果、検出されたすべてのＰＣは前記所定のメモリ領域に記録され、一方、Ｇｂ  は制約グラフＧから、他のエッジと共にＰＣを形成する、すべてのバックエッジを除去したものとなる。
【００１７】
なお、各バックエッジｆｉ  （ｉ＝１，…，ｂ）に係る繰り返しの間に一度もＰＣが発見されなかった場合は、除去済グラフＧ０  にすべてのバックエッジｆｉ  が再度付加されることになり、Ｇｂ  ＝Ｇ０  となる。
【００１８】
ここで、図１６は、従来の手法によるＰＣの検出手順の例を具体的に示したフローチャートである。なお、各時点でのグラフＧｉ  において、グラフＧｉ  中の２点ｖμ，ｖνの間の最長路の長さすなわち最長路長をＬｉ  （ｖμ，ｖν）のように表す。特に、ソースから点ｖμまでの最長路長をＬｉ  （ｖμ）のように表す。
【００１９】
すなわち、図１６の処理では、まず、除去済みグラフＧ０  におけるソースから各点ｖλまでの最長路長Ｌ０  （ｖλ）を求める（ステップ１５１）。次に、ｉを１からｂまでインクリメントしながらすべてのバックエッジｆｉ  （ｉ＝１，…，ｂ）を順次選択し（ステップ１５２，１５３）、各バックエッジｆｉ  について以下の処理を繰り返す。なお、バックエッジｆｉ  の始点をｖμ、終点をｖνとする。
【００２０】
まず、ソースからバックエッジｆｉ  の終点ｖνまでの最長路長Ｌｉ−１  （ｖν）と、ソースからバックエッジｆｉ  の始点ｖμまでの最長路長Ｌｉ−１  （ｖμ）との差が、バックエッジｆｉ  の重みＷ（ｆｉ  ）に収まっていれば、当該最長路とバックエッジｆｉ  によって形成される閉路はＰＣでないと判断する（ステップ１５４）。すなわち、
【数４】
Ｌｉ−１  （ｖν）≧Ｌｉ−１  （ｖμ）＋Ｗ（ｆｉ  ）
が成立すれば当該最長路とバックエッジｆｉ  によって形成される閉路はＰＣでない。
【００２１】
ここで、本来は、バックエッジｆｉ  の始点ｖμと終点ｖν間の最長路長Ｌｉ−１（ｖν，ｖμ）とバックエッジｆｉ  の重みＷ（ｆｉ  ）との関係で、当該最長路とバックエッジｆｉ  によって形成される閉路がＰＣであるか否かを判断することが理論的には単純である。これは、すなわち、
【数５】
０≧Ｌｉ−１  （ｖν，ｖμ）＋Ｗ（ｆｉ  ）
の成立によってＰＣの判断を行うものである。
【００２２】
しかし、ソースから始点ｖμまでの最長路長Ｌｉ−１  （ｖμ）は、ソースから終点ｖνまでの最長路長Ｌｉ−１  （ｖν）に、終点ｖνから始点ｖμまでの最長路長Ｌｉ−１  （ｖν，ｖμ）に加えたものと等しいか大きく、
【数６】
Ｌｉ−１  （ｖμ）≧Ｌｉ−１  （ｖν）＋Ｌｉ−１  （ｖν，ｖμ）
が成立し、この式を移項すれば、
【数７】
Ｌｉ−１  （ｖμ）−Ｌｉ−１  （ｖν）≧Ｌｉ−１  （ｖν，ｖμ）
といえる。
【００２３】
一方、数式４を移項すれば、
【数８】
０≧Ｌｉ−１  （ｖμ）−Ｌｉ−１  （ｖν）＋Ｗ（ｆｉ  ）
であり、このうちＬｉ−１  （ｖμ）−Ｌｉ−１  （ｖν）の部分は数式７の左辺で置き換えることができる。この結果数式５が得られるので、数式４によってＰＣの判断を行うことは差支えない。このように、ソースからバックエッジｆｉ  の終点ｖνまでの最長路長Ｌｉ−１  （ｖν）と、ソースからバックエッジｆｉ  の始点ｖμまでの最長路長Ｌｉ−１  （ｖμ）との差に基づいて処理を行えば、バックエッジｆｉの始点ｖμと終点ｖν間の最長路長Ｌｉ−１  （ｖν，ｖμ）を求める必要がないので、処理が高速化される。
【００２４】
ステップ１５４において、当該最長路とバックエッジｆｉ  によって形成される閉路がＰＣでない場合、グラフにバックエッジｆｉ  を付加して、
【数９】
Ｇｉ  ＝Ｇｉ−１  ＋ｆｉ
とする（ステップ１５５）。また、この付加によってどの点ｖλについてもソースからの最長路長Ｌｉ−１  （ｖλ）は変化しないので、次のバックエッジｆｉ  の処理についても各最長路長Ｌｉ−１  （ｖλ）を用いることとし、
【数１０】
Ｌｉ  （ｖλ）＝Ｌｉ−１  （ｖλ）
として次のバックエッジの選択を行う（ステップ１５２）。
【００２５】
一方、ステップ１５４において、
【数１１】
Ｌｉ−１  （ｖν）＜Ｌｉ−１  （ｖμ）＋Ｗ（ｆｉ  ）
の場合は、まず、終点ｖνがソースから始点ｖμまでの最長路上にあるか否かを判断する（ステップ１５６）。ここで、終点ｖνがソースから始点ｖμまでの最長路上にあるとき、バックエッジｆｉ  と、ソースから始点ｖμまでの最長路上の終点ｖνから始点ｖμまでの経路との和である閉路がＰＣなので、これらをＰＣとして記録する（ステップ１５７）。この場合、グラフ及び各点の位置をそのままとして、すなわち、
【数１２】
Ｇｉ  ＝Ｇｉ−１Ｌｉ  （ｖλ）＝Ｌｉ−１  （ｖλ）
とし、次のバックエッジの選択に進む（ステップ１５２）。
【００２６】
ステップ１５６において、終点ｖνがソースから始点ｖμまでの最長路上にないときは、ステップ１５８以降の手順に進む。すなわち、まず、グラフ中の終点ｖνからの経路が存在するすべての点ｖλについて、当該バックエッジの終点ｖνからの最長路長Ｌｉ−１  （ｖν，ｖλ）を求める（ステップ１５８）。そして、この終点ｖνから始点ｖμまでの経路が存在し、Ｌｉ−１  （ｖν，ｖμ）がバックエッジの重みＷ（ｆｉ  ）に収まらなければ、すなわち、
【数１３】
Ｌｉ−１  （ｖν，ｖμ）＋Ｗ（ｆｉ  ）＞０
ならば（ステップ１５９）終点ｖνから始点ｖμまでの最長路とバックエッジｆｉ  の和をＰＣとして記録する（ステップ１５７）。そして、グラフ及び各点の位置をそのままとして、すなわち、
【数１４】
Ｇｉ  ＝Ｇｉ−１Ｌｉ  （ｖλ）＝Ｌｉ−１  （ｖλ）
として、次の（ｉ＝ｉ＋１）バックエッジを選択する（ステップ１５２）。
【００２７】
一方、ステップ１５９において、最長路長Ｌｉ−１  （ｖν，ｖλ）がバックエッジの重みＷ（ｆｉ  ）に収まっていれば、すなわち、
【数１５】
Ｌｉ−１  （ｖν，ｖμ）＋Ｗ（ｆｉ  ）≦０
ならば、バックエッジｆｉ  がＰＣの一要素にはなっていない。終点ｖνから始点ｖμまでの経路が存在しないときもバックエッジｆｉ  がＰＣの一要素にはなっていない。この場合は、グラフにバックエッジｆｉ  を付加して、
【数１６】
Ｇｉ  ＝Ｇｉ−１  ＋ｆｉ
とする（ステップ１５１０）。このとき、ソースから各点への経路に、付加されたバックエッジを経由するものが加わったことになる。そこで、各点のソースからの最長路長を更新する（ステップ１５１１）。すなわち、各点のソースからの最長路長Ｌｉ  については、付加されたバックエッジを経由する最長路長の方が大きいかを判断し、大きいときは当該最長路長によって置き換えを行う。
【００２８】
ここで、ソースからバックエッジを経由して各点ｖλに至る最長路長は、ソースからバックエッジｆｉ  の始点ｖμまでの最長路長Ｌｉ−１  （ｖμ）に、バックエッジの重みＷ（ｆｉ  ）と、バックエッジｆｉ  の終点ｖνから点ｖλまでの最長路長Ｌｉ−１  （ｖν，ｖλ）を加算したもの、すなわち、
【数１７】
Ｌｉ−１  （ｖμ）＋Ｗ（ｆｉ  ）＋Ｌｉ−１  （ｖν，ｖλ）
として求めることができる。これをＬｉ−１  Ｘとし、ｍａｘ（）を最大値を取る関数とすると、
【数１８】
Ｌｉ  （ｖλ）＝ｍａｘ（Ｌｉ−１  （ｖλ），Ｌｉ−１  Ｘ）
と表すことができる。
【００２９】
そして、次の（ｉ＝ｉ＋１）バックエッジを選択する（ステップ１５２）。上記で、最長路長Ｌｉ  （ｖ）及びＬｉ  （ｖν，ｖμ）を求める際にＤｉｊｋｓｔｒａ  ａｌｇｏｒｉｔｈｍを利用すると高速に求めることができる。
【００３０】
なお、図１６の手順ではＰＣ検出を効率化するために、ソースからバックエッジｆｉ  の終点ｖνまでの最長路長Ｌｉ−１  （ｖν）と、ソースからバックエッジｆｉ  の始点ｖμまでの最長路長Ｌｉ−１  （ｖμ）との差に基づいて処理を行ったが、バックエッジｆｉ  の始点ｖμと終点ｖν間の最長路長Ｌｉ−１  （ｖν，ｖμ）のみに基づいてＰＣを検出してももちろん差し支えない。
【００３１】
【発明が解決しようとする課題】
ところで、上記のような従来の手法では、処理時間のほとんどは最長路の算出に費やされるが、最長路の算出所要時間はＯ（ｎ  ｌｏｇｎ）であるから、ＰＣ検出の所要時間はＯ（ｂｎ  ｌｏｇｎ）となる。そして、バックエッジの数は一般にグラフの点の数に比例するので、実行時間は事実上Ｏ（ｎ２  ｌｏｇｎ）である（前記参考文献１）。これは、対象とするシステムの規模が大規模化するに伴って所要時間が著しく増大することを意味しており、大規模なシステムの制約グラフ内のＰＣを高速に検出する制約条件評価方法及び制約条件評価装置が望まれていた。
【００３２】
本発明は、上記のような従来技術の問題点を解決するために提案されたもので、その目的は、大規模なシステムの制約グラフ内のＰＣを高速に検出する制約条件評価方法及び制約条件評価装置を提供することである。
【００３３】
【課題を解決するための手段】
上記の目的を達成するため、請求項１の発明は、制約条件を入力する入力手段と、入力された制約条件に基づいて制約グラフを生成する生成手段と、入力された制約グラフ中の閉路を分割することなく複数のサブグラフに分解する分解手段と、前記各サブグラフごとにバックエッジを検出するバックエッジ検出手段と、前記各サブグラフごとに前記バックエッジに係るＰＣを検出するＰＣ検出手段と、前記ＰＣの検出結果を出力する出力手段とを有するコンピュータを使用して、複数の制約に存在する過度の制約を前記制約グラフ中のＰＣとして検出する制約条件評価方法において、前記入力手段により制約条件を入力する処理と、前記制約グラフ生成手段により、前記入力手段によって入力された制約条件に基づいて、重みを表す値と方向を有する複数のエッジでそれぞれ位置情報を有する始点と終点を含む複数の点の間を接続し、前記始点から終点に至るまでの経路の長さを前記制約グラフにおける経路長とすると共に、複数の点を結ぶエッジの向きに逆らうことなく循環できる経路を閉路として表現し、前記複数の点をその位置を基準として一定の方向にソートし、このソート順に従って得られた各点の位置を結ぶエッジの中で、その始点が終点よりも前記ソート順で後にあるエッジをバックエッジとした制約グラフを生成する処理と、前記分解手段により、前記制約グラフ生成手段により生成された制約グラフを、当該制約グラフ中の閉路を保持したまま複数のサブグラフに分解する分解処理と、前記バックエッジ検出手段により、各サブグラフ中のバックエッジを検出するバックエッジ検出処理と、前記ＰＣ検出手段により、各サブグラフ中の前記バックエッジに係るＰＣを検出するＰＣ検出処理とを有し、前記ＰＣ検出処理は、検出されたバックエッジを前記サブグラフから除去する処理と、前記サブグラフ中のソースを基準点として、除去されたバックエッジの第１の点及び第２の点により最長路及びこの最長路の最長路長を含む所定の経路情報の算出が可能であるか否かを試みる経路情報算出処理と、前記経路情報算出処理により最長路長が算出できた場合に、前記サブグラフにおけるＰＣの存在を判定する判定処理と、を含み、前記経路情報算出処理は、ソース以外の点の位置を示す値を少なくとも前記基準点の位置を示す値以下の値にセットする処理と、所定のソート順に従って各点の位置を基準点として順次選択する処理と、各非基準点の位置を示す値に当該非基準点から当該基準点へのエッジの重みを加算した加算値を求める処理と、加算値が当該基準点の位置を示す値を超えた場合に当該基準点の位置を示す値を当該加算値によって置き換えて当該基準点の位置を移動させる処理と、を含む、ことを特徴とする。
【００３４】
請求項１２の制約条件評価装置は、請求項１の発明を物の観点から把握したもので、請求項１の発明における分解処理、バックエッジ検出処理、及びＰＣ検出処理、に対応する各機能を有する手段として、分解手段、バックエッジ検出手段、及びＰＣ検出手段、を有することを特徴とする。
【００３５】
請求項１１の発明は、制約条件を入力する入力手段と、入力された制約条件に基づいて制約グラフを生成する生成手段と、入力された制約グラフ中の閉路を分割することなく複数のサブグラフに分解する分解手段と、前記各サブグラフごとにバックエッジを検出するバックエッジ検出手段と、前記各サブグラフごとに前記バックエッジに係るＰＣを検出するＰＣ検出手段と、前記ＰＣの検出結果を出力する出力手段とを有するコンピュータを使用して、複数の制約に存在する過度の制約を前記制約グラフ中のＰＣとして検出する制約条件評価方法において、前記入力手段により制約条件を入力する処理と、前記制約グラフ生成手段により、前記入力手段によって入力された制約条件に基づいて、重みを表す値と方向を有する複数のエッジでそれぞれ位置情報を有する始点と終点を含む複数の点の間を接続し、前記始点から終点に至るまでの経路の長さを前記制約グラフにおける経路長とすると共に、複数の点を結ぶエッジの向きに逆らうことなく循環できる経路を閉路として表現し、前記複数の点をその位置を基準として一定の方向にソートし、このソート順に従って得られた各点の位置を結ぶエッジの中で、その始点が終点よりも前記ソート順で後にあるエッジをバックエッジとした制約グラフを生成する処理と、前記分解手段により、前記制約グラフ生成手段により生成された制約グラフを、当該制約グラフ中の閉路を保持したまま複数のサブグラフに分解する分解処理と、前記バックエッジ検出手段により、各サブグラフ中のバックエッジを検出するバックエッジ検出処理と、前記ＰＣ検出手段により、各サブグラフ中の前記バックエッジに係るＰＣを検出するＰＣ検出処理とを有し、前記ＰＣ検出処理は、検出されたバックエッジを前記サブグラフから除去する処理と、除去されたバックエッジの第１の点及び第２の点により最長路及びこの最長路の最長路長を含む所定の経路情報の算出が可能であるか否かを試みる経路情報算出処理と、前記経路情報算出処理により最長路長が算出できた場合に、前記サブグラフにおけるＰＣの存在を判定する判定処理と、制約グラフからバックエッジを除去したフォワードグラフを得る抽出処理と、得られたフォワードグラフの各点をソートするソート処理と、フォワードグラフ中のソースを基準点として、当該ソース以外の点の位置を示す値を少なくとも前記基準点の値以下の値にセットする初期化処理と、ソートされたフォワードグラフについて、エッジによって接続された各２点の位置を、当該２点間に少なくとも当該エッジの重み分の位置間隔を確保するように調整する第１の調整処理と、除去された各バックエッジについて、当該バックエッジの始点の位置を示す値に当該バックエッジの重みを加算した加算値を求め、バックエッジの終点位置を示す値がこの加算値より小さい場合には当該終点位置を示す値を当該加算値によって置き換える第２の調整処理と、を含み、前記第１の調整処理は、前記ソート処理によって各点の位置を基準点として順次選択する処理と、各非基準点の位置を示す値に当該非基準点から当該基準点へのエッジの重みを加算した加算値を求める処理と、加算値が当該基準点の位置を示す値を超えた場合に当該基準点の位置を示す値を当該加算値によって置き換えて当該基準点の位置を移動させる処理と、を含み、前記第１及び第２の調整処理をバックエッジの数と等しい回数だけ繰り返し、第１及び第２の調整処理が収束しない場合には最長路算出失敗を返すことによって処理を終了し、第１及び第２の調整処理が収束した場合には最長路長及び最長路を返す、ことを特徴とする。
【００３６】
請求項２２の制約条件評価装置は、請求項１１の発明を物の観点から把握したもので、請求項１１の発明における分解処理、バックエッジ検出処理、及びＰＣ検出処理、に対応する各機能を有する手段として、分解手段、バックエッジ検出手段、及びＰＣ検出手段、を有することを特徴とする。
【００３７】
請求項１、１１、１２、２２の発明では、与えられた制約グラフが複数のサブグラフに分解され、ＰＣの検出はサブグラフごとに行われる。すなわち、ＰＣの検出所要時間は、一般に検出対象の制約グラフに含まれる要素の数ｎに対してＯ（ｎ）を越える割合で増大するが、請求項１，１４の発明では、検出対象の規模が縮小されるので処理時間の増大率を抑止でき、ＰＣの検出所要時間を短縮できる。また、分割の際に単一の閉路は複数のサブグラフに分割されないので、閉路の一種であるＰＣの検出が妨げられることもない。
【００３８】
また、最長路長の算出という単純な演算に基づいてＰＣの存在が判定されるので、ＰＣの検出所要時間が短縮される。
さらに、エッジで接続された２点間に、そのエッジの重みが収まるだけの間隔が確保されるので、容易に最長路長の算出を試みることができる。このため、構成が簡素化され、かつ、処理が迅速化される。
【００３９】
特に、請求項１１、２２の発明では、バックエッジを一つ除いた結果、バックエッジがなくなったグラフは、サイクルを含まないアサイクリックグラフとなる。このため、第１の調整をトポロジカルソートの順に各点に対して一度適用するだけで、全ての点の位置が、バックエッジ以外の各エッジによって表される各制約を満足する状態となる。このように、請求項１１、２２の発明によれば、ＰＣ検出が高速化される。また、バックエッジを含むグラフでは、前記第１の調整と前記第２の調整とを繰り返し、バックエッジの数より１回多い繰り返し回数が終了しても各点の位置が収束しない場合は、ＰＣが存在すると判定できるが、この繰り返し回数はバックエッジの数よりも一般に少ない。
【００４０】
請求項２の発明は、請求項１記載の制約条件評価方法において、前記経路情報算出処理により前記最長路が算出できなかった場合に、前記バックエッジ検出処理および当該ＰＣ検出処理を繰り返すことを特徴とする。
【００４１】
請求項１３の発明は、請求項２の発明を物の観点から把握したもので、請求項１２記載の制約条件評価装置において、前記経路情報算出手段により前記最長路が算出できなかった場合に、前記バックエッジ検出手段および当該ＰＣ検出手段を繰り返し適用するように構成されたことを特徴とする。
【００４２】
請求項２、１３の発明では、ＰＣがサブグラフ中に存在するときは、一連の処理を繰り返し適用してさらにＰＣの検出を行う。この繰り返しによって、大規模なグラフにおいても、ＰＣ検出が高速化される。
【００４３】
請求項３の発明は、請求項１または２記載の制約条件評価方法において、前記経路情報算出処理により前記最長路が算出できなかった場合に、前記サブグラフに対して前記分解処理を行なうことを特徴とする。
【００４４】
請求項１４の発明は、請求項３の発明を物の観点から把握したもので、請求項１２または１３記載の制約条件評価装置において、前記経路情報算出手段により前記最長路が算出できなかった場合に、前記サブグラフに対して前記分解手段を適用するように構成されたことを特徴とする。
【００４５】
請求項３、１４の発明では、前記最長路が算出できなかった場合に、さらに分解を行ってＰＣの検出を行う。このため、ＰＣの検出対象がさらに小規模となり、検出の所要時間全体が一層短縮される。
【００４６】
請求項４の発明は、請求項１記載の制約条件評価方法において、前記ＰＣ検出処理は、一の経路を最長路として、該最長路の最長路長の算出が可能であるか否かを試みる経路情報算出処理を含み、前記判定処理は、前記最長路長が前記除去されたバックエッジに与えられた重み以下である場合に、前記サブグラフ内にＰＣが存在しないと判定し、前記最長路長が前記除去されたバックエッジの重みを超える場合に、該最長路長と前記除去されたバックエッジとに基づくＰＣが存在すると判定する処理を含むことを特徴とする。
【００４７】
請求項１５の発明は、請求項４の発明を物の観点から把握したもので、請求項１２記載の制約条件評価装置において、前記ＰＣ検出手段が、請求項４の発明におけるＰＣ検出処理に対応する機能を有することを特徴とする。
【００４８】
請求項４、１５の発明では、最長路長の算出を試み、算出された最長路長とバックエッジの重みとの演算という単純な処理でＰＣが検出されるので、ＰＣの検出所要時間が一層短縮される。
【００４９】
請求項５の発明は、請求項１記載の制約条件評価方法において、前記ＰＣ検出処理は、前記ＰＣ検出処理によって検出されたバックエッジが所定の数の場合に、前記サブグラフから当該バックエッジを除去し、前記除去されたバックエッジの始点および終点に基づいて、一の経路および該経路の経路長を含む所定の経路情報を所定の方法で算出し、前記経路長と前記バックエッジに与えられた重みとに基いて、前記経路と前記除去されたバックエッジとに基くＰＣを検出することを特徴とする。
【００５０】
請求項１６の発明は、請求項５の発明を物の観点から把握したもので、請求項１５記載の制約条件評価装置において、前記ＰＣ検出手段が、請求項５の発明におけるＰＣ検出処理に対応する機能を有することを特徴とする。
【００５１】
請求項５、１６の発明では、検出されたバックエッジの数に応じて異なった処理手順が適用される。例えば、検出されたバックエッジが１つのときは、当該バックエッジの始点と終点間の最長路長の算出を１度行う。そして、バックエッジが除去されたグラフは閉路を含まないアサイクリックグラフであり、シンクからソースまでの最長路の長さはＯ（点の数）の時間で求まる。このため、バックエッジの数が１である割合に応じてＰＣの検出所要時間が一層短縮される。
【００５２】
請求項６の発明は、請求項１、２、４または５記載の制約条件評価方法において、前記所定の分解方法は、前記制約グラフを強連結成分ごとに分解することを特徴とする。
【００５３】
請求項１７の発明は、請求項６の発明を物の観点から把握したもので、請求項１２、１３、１５または１６記載の制約条件評価装置において、前記所定の分解方法は、前記制約グラフを強連結成分ごとに分解することを特徴とする。
【００５４】
請求項６、１７の発明では、制約グラフは強連結成分ごとにサブグラフに分解されるが、複数の強連結成分にまたがる閉路は存在せず、また、強連結成分への分解は効率的に行うことができる。このため、閉路の分割を回避しながら効率的に制約グラフの分解を行うことができる。
【００５５】
請求項７の発明は、請求項１、２、４または５記載の制約条件評価方法において、前記バックエッジ検出処理は、複数の点を有する前記サブグラフ中の一のサブグラフを検出対象とすることを特徴とする。
【００５６】
請求項１８の発明は、請求項７の発明を物の観点から把握したもので、請求項１２、１３、１５または１６記載の制約条件評価装置において、前記バックエッジ検出手段は、複数の点を有する前記サブグラフ中の一のサブグラフを検出対象とするように構成されたことを特徴とする。
【００５７】
請求項７、１８記載の発明では、点の数が１つのサブグラフは、ＰＣを検出する対象から除外される。これは、制約グラフ中の枝の始点と終点が一致することはないため、１つの点のみではそもそも閉路とはならないからである。この結果、バックエッジ及びＰＣの検出の対象は複数の点を含むサブグラフに限定され、処理が高速化される。
【００５８】
請求項８の発明は、請求項１記載の制約条件評価方法において、前記バックエッジ検出処理は、位置が最大となる点を始点とするサブグラフのエッジのうち、終点の位置が最小のエッジをバックエッジとして選択することを特徴とする。
【００５９】
請求項１９の発明は、請求項８の発明を物の観点から把握したもので、請求項１２記載の制約条件評価装置において、前記バックエッジ検出手段は、位置が最大となる点を始点とするサブグラフのエッジのうち、終点の位置が最小のエッジをバックエッジとして選択するように構成されたことを特徴とする。
【００６０】
請求項８、１９の発明では、前記バックエッジの検出では、始点の位置が最大かつ終点の位置が最小のエッジから順次選択し、選択されたエッジがバックエッジか否かが判定される。バックエッジは、始点位置の値が大きく、終点位置の値は小さい傾向を有するので、この手順によれば、最も長大なバックエッジが迅速に検出される可能性が高く、処理が迅速化される。
【００６１】
請求項９の発明は、請求項１記載の制約条件評価方法において、前記ＰＣ検出処理に含まれる各処理を繰り返し、前記繰り返しにおいてサブグラフ中の点の数と同回数を超えた繰り返しにおいて点が移動しないとき、シンクの位置とソースの位置の差を最長路長とし、かつ、ソースからシンクまでの経路のうち、エッジの重みが当該エッジの始点と終点間の位置の距離と一致しているエッジだけで構成される経路を最長路とし、前記繰り返しにおいてサブグラフ中の点の数と同回数を超えた繰り返しにおいて点が移動するときは、最長路長が求まらないと判定することを特徴とする。
【００６２】
請求項２０の発明は、請求項９の発明を物の観点から把握したもので、請求項１２記載の制約条件評価装置において、前記ＰＣ検出手段に含まれる各手段を繰り返し適用し、請求項５の発明におけるＰＣ検出処理に含まれる各処理の繰り返しに対応する機能を実現することを特徴とする。
【００６３】
請求項９、２０の発明では、条件に応じた点の位置の移動という単純な処理の繰り返し、フラグなどによる点の移動の有無の監視、カウンタなどによる繰り返し回数の監視、という単純な要素の組み合わせによって最長路長の算出を試みることができる。このため、構成が簡素化され、かつ、処理が迅速化される。すなわち、条件に応じた点の位置の移動の繰り返しは、各点の間に、その点の間に存在するエッジの最大の重みが収まる間隔を順次確保していくことを意味する。このとき、点の移動の各点間での繰り返しはＰＣが存在しない場合に点の数と同回数で解消され、その後点は移動しないので、この場合は最長路長の算出に成功したことになる。一方、ＰＣが存在する場合は、ＰＣの影響で始点と終点の移動の繰り返しが解消されない。このため、点の数と同回数を超える繰り返しで点が移動することが確認できれば、最長路長の算出の失敗とサブグラフ中のＰＣの存在が確認できる。
【００６４】
請求項１０の発明は、請求項１記載の制約条件評価方法において、前記基準点の位置以下の値として、前記ソースの位置からバックエッジの重みの最小のものの値だけ小さい値を用いることを特徴とする。
【００６５】
請求項２０の発明は、請求項１０の発明を物の観点から把握したもので、請求項１２記載の制約条件評価装置において、前記基準点の位置以下の値として、前記ソースの位置からバックエッジの重みの最小のものの値だけ小さい値を用いるように構成されたことを特徴とする。
【００６６】
請求項１０、２０の発明では、前記基準点の位置以下の値として、前記ソースの位置からバックエッジの重みの最小のものの値だけ小さい値を用いる。このため、まず、この最小値をセットする際に前記基準点の位置に基づいて各点の値を決定する処理を省略でき、処理が効率化される。しかも、最小値をセットした状態では、ソース以外の各点の位置はソースの位置よりも十分小さな値にセットされていることが明白であり、この結果、各点の位置についてすべて制約条件を満たしていない状態が確保される。したがって、点の位置の処理の繰り返しによって、制約条件を満たすための各点の限界の位置、すなわち境界点を確実に抽出することが可能となる。
【００６７】
【発明の実施の形態】
次に、本発明の実施の形態（以下「実施形態」という）について図面にしたがって具体的に説明する。なお、実施形態は、典型的には、周辺装置を含むコンピュータをソフトウエェアが制御することによって実現されるが、コンピュータやソフトウェアの構成は種々考えられるので、実施形態の各機能に対応する仮想的回路ブロックを用いて説明する。
【００６８】
［１．第１実施形態の構成］
第１実施形態は、請求項１，６〜８に対応する制約条件評価方法及びこの制約条件評価方法を実行する制約条件評価装置（請求項１２，１９〜２１に対応する）を示すもので、その目的は、大規模な制約グラフ内のＰＣを高速に検出する制約条件評価方法及び制約条件評価装置を提供することである。
【００６９】
まず、図１は、第１実施形態の制約条件評価装置の構成を示す機能ブロック図である。この図に示すように、第１実施形態の制約条件評価装置（以下「本装置」という）は、要素の配置における制約条件を入力する入力手段１と、入力された制約条件に基づいて制約グラフを生成する生成手段２と、を有する。ここで、入力手段１で入力される制約条件とは、要素の配置情報、要素の構成情報、要素間の制約条件、要素の構成を指定する材質や層等で決定されるパラメータ間に与えられるデザインルール等、制約グラフを生成するために必要なすべての情報を指す。
【００７０】
また、本装置は、制約グラフ中の閉路を分割することなく複数のサブグラフに分解する分解手段３と、前記各サブグラフごとにバックエッジを検出するバックエッジ検出手段４と、前記各サブグラフごとに前記バックエッジに係るＰＣを検出するＰＣ検出手段５と、を有する。また、本装置は、点の数が１つの前記サブグラフを、前記バックエッジ検出処理の対象から除外する除外手段６と、前記ＰＣの検出結果を出力する出力手段７と、を有する。
【００７１】
［２．第１実施形態の作用及び効果］
上記のような構成を有する第１実施形態において、制約条件の評価は、次のように行われる。ここで、図２は、第１実施形態における処理手順を示すフローチャートである。
【００７２】
［制約グラフの獲得］
すなわち、まず、入力手段１から、評価対象とする制約条件を入力する（ステップ２１）。この入力は、例えば、要素の諸元や制約内容を記号言語で表現して入力したり、対話的入力によって要素の種類や制約条件の内容を選択するなどして行うことができる。そして、生成手段２が、入力された制約条件に基づいて制約グラフを生成する（ステップ２２）。この生成は、例えば、要素間の隣接関係に基づいて点とエッジを生成するなどの規則に基づいて行う。なお、制約グラフはあらかじめメモリ領域上のデータやディスクファイルの形で与えておいてもよい。
【００７３】
［分解処理］
与えられた制約グラフは、まず、分解手段３によって、閉路を分割することなく複数の各サブグラフに分解される（ステップ２３）。このとき、分解手段３は、前記制約グラフを強連結成分ごとに前記サブグラフに分解するが、複数の強連結成分にまたがる閉路は存在せず、また、強連結成分への分解は効率的に行うことができる。このため、閉路の分割を回避しながら効率的に制約グラフの分解を行うことができる（請求項７，２０）。また、サブグラフへの分割は、閉路が分割されなければ必ずしも強連結成分ごとに行う必要はなく、他のアルゴリズムを用いてもよい。なお、分割された各サブグラフから全てのＰＣを検出すれば、元の制約グラフ中のＰＣが全て検出できることになる。
【００７４】
ここで、強連結成分は、ある有向グラフに対して、なるべく大きな頂点（点）の集合であって、その中の任意の頂点から他の任意の頂点への経路が存在するものを意味する（参考文献４：「データ構造とアルゴリズム」Ａ．Ｖ．エイホ、Ｊ．Ｅ．ホップクロフト、Ｊ．Ｄ．ウルマン著／大野義夫訳  倍風館）。
【００７５】
強連結成分は、深さ優先探索を用いることによって効率よく特定することができる。すなわち、有向グラフに対して深さ優先探索を行い、再帰呼び出しが終わった順で頂点に番号を付与する。次に、有向グラフのすべてのエッジを逆向きにした第２の有向グラフを作成する。さらに、前記深さ優先探索で最大の番号を付与した頂点を出発点として、前記第２の有向グラフに対して深さ優先探索を行う。この探索で到達できない頂点があった場合、その中で最大の番号を付与された頂点を出発点として、再度深さ優先探索を行う。第２の有向グラフに対する探索で、一つの頂点から出発して到達できる範囲が強連結成分であり、出発点として選択された頂点の数だけ強連結成分が存在する。
【００７６】
以下、サブグラフをＧａ  ＝（点群Ｖａ，エッジ群Ｅａ  ），（ａ＝１，…，ｋ）のように表す。この場合、点群Ｖａ  ＝｛ｖ１  ，ｖ２  ，…，ｖｍａ  ｝は、サブグラフＧａ  内のｍａ  個の点の集合で、エッジ群Ｅａ  はサブグラフＧａ  内のエッジ（枝）の集合である。制約グラフＧ内の任意の点は、必ず唯一つのサブグラフＧａ  に属するので、制約グラフＧ内の点の総数ｎ＝各サブグラフ内の点の数ｍ１  ＋ｍ２  ＋…＋ｍｋ  である。なお、図３は、制約グラフの分解の様子を示す概念図であり、制約グラフが４つのサブグラフＧ１  〜Ｇ４  に分解されている様子を示している。
【００７７】
［除外処理］
分割された各サブグラフは順次選択され（ステップ２４，２５）、選択された各サブグラフからは、バックエッジが検出される。この検出に先立って、点の数が１つの前記サブグラフは、バックエッジ検出処理の対象から、除外手段６によって除外される（ステップ２６）。これは、制約グラフ中の枝の始点と終点が一致することはないため、１つの点のみではそもそも閉路とはならないからである。この結果、バックエッジ及びＰＣの検出の対象は複数の点を含むサブグラフに限定され、処理が高速化される（請求項７，１８）。
【００７８】
［バックエッジ検出処理］
複数の点を含むサブグラフについては、バックエッジ検出手段４によって、各サブグラフごとに全てのバックエッジが検出される（ステップ２７）。バックエッジを含まない閉路は存在しないので、バックエッジの検出が処理を高速化する。
【００７９】
初めに、バックエッジの定義を示す。サブグラフに含まれる点のデータを位置の昇順にソートし、位置が等しいものは、点のデータを格納しているメモリ領域のアドレスの小さいほうを前に並べる。この場合、枝は原則として終点が始点の後に存在し、終点が始点よりもソートした順序で前に存在するときにその枝がバックエッジとなる。
【００８０】
ここで、図４は、バックエッジ検出処理の手順の例を示すフローチャートである。各枝は順次選択され（ステップ４２，４３）、バックエッジか否かは次の基準で判定される。即ち、ある枝の始点位置が終点位置より大きければ（ステップ４４）、すなわち終点が始点より前（ソース側）ならばその枝はバックエッジであり（ステップ４５）、逆の場合はバックエッジではない（ステップ４６）。
【００８１】
また、始点と終点の位置が等しい枝については、始点の情報を格納しているメモリ領域のアドレス（以下「始点アドレス」という）と、終点の情報を格納しているメモリ領域のアドレス（以下「終点アドレス」という）との大小を比較する。そして、始点アドレスが終点アドレスより大きければその枝はバックエッジであり（ステップ４７）、逆の場合はバックエッジではない。
【００８２】
［ＰＣ検出処理］
続いて、ＰＣ検出手段５が、各サブグラフごとに、全てのＰＣを検出する（ステップ２８）。ＰＣは従来の手法によって検出すればよい。このように、第１実施形態では、与えられた制約グラフが複数のサブグラフに分解され、ＰＣの検出はサブグラフごとに行われる。すなわち、ＰＣの検出所要時間は、一般に検出対象の制約グラフに含まれる要素の数ｎに対してＯ（ｎ）を越える割合で増大するが、第１実施形態では、検出対象の規模が縮小されるので処理時間の増大率を抑止でき、ＰＣの検出所要時間を短縮できる。また、分割の際に単一の閉路は複数のサブグラフに分割されないので、閉路の一種であるＰＣの検出が妨げられることもない（請求項１，１２）。
【００８３】
すなわち、制約グラフＧ内の点の数をｎとしたとき、Ｇに含まれるＰＣの検出所要時間は、従来の手法によればＯ（ｎ２ｌｏｇｎ）である（前記参考文献１）。そして、一般に、処理時間がＯ（ｎ）を越える割合で増大する場合には、処理を分割して実行すると処理時間を短縮できる。第１実施形態では、従来技術に比べ、制約グラフを分解するための処理が余分に必要であるが、この処理はＯ（ｎ）の時間で実行可能で、他の処理に要する時間のオーダーよりも小さい。このため、分解の所要時間の全体の処理の所要時間に対する比率は対象の規模が増大するほど極小化し、無視しても差し支えない。
【００８４】
すなわち、この場合、サブグラフ内のＰＣの検出所要時間はＯ（ｍａ２ｌｏｇ  ｍａ  ）であるから、制約グラフＧ内のＰＣの検出所要時間のオーダーは、
【数１９】
0003628109.tif 000002
である。ここで、ｍｊ  （ｊ＝１，…，ｂ）のなかで、最大となるものを点の数を表すパラメ−タｍｋ  に選べば、右辺第２項はゼロ以下なので、従来手法によるＰＣ検出所要時間はＯ（ｎｍｋ  ｌｏｇ  ｍｋ  ）を超えない。
【００８５】
特に、サブグラフＧａ  バックエッジが１つのときは、次のような処理を行なえば、より高速にＰＣを検出することができる（図５）。すなわち、始めに、サブグラフＧａ  から唯一のバックエッジｆ１  を解放除去する（ステップ５１）。なお、解放除去は、点の集合Ｖ及びエッジの集合Ｅを含むグラフＧ＝（Ｖ，Ｅ）から、枝を、両端点を残したまま取り去ることをいう（参考文献５：「演習グラフ理論」伊理  正夫、白川  功、梶谷  洋司  他著、コロナ社、ｐ．４）。そして、バックエッジの始点をソース、終点をシンクとするグラフＧ’ａ  を作成するとグラフＧ’ａ  は閉路を含まない。このような、閉路を含まないグラフはアサイクリックグラフ（ａｓｙｃｌｉｃ  ｇｒａｐｈ）  と呼ばれる。
【００８６】
そして、グラフＧ’ａ  におけるシンクからソースまでの最長路の長さＬａ  の算出を行うが（ステップ５２）、ｍａ  個の点からなるアサイクリックグラフにおける任意の２点間の最長路はＯ（ｍａ  ）の時間で求まることが知られている。したがって、このグラフＧ’ａ  におけるシンクからソースまでの最長路の長さＬａ  もＯ（ｍａ  ）の時間で求めることができる。そして、最長路の長さＬａ  が除去されたバックエッジｆ１  の重みＷ（ｆ１  ）の範囲内に収まっていなければ（ステップ５３）、すなわち、
【数２０】
Ｌａ  ＋Ｗ（ｆ１  ）＞０
であればサブグラフＧａ内にＰＣが存在する。この場合、結果として、ＰＣとなる要素である前記最長路と除去されたエッジｆ１  が特定され、所定のメモリ領域に格納される（ステップ５４）。
【００８７】
一方、最長路の長さＬａ  がバックエッジの重みＷ（ｆ１  ）の範囲内に収まっていれば、すなわち、
【数２１】
Ｌａ  ＋Ｗ（ｆ１  ）≦０
であればサブグラフＧａ  内にＰＣは存在しないので、この旨を示す返り値等のデータが結果として返される（ステップ５５）。
【００８８】
上記手順の所要時間は主に最長路の算出に費やされるが、最長路の算出所要時間はＯ（ｍａ  ）となる。このため、バックエッジが一つの場合のＰＣ検出所要時間も点の数ｍａ  に対してＯ（ｍａ  ）となる。一方、バックエッジが複数の場合のサブグラフ内のＰＣの検出所要時間はＯ（ｍａ２ｌｏｇ  ｍａ  ）である。したがって、すべてのサブグラフにバックエッジが複数含まれているとき、処理時間のオーダーが最大となる。しかし、この場合でも処理時間のＯ（ｎｍｋ  ｌｏｇ  ｍｋ  ）以下であるから、従来技術の処理時間Ｏ（ｎ２ｌｏｇ  ｎ）よりも短縮される（請求項６，１９）。
【００８９】
また、バックエッジを一つしか含まないサブグラフの割合が多いほど処理時間は短く、すべてのサブグラフにバックエッジが一つしか含まれないとき、各サブグラフの処理時間はＯ（ｍａ  ）であるから、制約グラフＧ内のＰＣの検出所要時間のオーダーはＯ（ｎ）となる。また、点の数を表すパラメ−タｍｍｋ  がｎに依らない場合は、サブグラフ内のバックエッジの数によらず、処理時間はＯ（ｎ）である。
【００９０】
このように、第１実施形態では、制約グラフをサブグラフに分解するのみならず、サブグラフ内のバックエッジの数が１であるか２以上であるかによって異なるＰＣの検出手順を用いるので、検出所要時間が特に短縮される。
【００９１】
このように得られたＰＣに関する情報は、所定のメモリ領域に格納したうえ、表示画面やプリンタから出力したり（ステップ２９）、ファイルに記録するなどしておき、適宜利用すればよい。
【００９２】
［３．第２実施形態］
制約グラフＧを制約グラフＧａ  に分解した後、複数の点を含む各サブグラフＧａ  （ａ＝１，…，ｋ）に対して、次のような処理を繰り返すことでＰＣを算出してもよい（請求項２〜４，６，９〜１２，１５〜１７，１９，２２〜２５に対応）。なお、サブグラフＧａ  に属する点と枝にはそれぞれ固有のラベルａを対応付けて記録しておく。この結果、ラベルａに対応する点と枝を集めるとサブグラフＧａ  を得ることができる。このとき、サブグラフＧａ  に含まれる点と枝は制約グラフＧに含まれる点と枝でもあるので、サブグラフＧａ  内のバックエッジを除去すると、制約グラフＧのバックエッジも除去される。
【００９３】
図６は、第２実施形態における処理手順を示すフローチャートである。すなわち、この手順では、制約グラフを分解後（ステップ６１）、各サブグラフＧａ  から、複数の点を含む未調査のものを順次選択し（ステップ６２，６３）、選択したサブグラフからバックエッジｆａ  を一つだけ検出する（ステップ６４）。ここで、バックエッジの定義は第１実施形態と同様であるが、ここではバックエッジを１つだけ検出すればよい。図７は、バックエッジを一つだけ検出する場合の処理手順を示すフローチャートである。この手順では、サブグラフの点のうちで位置が最大となる点を求め、求めた点を始点とするエッジの集合のうちで、終点の位置が最小となるエッジを選択する。
【００９４】
すなわち、サブグラフＧａ  の内の点ｖｉ  の中で、位置Ｘ（ｖｉ  ）が最大の点を選択する（ステップ７１）。特に、位置が最大となる点が複数存在するときは、点の情報を格納するメモリ領域のアドレスＰ（ｖｉ  ）が最大となる点を選択する。そして、選択された点を始点とする枝のうち、終点の位置が最も小さい枝を選択する（ステップ７３）。特に、終点ｖｊ  の位置が最小になる枝が複数存在するときは、終点の情報を格納するメモリ領域のアドレスＰ（ｖｊ  ）が最小となるものを選択する。
【００９５】
この手順で選択したバックエッジは、始点位置の値が大きく、終点位置の値は小さい傾向を有するので、最も長大なバックエッジが迅速に検出される可能性が高く、処理が迅速化される（請求項９，２２）。
【００９６】
次に、検出されたバックエッジｆａ  をサブグラフＧａ  から除去し（ステップ６５）除去済グラフ
【数２２】
Ｇ’ａ  ＝Ｇａ  −ｆａ
とする。また、除去したバックエッジｆａ  は再帰処理用のスタックのトップにプッシュしておくが（ステップ６５）、第２実施形態ではスタックのトップがＰＣ検出に係るカレントのバックエッジである。
【００９７】
そして、バックエッジｆａ  の終点をサブグラフＧ’ａ  のソース、バックエッジｆａ  の始点をサブグラフＧ’ａ  のシンクとする。この除去済グラフに対して最長路の算出によってＰＣの有無を判定する（ステップ６６）。
【００９８】
ここで、図８は最長路の算出の手順を示すフローチャートである。この手順では、まず、初期化作業として（ステップ８１）、サブグラフＧ’ａ  に含まれる点の数を数えてこれをｍａ  とし、Ｘ（ソース）＝０、ソース以外のすべての点ｖｉ（ｉ＝１，２，…，ｍａ  ）に対して位置Ｘ（ｖｉ  ）＝変数Ｘ（ｖｉ  ）がとり得る最小値又は十分に小さな値とし、ループカウンタをゼロにリセットする。
【００９９】
ステップ８４に示す点の位置の処理では、２点間の距離が制約条件を満たさないときに、点の位置を制約条件を満たすための限界の位置、すなわち境界点に修正する。一方、前記のように、ソース以外の各点の位置をソースより十分小さな値にセットしておけば、ソース以外のすべての点は制約条件を満たさないので、点の位置の処理により点の位置が、制約条件を満たすための限界の位置すなわち境界点に移動される。このとき、クリティカルパスを調べることで最長路を検出できる。
【０１００】
そして、すべての点ｖｉ  に対して、バックエッジ定義と同じソート順にしたがって次の手順を繰り返す。すなわち、他のすべての点ｖｋ  （ｋ≠ｉ）の位置に、当該他の点ｖｋ  から点ｖｉ  へのエッジ重みＷ（ｅｋｉ）を加算した値が点の位置Ｘ（ｖｉ  ）を超えるときは、点の位置Ｘ（ｖｉ  ）を前記加算した値によって置き換える（ステップ８４）。これは、
【数２３】
0003628109.tif 000003
と表すことができ、すべての点の位置を、他の点との位置の差に、他の点との間の各エッジの最大の重みがちょうど収まるように再配置することを意味する。そして、一つでも位置Ｘ（ｖｉ  ）が変更したときにはその時点でフラグをＯＮにする。この結果、すべての点ｖｉ  に対して処理が終了したときには、一つでも点の位置Ｘ（ｖｉ  ）が変更されている場合にフラグがＯＮになっている結果となる。そこで、フラグがＯＮの場合は（ステップ８５）カウンタをインクリメント（１加算）し（ステップ８６）、フラグをＯＦＦにリセットしたうえ（ステップ８２）、同様の手順を繰り返す。
【０１０１】
なお、ステップ８３において、カウンタが点の数ｍａ  ＋２になっているときは、最長路長が正しく求まらないとして処理を終了する。すなわち、まず、サブグラフＧ’ａ  に閉路が含まれていて、点の位置調整の影響がすでにされた点の位置に影響を与えるとしても、点の移動の繰り返しは一般に点の数と同じｍａ  回で解消される。
【０１０２】
また、サブグラフＧ’ａ  中にＰＣが存在しない場合は、あるバックエッジの重みは、当該バックエッジ間の最長路に含まれている各エッジの重みの合計より絶対値が大きい。このため、最長路上の点の位置が確定するにしたがってバックエッジの始点の位置は大きくなり、バックエッジの始点が最長路の端に移動した場合でも、バックエッジの終点との間の位置の差よりもバックエッジ重みの絶対値が大きいままである。この状態でバックエッジの終点の位置調整が行われても、始点との関係では、終点の位置は変更されない。なぜなら、始点位置にバックエッジ重みを加算してもその結果はその時点における終点位置より小さいので、終点位置の置き換えは行われないからである。
【０１０３】
このため、点の移動の繰り返しの解消に最大値であるｍａ  回を要した場合でも、ｍａ  ＋１回目には点の位置調整が行われずに済み、フラグはＯＦＦのままとなる。このときは、最長路ソースｖｓｏｕｒｃｅからシンクｖｓｉｎｋに至り、最長路長Ｌａ＝Ｘ（ｖｓｉｎｋ）となる（ステップ８７）。このとき、各点の位置は、各点に入力するエッジの重みとこのエッジの始点の位置の和のうちで、最も大きいものに合わせて配置されている。クリティカルパスは、ソースからシンクまでの経路のうち、重みｅμνが始点終点距離Ｘ（ｖμ）−Ｘ（ｖν）と一致している枝のみを含む経路であり、この場合はクリティカルパスが最長路である。
【０１０４】
逆に、当該バックエッジの閉路がＰＣの時は、始点位置にバックエッジ重みを加算すると、重みの絶対値が最長路長より小さいためにその結果はその始点における終点位置より大きくなる。すると、終点位置が変動し、終点からのエッジが存在するすべての点の位置が再度変動する。この変動はやがて原因となったバックエッジの始点の位置の増大を帰結する。この結果、バックエッジは始点と終点の増大を繰り返して移動を続けるので、ｍａ  ＋２回目にも点の位置調整が行われてステップ８２に戻る。このため、カウンタがｍａ  ＋２になっていることが確認できればサブグラフＧ’ａ  中にＰＣが存在することが確認できる（ステップ８３）。
【０１０５】
最長路の算出の結果、最長路長Ｌａ  が正しく求まり（ステップ６７）、かつ、最長路長Ｌａ  がバックエッジの重みＷ（ｆａ  ）に収まっている場合（ステップ６８）、すなわち、
【数２４】
Ｌａ  ＋Ｗ（ｆａ  ）≦０
が成立する場合はサブグラフＧａ  内にＰＣは存在しない。この場合はステップ６５で除去したバックエッジを付加した後（ステップ６１４）、次のサブグラフについてステップ６２からの手順を実行する。
【０１０６】
また、最長路長Ｌａ  が正しく求まったが最長路長Ｌａ  がバックエッジ重みＷ（ｆａ  ）を超えるとき（ステップ６８）、すなわち、
【数２５】
Ｌａ  ＋Ｗ（ｆａ  ）＞０
が成立する場合は、除去済グラフＧ’ａ  にはＰＣが存在しないが、最長路と除去したバックエッジｆａ  とによって形成される閉路がＰＣである場合であり、これを記録する（ステップ６９）。なお、除去したバックエッジはサブグラフから除去したままとし（ステップ６１０）、手順を進める。なお、スタックのトップにプッシュされていたカレントバックエッジ（のデータ）は、再帰時を除き、次のサブグラフの処理の前にＰＯＰされる（ステップ６１１）。
【０１０７】
一方、最長路を正しく求めることができなかったときは除去済グラフＧ’ａ  にＰＣが存在する場合であり、この除去済みグラフＧ’ａ  に対して同じ処理を再帰的に繰り返す。なお、ある段階の再帰中において（ステップ６１２）分解されたすべてのサブグラフの処理が終了した場合は、再帰終了の処理としてサブグラフを再帰前の状態に併合する（ステップ６１３）。
【０１０８】
例えば、図９は、第２実施形態において評価の対象とする制約グラフの例を示す図である。この例では、サブグラフＧａ  内に２つの独立なＰＣ１（実線の太い矢印で示す），ＰＣ２（破線の矢印で示す）が存在する場合、図９中のバックエッジｆａ  を検出し、このバックエッジｆａ  を解放除去して図１０に示すサブグラフＧ’ａ  を得る。このとき、除去されたバックエッジｆａ  はスタックにプッシュされ、スタックのトップがカレントのバックエッジになる（状態１）。
【０１０９】
なお、図１１は、図９の実例における各バックエッジｆａ  及びｆａ  ’の状態を示す概念図である。そして、状態１においては、最長路は正しく求めることができず、サブグラフＧ’ａ  内にＰＣが存在することが判明し、サブグラフＧ’ａ  に再度ステップ６１からの手順が再帰的に適用される。
【０１１０】
この結果、サブグラフＧ’ａ  はさらに４つのサブグラフＧ（２）１〜Ｇ（２）４に分解され、複数の点を含むＧ（２）４について最長路を算出する。このうち、ｆａ  ’がスタックのトップに存在しカレントとなっているときに（状態２）ｆａ  ’を含むＰＣ２が検出されるので、カレントのバックエッジｆａ  ’はＰＣの記録領域に移される（状態３）。
【０１１１】
再帰的実行が終了する時点で、スタックのトップは当初プッシュされたｆａ  に戻り（状態４）、サブグラフは元のサブグラフＧａ  からバックエッジｆａ  ’を除去した状態に戻る。この状態では、バックエッジｆａ  ’が最長路の算出を妨げることがない。このため、カレントバックエッジｆａ  の始点から終点に至る最長路の算出によって、カレントバックエッジｆａ  と当該最長路によって形成される閉路がＰＣであることを判定でき、バックエッジｆａ  は当該最長路と共にＰＣをなすものとしてＰＣ記録に移される（状態５）。このように第２実施形態によればサブグラフ中のすべてのＰＣを検出することができ、検出後にはＰＣが除去された制約グラフが残る（図１２）。
【０１１２】
以上のように、第２実施形態では、サブグラフからバックエッジを一つだけ検出し、最長路及び最長路長の算出を試みることによってＰＣの所在を確認し、ＰＣがサブグラフ中に存在するときは、分解を含む再帰的処理の適用によってさらにＰＣの検出を行う。このため、再帰的処理の単位としてはバックエッジを一つずつ処理する簡明な処理を用いながら、サブグラフの分解を繰り返すことによってＰＣ検出の所要時間全体が一層短縮される（請求項２〜４及び１５〜１７）。
【０１１３】
特に、第２実施形態では、ＰＣがサブグラフ中に存在するときは、分解を含む一連の処理を繰り返し適用してさらにＰＣの検出を行う。この繰り返しによって、大規模なグラフにおいても、ＰＣ検出が高速化される（請求項３，１６）。
【０１１４】
また、第２実施形態では、分解を含む一連の処理の繰り返し適用を再帰的に行うので、定型的な処理の単位を用いながら、グラフの具体的構造に適合した柔軟な順序でＰＣの検出を効率的に行うことができる。
【０１１５】
また、第２実施形態によれば、ＰＣ検出所要時間は一層短縮することができ、検出所要時間は次のように試算することができる。例えば、仮にｋ回目の再帰処理を実行して得たサブグラフ内の点の数がすべて等しくｍ（ｋ）  とすると、ｋ回目の再帰処理を実行して得られるサブグラフの数はｎ／ｍ（ｋ）である。さらに、ＰＣの検出に要した再帰処理の回数の最大値をＩ回、ｍ（ｋ）個の点を含むサブグラフに再帰処理を除いたＰＣ検出手順を適用したときに要する処理時間をＴ（ｍ（ｋ））とすると、全ての点を処理し終わるために要する処理時間は、
【数２６】
0003628109.tif 000004
である。特に、ｍ（ｋ）がｎに依らなければ制約グラフＧからＰＣを検出する所要時間はＯ（ｎ）である。
【０１１６】
さらに、ｍ個の点を含むグラフにおける最長路算出の所要時間はＯ（ｍ２）であり、かつ、最長路算出の所要時間は処理時間の大半を占めるので、ＰＣ検出所要時間もＯ（ｍ２）といえる。そこで、数式２６にＴ（ｍ）＝Ｏ（ｍ２  ）を代入するとＰＣ検出所要時間はＯ（ｎ（ｍ（１）  ＋ｍ（２）  ＋…＋ｍ（Ｉ）  ）である。
【０１１７】
さらに詳しく述べれば、ＰＣ検出の処理を再帰を含めてｊ回適用して得られ、かつ、複数の点を含むサブグラフをＧａ（ｊ）  （ａ＝１，…，ｋ（ｊ）  ）と表し、各Ｇａ（ｊ）に含まれる点の数をｍａ（ｊ）  （≧２）とする。さらに、ｊの最大値をＩとする。このとき、
【数２７】
0003628109.tif 000005
である。各サブグラフごとのＰＣ検出所要時間はＯ（（ｍａ（ｊ）  ）２  ）なので、すべての処理に要する時間のオーダーは、
【数２８】
0003628109.tif 000006
である。特に、ｍａ（ｊ）（ａ＝１，…，ｋ（ｊ））の中の最大値をｍ（ｊ）  とすると、すべての処理に要する時間のオーダーはｎ（ｍ（１）  ＋ｍ（２）  ＋…＋ｍ（Ｉ）  ）以下となる。この式では、ｍ（１）  ＋ｍ（２）  ＋…＋ｍ（Ｉ）  が小さいほど所要時間が小さいことが保証され、これがｎによらなければ、処理時間はＯ（ｎ）となることがわかる。
【０１１８】
また、第２実施形態では、条件に応じた点の位置の移動という単純な処理の繰り返し、フラグなどによる点の移動の有無の監視、カウンタなどによる繰り返し回数の監視、という単純な要素の組み合わせによって最長路長の算出を試みることができる。このため、構成が簡素化され、かつ、処理が迅速化される。すなわち、条件に応じた点の位置の移動の繰り返しは、各点の間に、その点の間に存在するエッジの最大の重みが収まる間隔を順次確保していくことを意味する。このとき、点を移動する処理の繰り返しは一般に点の数と同回数で解消され、その後点は移動しないので、この場合は最長路長の算出に成功したことになる。一方、ＰＣが存在する場合は、ＰＣの影響で始点と終点の移動の繰り返しが解消されない。このため、点の数と同回数を超える繰り返しで点が移動することが確認できれば、最長路長の算出の失敗とサブグラフ中のＰＣの存在が確認できる（請求項１０，１１，２３及び２４）。
【０１１９】
また、第２実施形態では、ＰＣ検出処理において最長路の算出に用いる前記基準点の位置以下の値として、ＰＣ検出処理に用いられる変数のとり得る範囲の最小値を用いる。このため、まず、この最小値を変数にセットする際に前記基準点の位置に基づいて各点の値を決定する処理を省略でき、処理が効率化される。しかも、最小値をセットした状態では、ソース以外の各点の位置はソースの位置よりも十分小さな値にセットされていることが明白であり、この結果、各点の位置についてすべて制約条件を満たしていない状態が確保される。したがって、点の位置を移動する処理の繰り返しによって、制約条件を満たすための各点の限界の位置、すなわち境界点を確実に抽出することが可能となる。
【０１２０】
［４．第３実施形態］
最長路の算出を試みることによって、ＰＣを検出するには、次のように行うこともできる。まず、制約グラフからバックエッジを除いたグラフ（本明細書において「フォワードグラフ」という）を抽出する（ステップ１３１）。第３実施形態は、このようにバックエッジを除いたフォワードグラフが半順序関係を有するという特徴を利用したものである（参考文献６：Ｙ．  Ｌｉａｏ，  Ｃ．  Ｗｏｎｇ，”Ａｎ  Ａｌｇｏｒｉｔｈｍ  ｔｏ  Ｃｏｍｐａｃｔ  ａ  ＶＬＳＩ  Ｓｙｍｂｏｌｉｃ  Ｌａｙｏｕｔ  ｗｉｔｈ  Ｍｉｘｅｄ  Ｃｏｎｓｔｒａｉｎｔｓ”．  ）。すなわち、点の間のエッジを順序関係とみると、同じ点の子孫同士を比べるとは合流が起きないかぎり順序関係がない。グラフ中に順序関係が存在するが、点の組み合わせによっては必ずしも点の間に順序関係があるとは限らない場合を半順序関係という。
【０１２１】
このフォワードグラフの各点をトポロジカルソートする（ステップ１３２）。トポロジカルソートは、半順序関係に係る各点を、順序関係に応じて順序づけすることである（参考文献７：石畑  清「アルゴリズムとデータ構造」ｐ２４２−２４４、岩波講座、ソフトウェア科学）。ここで、順序関係を持たない点同士の並べ方には自由であるから、トポロジカルソートの解は一般に複数ありうるが、例えば、グラフの深さ優先探索を用いて解の一つが得られる。すなわち、ある点でシンク側の未訪問の他の点が尽き、ソース側に戻るときに、当該ある点の番号を順次記録してゆけば、記録結果はトポロジカルソートの結果の逆順となる。
【０１２２】
ソートされたフォワードグラフについて、グラフ中におけるソースを基準点として、ソース以外の点の位置を少なくとも前記基準点の位置以下の値に初期化する（ステップ１３３）。
【０１２３】
続いて、エッジが存在する点の間に少なくとも当該エッジの重み分の位置間隔を確保するように各点の位置を調整する（ステップ１３５）。この第１の調整処理は、フォワードグラフについて、単一のソースを持つアサイクリックグラフにおいて各点までの最長路（クリティカルパス）を求める手順と考えることができる。また第１の調整処理以降の繰り返し処理においては、毎回開始前にカウンタをインクリメントし、繰り返し回数をカウントする（ステップ１３４）。
【０１２４】
前記第１の調整手段は、具体的には、前記各点を前記トポロジカルソートの順にしたがって基準点として順次選択する。次に基準点以外の各他点の位置に当該他点から基準点へのエッジを特定し、基準点以外の各他点の位置にエッジの重みを加算した加算値を求める。この加算値のなかに基準点の位置を超えるものがあるときは基準点の位置を当該超えるものによって置き換えて移動させる。この処理は、第２実施例における点の位置の処理（ステップ８４、数式２３）と同様である。
【０１２５】
このとき、フォワードグラフはサイクルを含まないアサイクリックグラフなので、ソートされた順に一度この処理を実行するだけで、全ての点の位置が確定される。これによって、各点は、バックエッジ以外の各エッジによって表される各制約を満足する状態となる。
【０１２６】
次に、各バックエッジについて、バックエッジの始点位置にバックエッジの重みを加算した加算値を求め、バックエッジの終点位置がこの加算値より小さいときは当該終点位置を当該加算値によって置き換える第２の調整処理が行われる（ステップ１３６）。
【０１２７】
この処理は、バックエッジが右から左に向かうエッジの場合、バックエッジの重みの範囲内に収まるように、バックエッジの左端の点を右側に移動させることを意味する。これによって、バックエッジが表している制約を満足するように点の位置が調整される。
【０１２８】
第２の調整処理で点が移動しない場合は点の位置が収束したことになるので手順は終了する（ステップ１３７）。点の位置が調整された場合は、今度は、バックエッジ以外のエッジによる制約、すなわち重みを含む順序関係が満たされていない可能性があるので、再度ステップ１３４からの処理が行われる。なお、点の位置が移動したか（収束したか）否かは、第２実施形態と同様に、フラグなどを用いて確認すればよい。
【０１２９】
このように、第１の調整処理と前記第２の調整処理とを繰り返し、ソースから各点までの最長路を求めることができる。この繰り返しでは、バックエッジの数をｂとするとｂ＋１回以内で各点の位置が収束し、点の位置とソースの位置の差が最長路となる（ステップ１３８）。もし、ｂ＋１回目で収束しないときは（ステップ１３９）、制約グラフ内にはＰＣが存在すると判定できる。すなわち、ある第２の調整処理で、バックエッジに適合するように終点位置が修正され、次の第１の調整処理で、修正に適合するように各点の位置が修正される。そして、第１と第２の調整の繰り返し１回あたり１つのバックエッジへの適合しか実現されなかったとしても、ｂ＋１回目で全てのバックエッジへの適合が完了するはずである。にもかかわらず、ｂ＋２回目の処理が必要になるということは、少なくとも一組は、バックエッジに合わせた終点位置の修正と、この修正に合わせた各点の位置の修正との間に、矛盾すなわちＰＣが存在することを意味するからである。このように、第３実施形態において、ＰＣの判定に要する繰り返し回数は点の数よりも一般に少ないので、ＰＣ検出が効率的に行うことができる（請求項１１，２２）。
【０１３０】
［５．他の実施形態］
本発明は、上記各実施形態に限定されるものではなく、実施態様の変更は自由であるから、次に例示するような他の実施形態をも包含するものである。例えば、本発明は、ＩＣレイアウトのみならず、スケジューリングなどどの様な対象に係る制約条件をも対象とすることができる。また、制約グラフは必ずしも図表の形式で出力される必要はなく、実質的に制約グラフを表す構造のデータを自由に用いることができる。
【０１３１】
さらに、データ構造はグラフの頂点や枝と一対一に対応する必要はなく、制約グラフの情報を再現できる形式であれば、どのようなものでもよい。また、グラフや、頂点、枝という用語を使用せず、グラフ、頂点、枝などを再現できるデータを組み合わせて本請求内容を実施することもできる。
【０１３２】
また、除外処理は必ずしも必須でなく、バックエッジの数が１であるか２以上であるかによって必ずしもＰＣ検出の手順を変更する必要はない。また、重みとして整数のみならず実数など他の形式の属性や属性値を用いることもできる。また、ＰＣ検出において、再帰的処理は必ずしも必須ではない。
【０１３３】
典型的には、本発明はコンピュータプログラムを用いて実施されるが、そのようなプログラムを記録した媒体も本発明の一態様である。
【０１３４】
【発明の効果】
以上説明したように、本発明によれば、大規模なシステムの制約グラフ内のＰＣを高速に検出する制約条件評価方法及び制約条件評価装置を提供できるので、各種レイアウト作業が効率化される。
【図面の簡単な説明】
【図１】本発明の第１実施形態の制約条件評価装置の構成を示すブロック図。
【図２】本発明の第１実施形態の制約条件評価装置の動作手順を示すフローチャート。
【図３】本発明の第１実施形態における制約グラフの分解の様子を示す概念図。
【図４】本発明の第１実施形態におけるバックエッジ検出処理の手順の例を示すフローチャート。
【図５】本発明の第１実施形態において、バックエッジが１つの場合のＰＣ検出の手順を示すフローチャート。
【図６】本発明の第２実施形態における処理手順を示すフローチャート。
【図７】本発明の第２実施形態においてバックエッジを１つだけ検出する場合の処理手順を示すフローチャート。
【図８】本発明の第２実施形態における最長路の算出の手順を示すフローチャート。
【図９】本発明の第２実施形態においてＰＣ検出の対象とする制約グラフの例を示す図。
【図１０】本発明の第２実施形態においてＰＣ検出の対象とする制約グラフの例を示す図。
【図１１】図９の例における各バックエッジｆａ  及びｆａ  ’の状態を示す概念図。
【図１２】本発明の第２実施形態においてＰＣ検出の対象とする制約グラフの例を示す図。
【図１３】本発明の第３実施形態における処理手順を示すフローチャート。
【図１４】制約グラフの一例を示す図。
【図１５】図１４の制約グラフに対応する要素の配置の実例を示す図。
【図１６】従来の手法によるＰＣの検出手順の例を具体的に示したフローチャート。
【符号の説明】
１…入力手段
２…生成手段
３…分解手段
４…バックエッジ検出手段
５…ＰＣ検出手段
６…除外手段
７…出力手段
【図１】
0003628109.tif 000007
【図２】
0003628109.tif 000008
【図３】
0003628109.tif 000009
【図４】
0003628109.tif 000010
【図５】
0003628109.tif 000011
【図６】
0003628109.tif 000012
【図７】
0003628109.tif 000013
【図８】
0003628109.tif 000014
【図９】
0003628109.tif 000015
【図１０】
0003628109.tif 000016
【図１１】
0003628109.tif 000017
【図１２】
0003628109.tif 000018
【図１３】
0003628109.tif 000019
【図１４】
0003628109.tif 000020
【図１５】
0003628109.tif 000021
【図１６】
0003628109.tif 000022