(57)【特許請求の範囲】
【請求項１】
設計プロセスの順序の決定を支援するシステムであって、
それぞれの設計プロセスに対し他のそれぞれの設計プロセスが与える制約の強さを示すデータである制約データを記憶する記憶装置と、
前記記憶装置にアクセスして、ある設計プロセスが他の設計プロセスの制約を受ける関係の循環を前記制約データから検出する検出部と、
前記記憶装置にアクセスして、検出した前記循環の中から、除外すると前記循環を解消できる、制約の強さが最小の制約を選択する選択部と、
前記制約データから、選択した前記制約を除外して、それぞれの設計プロセスが満たすべき制約を示すデータとして出力する出力部と
を備え、
前記選択部は、ある設計プロセスが他の設計プロセスから受ける第１の強さの制約、および、他の設計プロセスがある設計プロセスから受ける第２の強さの制約を、前記第１の強さよりも前記第２の強さが強いことを条件に、他の設計プロセスがある設計プロセスから受ける前記第１及び第２の強さの差分の強さの制約に置換するシステム。
【請求項２】
前記制約データは、満たさないと手戻りが発生する制約を示し、
前記記憶装置は、前記制約の強さとして、発生する手戻りに要する時間を記憶する、請求項１に記載のシステム。
【請求項３】
前記制約データは、必ず満たすべき制約を更に示し、
前記選択部は、必ず満たすべき制約でなく、満たさないと手戻りが発生する制約の中から、制約の強さが最小の制約を選択する、請求項１または２に記載のシステム。
【請求項４】
検出された前記循環に含まれる全ての制約が、必ず満たすべき制約であることを条件に、前記記憶装置が記憶している前記制約データを変更するための入力を受け付ける入力部、を更に備える請求項１から３のいずれか１項に記載のシステム。
【請求項５】
前記選択部は、
前記制約データの複製である複製データを生成して前記記憶装置に格納する複製部と、
前記複製データから、予め定められた手順に従って、前記循環を解消するために除外する制約の強さに影響しない設計プロセスおよび制約を削除する削除部と、
設計プロセスおよび制約を削除した前記複製データのうち、除外すると前記循環を解消できる、制約の強さの合計が最小の制約の組を選択して、選択した当該制約の組に対応する前記制約データにおける制約の組を選択する、対応制約選択部と
を有する、請求項１から４のいずれか１項に記載のシステム。
【請求項６】
前記削除部は、少なくとも何れか１つの設計プロセスの制約を受け、かつ、何れの設計プロセスをも制約しない設計プロセス、または、少なくとも何れか１つの設計プロセスを制約し、かつ、何れの設計プロセスの制約を設けない設計プロセスを、前記複製データから検出して、検出した当該設計プロセス及び当該設計プロセスと他の設計プロセスとの間の制約関係を、前記複製データから削除する第１の削除処理、
第１の設計プロセスが第２の設計プロセスから受ける第１の強さの制約、および、前記第２の設計プロセスが前記第１の設計プロセスから受ける第２の強さの制約を、前記第１の強さよりも前記第２の強さが強いことを条件に、前記第２の設計プロセスが前記第１の設計プロセスから受ける前記第１及び第２の強さの差分の強さの制約に置換する第２の削除処理、および、
第４の設計プロセスが第３の設計プロセスから受ける第３の強さの制約、および、第５の設計プロセスが前記第４の設計プロセスから受ける第４の強さの制約を、前記第４の設計プロセスが他の何れの設計プロセスからも制約を受けず、かつ、前記第４の設計プロセスが他の何れの設計プロセスをも制約しないことを条件に、前記第５の設計プロセスが前記第３の設計プロセスから受ける、前記第３および第４の強さのうち何れか小さい方の強さの制約に置換する第３の削除処理、
のそれぞれを、削除または置換することのできる設計プロセスが無くなるまで前記複製データに対し繰り返す、請求項５に記載のシステム。
【請求項７】
前記検出部は、第８の設計プロセスが第６の設計プロセスから受ける必ず満たすべき制約を、第７の設計プロセスが前記第６の設計プロセスから必ず満たすべき制約を受け、第８の設計プロセスが前記第７の設計プロセスから必ず満たすべき制約を受け、前記第７の設計プロセスが他の何れの設計プロセスからも制約を受けず、かつ、前記第７の設計プロセスが他の何れの設計プロセスをも制約しないことを条件に、制約データから削除し、削除した当該制約データから、制約を受ける関係の循環を検出する、請求項１から６のいずれか１項に記載のシステム。
【請求項８】
前記検出部は、ある設計プロセスと他の設計プロセスの間に、必ず満たすべき制約及び満たさないと手戻りが発生する制約のそれぞれが存在することを条件に、当該手戻りが発生する制約を削除して、削除した当該制約データから、制約を受ける関係の循環を検出する、請求項１から６のいずれか１項に記載のシステム。
【請求項９】
既に終了した設計プロセスの入力を受け付ける入力部をさらに備え、
前記出力部は、前記選択部が選択した制約を除外した当該制約データを表示すると共に、当該制約データが示す制約において既に終了した当該設計プロセスの制約を受け、まだ終了していない設計プロセスの制約は受けない設計プロセスを識別可能に表示する、請求項１から８のいずれか１項に記載のシステム。
【請求項１０】
既に終了した設計プロセスの入力を受け付ける入力部をさらに備え、
前記出力部は、前記選択部が選択した制約を除外した当該制約データを表示すると共に、当該制約データが示す制約において既に終了した当該設計プロセスがまだ終了していない設計プロセスの制約を受けることを条件に、当該制約を識別可能に表示する、請求項１から８のいずれか１項に記載のシステム。
【請求項１１】
前記記憶装置は、それぞれの設計プロセスをノードとし、制約する設計プロセスから制約を受ける設計プロセスに向けた、制約の強さを重みとする有向エッジとしてそれぞれの制約を表したグラフを、前記制約データとして記憶しており、
前記検出部は、前記グラフから循環を検出し、
前記選択部は、検出した前記循環の中から、除外すると前記循環を解消できる、重みが最小の有向エッジを選択し、
前記出力部は、前記グラフから、選択した前記有向エッジを除外して、それぞれの設計プロセスが満たすべき制約を示すグラフとして出力する、請求項１に記載のシステム。
【請求項１２】
設計プロセスの順序の決定を支援する請求項１から１１のいずれか１項に記載のシステムとして、コンピュータを機能させるプログラム。
【請求項１３】
設計プロセスの順序の決定をコンピュータにより支援する方法であって、
前記コンピュータは、それぞれの設計プロセスに対し他のそれぞれの設計プロセスが与える制約の強さを示すデータである制約データを記憶する記憶装置を備え、
前記記憶装置にアクセスして、ある設計プロセスが他の設計プロセスの制約を受ける関係の循環を前記制約データから検出する検出ステップと、
前記記憶装置にアクセスして、検出した前記循環の中から、除外すると前記循環を解消できる、制約の強さが最小の制約を選択する選択ステップと、
前記制約データから、選択した前記制約を除外して、それぞれの設計プロセスが満たすべき制約を示すデータとして出力する出力ステップと
を備え、
前記選択ステップは、ある設計プロセスが他の設計プロセスから受ける第１の強さの制約、および、他の設計プロセスがある設計プロセスから受ける第２の強さの制約を、前記第１の強さよりも前記第２の強さが強いことを条件に、他の設計プロセスがある設計プロセスから受ける前記第１及び第２の強さの差分の強さの制約に置換する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計プロセスの順序の決定を支援する技術に関する。
【背景技術】
【０００２】
自動車などの製品の開発は、膨大な数の設計プロセスを要する。例えば第１の設計プロセスにおいてはドアが設計され、第２の設計プロセスにおいてはドアを取り付ける開口部が設計される。その他にも、製品が複雑かつ大規模になればなるほど、多数の設計プロセスが必要になる。
【０００３】
複数の設計プロセスは相互に依存する場合もある。例えば、ドアの設計が終了しないとその開口部の設計はできない。一方で、開口部の設計が終了しないとドアの設計ができない場合もあるかもしれない。このような場合には、一方の設計プロセスを先に処理するのはやむを得ないが、他方の設計プロセスを終了した後に当該一方の設計プロセスに手戻りが生じる場合がある。
業務工程の最適化に関する背景技術については下記の特許文献１を参照されたい。
【特許文献１】特開２００７−０７９８６８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このように多数の複雑な設計プロセスが相互に依存する場合においては、エンジニアが勘と経験に基づいて、どの設計プロセスを先に処理するべきかを決定することもできる。しかしながら、そのような決定によっては、手戻りによって生じる追加の工数が多くなってしまう場合がある。追加の工数は、開発期間の遅れまたは開発費用の増大を招くおそれがある。これに対し、コンピュータなどで依存関係を解析して設計プロセスの処理手順を決定することも考えられる。
【０００５】
しかしながら、製品の開発においては、様々な例外的状況が生じる場合がある。例えば、先行する設計プロセスにおいて設計変更が発生すると、既に開始した後続の設計プロセスをやり直さなければならない場合がある。また、後続の設計プロセスにおいて作業の優先順位に変化が生じたために、先行の設計プロセスにおいて一部の作業をやり直さなければならない場合がある。このため、単に１つの処理手順を決定したのでは、そのような例外的状況に対応できない場合がある。
【０００６】
そこで本発明は、上記の課題を解決することのできるシステム、プログラムおよび方法を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明の第１の形態においては、設計プロセスの順序の決定を支援するシステムであって、それぞれの設計プロセスに対し他のそれぞれの設計プロセスが与える制約の強さを示すデータである制約データを記憶する記憶装置と、前記記憶装置にアクセスして、ある設計プロセスが他の設計プロセスの制約を受ける関係の循環を前記制約データから検出する検出部と、前記記憶装置にアクセスして、検出した前記循環の中から、除外すると前記循環を解消できる、制約の強さが最小の制約を選択する選択部と、前記制約データから、選択した前記制約を除外して、それぞれの設計プロセスが満たすべき制約を示すデータとして出力する出力部とを備え、前記選択部は、ある設計プロセスが他の設計プロセスから受ける第１の強さの制約、および、他の設計プロセスがある設計プロセスから受ける第２の強さの制約を、前記第１の強さよりも前記第２の強さが強いことを条件に、他の設計プロセスがある設計プロセスから受ける前記第１及び第２の強さの差分の強さの制約に置換するシステムを提供する。また、当該システムとしてコンピュータを機能させるプログラム、および、当該システムにより設計プロセスの順序の決定を支援する方法を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００８】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００９】
図１は、本実施形態に係るコンピュータ１００の概要を示す。コンピュータ１００は、基本的なハードウェアとして、例えば通信インターフェイス・カードなどの通信インターフェイス１０２と、例えばハードディスクドライブなどの記憶装置１０４とを備える。また、コンピュータ１００は、記憶装置１０４から読み出したプログラムをＣＰＵなどの演算装置で実行することにより、支援システム１０６として機能する。
【００１０】
支援システム１０６は、ある製品を開発するための複数の設計プロセスについて、設計プロセス間の制約の入力を利用者から受け付けると共に、その制約をできるだけ充足させるような、設計プロセスの処理順序を決定して出力する。利用者は、この処理順序に従って製品開発を進めることで、例えば設計変更による手戻りを減少させて、開発期間を減少し、または、開発費用を低減できる。以下、具体的に説明する。
【００１１】
図２ａは、本実施形態に係る記憶装置１０４のデータ構造の一例を示す。記憶装置１０４は制約データを記憶している。制約データは、それぞれの設計プロセスに対し他のそれぞれの設計プロセスが与える制約の強さを示すデータである。このデータは、図２ａのように、非対称の行列として表されてよい。また、図２ｂは、本実施形態に係る制約データを表すグラフ（ＤＡＧ：Directed acyclic graph）の一例を示す。
【００１２】
ｗ１−ｗ１０のそれぞれは、設計プロセスを表し、グラフにおいてはノードとして表される。また、設計プロセスと設計プロセスとの間には制約の強さが定義されており、グラフにおいてはエッジとして表される。このエッジは、制約する設計プロセスから制約を受ける設計プロセスに向けた、制約の強さを重みとする有向エッジである。
【００１３】
具体的には、設計プロセスｗ１は、設計プロセスｗ２を制約する。この制約は、必ず満たすべき制約を示す。このような制約については制約の強さは定義されていなくてもよいし、無限大の強さの制約が定義されてもよい。図２ａにおいてはこの制約を「＋」または「−」として表す。また、図２ｂにおいてはこの制約を実線の有向エッジとして表す。
【００１４】
また、設計プロセスｗ２は、設計プロセスｗ８により制約される。この制約は、満たさないと手戻りが発生する制約を示し、この制約の強さは手戻りに要する時間として表される。この手戻りの所要時間は、例えば１単位時間（例えば１人で作業して１時間かかることに相当する）である。図２ａにおいてはこの制約の強さを＋１として表す。また、図２ｂにおいてはこの制約を点線の有向エッジとして表す。
【００１５】
ここで、例えば設計プロセスｗ２、設計プロセスｗ６、および、設計プロセスｗ８に注目されたい。設計プロセスｗ２は設計プロセスｗ６を制約し、設計プロセスｗ６は設計プロセスｗ８を制約し、設計プロセスｗ８は設計プロセスｗ２を制約する。このように、制約データは、ある設計プロセスが他の設計プロセスの制約を受ける関係の循環が含まれる場合がある。
【００１６】
制約データがこのような循環を含む場合においては、何れかの制約が満たされないのはやむを得ない。だからといって、満たさないこととする制約を任意に選択したのでは、手戻りに要する時間が多すぎる場合がある。これに対し、いわゆる全数探索と呼ばれる手法で、手戻りの所要時間を最小化することが考えられる。
【００１７】
例えば、ｗ１−ｗ１０のそれぞれを、制約とは全く無関係に、処理可能なあらゆる順序でそれぞれ処理すると仮定する。そして、それぞれの順序に対応して、その順序で処理した場合における手戻りの所要時間を算出する。この所要時間は、記憶装置１０４を走査して、その順序で処理したならば満たされなくなる制約に対応する手戻りの時間を合計することで算出される。
【００１８】
そして、支援システム１０６は、手戻りの所要時間の合計が最も小さくなる順序を、ｗ１−ｗ１０を処理するべき順序として決定する。このような全数探索によって、支援システム１０６が、手戻りの所要時間の合計を最小化する処理順序を決定することもできる。しかしながら、この全数探索では、設計プロセスの総数が多くなると処理に膨大な時間が必要となって現実的な時間で処理が完了しないおそれがある。
【００１９】
これに対し、本実施形態に係る支援システム１０６は、手戻りの所要時間を最小化する処理順序を、現存のコンピュータを利用しても現実的な時間で完了する、極めて高速な手順で決定してゆく。
図３は、本実施形態に係る支援システム１０６の機能構成を示す。支援システム１０６は、入力部３００と、検出部３１０と、選択部３２０と、出力部３５０とを有する。入力部３００は、利用者から制約データの入力を受け付けて記憶装置１０４に格納する。検出部３１０は、記憶装置１０４にアクセスして、制約データの中から、ある設計プロセスが他の設計プロセスの制約を受ける関係の循環を検出する。
【００２０】
選択部３２０は、記憶装置１０４にアクセスして、検出したその循環の中から、除外すると循環を解消できる、制約の強さの合計が最小の制約の組を選択する。制約データがグラフで表される場合において、この制約の組は、除外するとグラフ内の循環を解消できる、重みの合計が最小の有向エッジの組に相当する。具体的には、選択部３２０は、複製部３２５、削除部３３０、および、対応制約選択部３４０を有する。複製部３２５は、制約データの複製である複製データを生成して記憶装置１０４に格納する。
【００２１】
削除部３３０は、記憶装置１０４にアクセスし、予め定められた手順に従って、循環を解消するための除外するべき制約の強さに影響しない設計プロセスおよび制約を、複製データから削除する。例えば、循環に含まれない制約は除外されないことが明らかである。また、他の制約の強さと比較して非常に強い制約は、除外するべき制約の強さを最小化する観点からは、除外するべきとして選択されることはない。従って、削除部３３０は、このような除外されないことが明らかな制約を複製データから削除してゆく。
【００２２】
対応制約選択部３４０は、設計プロセスおよび制約を削除したその複製データのうち、除外すると循環を解消できる、制約の強さの合計が最小の制約の組を選択する。そして、対応制約選択部３４０は、選択した当該制約の組に対応する、もとの制約データにおける制約の組を選択する。出力部３５０は、記憶装置１０４にアクセスして、もとの制約データから、対応制約選択部３４０により選択された制約の組を除外して、それぞれの設計プロセスが満たすべき制約を示すデータを出力する。
【００２３】
このように、本実施形態に係る支援システム１０６においては、選択部３２０が制約データの中から制約の組を直接選択するのではなく、複製部３２５が複製データを縮退することで規模の縮小したグラフから、対応制約選択部３４０が制約の組を選択する。これにより、選択するべき制約の組を決定するための処理時間を低減することができる。
【００２４】
図４は、本実施形態に係る記憶装置１０４により制約データが加工されて出力される処理の流れを示す。入力部３００は、制約データの入力を受け付けて、入力されたその制約データを記憶装置１０４に格納する（Ｓ４００）。次に、入力部３００は、矛盾して充足し得ない制約、および、冗長・不要な制約を除去する（Ｓ４１０）。その具体例を図５−７に示す。
【００２５】
図５は、不要または冗長な制約を含む制約グラフの第１例を示す。設計プロセスｗ１は設計プロセスｗ２を制約し、設計プロセスｗ２は設計プロセスｗ４を制約し、設計プロセスｗ４は設計プロセスｗ１を制約している。但し、ｗ２からｗ４への制約、および、ｗ４からｗ１への制約は、必ず満たすべき制約ではないので、ここでは制約の矛盾は生じていない。
【００２６】
一方、設計プロセスｗ１は設計プロセスｗ２を制約し、設計プロセスｗ２は設計プロセスｗ３を制約し、設計プロセスｗ３は設計プロセスｗ１を制約している。そして、何れの制約も、満たさないと単に手戻りが生じる制約ではなく、必ず満たすべき制約である。
【００２７】
このように、循環に含まれる全ての制約が、必ず満たすべき制約である場合には、入力部３００は、記憶装置１０４に記憶している制約データを変更するための入力を利用者から受け付ける。例えば、入力部３００は、制約が矛盾している旨のメッセージを、矛盾している制約の識別情報（例えばｗ１→ｗ２、ｗ２→ｗ３およびｗ３→ｗ１などのシンボル）に対応付けて表示したうえで、何れの制約を削除するかを利用者に入力させてよい。この入力に応じて、記憶装置１０４に記憶された制約データは変更される。
【００２８】
図６は、不要または冗長な制約を含む制約グラフの第２例を示す。この第２例において、検出部３１０は、他の複数の制約によって推移的に定まる制約を削除する。具体的には、この第２例において、設計プロセスｗ１は、本発明に係る第６の設計プロセスの一例である。また、設計プロセスｗ２は、本発明に係る第７の設計プロセスの一例である。また、設計プロセスｗ３は、本発明に係る第８の設計プロセスの一例である。
【００２９】
設計プロセスｗ２は設計プロセスｗ１から必ず満たすべき制約を受ける。設計プロセスｗ３は設計プロセスｗ２から必ず満たすべき制約を受ける。設計プロセスｗ３は設計プロセスｗ１から必ず満たすべき制約を受ける。そして、設計プロセスｗ２が他の何れの設計プロセスからも制約を受けない。また、設計プロセスｗ２は他の何れの設計プロセスをも制約しない。この場合には、検出部３１０は、設計プロセスｗ３が設計プロセスｗ１から受ける必ず満たすべき制約を制約データから削除する。
【００３０】
図７は、不要または冗長な制約を含む制約グラフの第３例を示す。この第３例において、検出部３１０は、ある設計プロセスと他の設計プロセスの間に、必ず満たすべき制約及び満たさないと手戻りが発生する制約のそれぞれが存在することを条件に、当該手戻りが発生する制約を制約データから削除する。
【００３１】
具体的には、第３例において、設計プロセスｗ５は設計プロセスｗ４から必ず満たすべき制約を受ける。また、設計プロセスｗ４は設計プロセスｗ５から満たさないと手戻りが発生する制約を受ける。その場合には、検出部３１０は、当該手戻りが発生する制約を制約データから削除する。
【００３２】
また、第３例において、設計プロセスｗ３は設計プロセスｗ１から、満たさないと手戻りが発生する制約を受ける。一方、設計プロセスｗ２は設計プロセスｗ１から、必ず満たすべき制約を受け、設計プロセスｗ３は設計プロセスｗ２から、必ず満たすべき制約を受ける。この結果、推移的には、設計プロセスｗ３は設計プロセスｗ１から、必ず満たすべき制約を受ける。
【００３３】
従って、設計プロセスｗ３およびｗ１の間には、必ず満たすべき制約および満たさないと手戻りが発生する制約のそれぞれが存在する。検出部３１０は、このような場合には、満たさないと手戻りが発生する制約を制約データから削除する。この結果、設計プロセスｗ３が設計プロセスｗ１から受ける、満たさないと手戻りが発生する制約が制約データから削除される。
【００３４】
図４の説明に戻る。次に、検出部３１０は、上記のように各種処理により制約を削除し、または、変更した制約データから、制約の循環を検出する（Ｓ４２０）。その処理の具体例を図８および図９に示す。
【００３５】
図８は、図４のＳ４２０における処理の流れの詳細を示す。検出部３１０は、まず、循環の検出のための各種データを初期化する（Ｓ８１０）。この初期化処理においては、まず、制約データをノードおよびエッジで表した制約グラフが定義される。具体的には、検出部３１０は、集合Ｎを、各設計プロセスを表すノードの集合とし、集合Ｅを、各制約を表すエッジの集合とする。
【００３６】
ノードおよびエッジには、それぞれ、１から順に通し番号が識別情報として付与されているものとする。この場合において、ＮおよびＥのそれぞれは、その後の演算によって参照・変更が可能なように、例えば集合の各要素を識別する識別情報の配列としてＲＡＭなどの記憶装置に記憶されてよい。
【００３７】
また、検出部３１０は、フラグの集合であるＮｖ（ｎ）の記憶域を記憶装置に確保する。Ｎｖ（ｎ）は、ノードｎが訪問済み（図９に示す循環検出処理で処理済であることをいう）かどうかを示すフラグを表す。例えば、Ｎｖ（１）＝１であれば、ノード１が訪問済みであることを示す。Ｎｖ（ｎ）は、例えば、整数型または論理値型の配列変数として実現されてよい。
【００３８】
また、検出部３１０は、ｉｄ番号の集合であるｉｄ（ｎ）の記憶域を記憶装置に確保する。ｉｄ（ｎ）は、ノードｎが所属するグループのＩＤを表す。初期化処理の段階において、まだ何れのノードもグループに所属していないので、検出部３１０は、全てのｎについてｉｄ（ｎ）＝−１と初期化する。
【００３９】
また、検出部３１０は、スタック型のデータ記憶域Ｎｓｔａｃｋを記憶装置に確保する。以降、このデータ記憶域に要素をプッシュすることを、単にＮｓｔａｃｋに要素をプッシュするといい、このデータ記憶域から要素をポップすることを、単にＮｓｔａｃｋから要素をポップする、という。
【００４０】
次に、検出部３１０は、集合Ｎの全てのｎについて、処理が完了したかどうかを判断する（Ｓ８２０）。例えば、集合Ｎ内の何れのノードｎについても、Ｎｖ（ｎ）＝１であれば、集合Ｎ内の全てのノードｎについて処理が完了したと判断される。
【００４１】
処理が完了した場合には（Ｓ８２０：ＹＥＳ）、支援システム１０６は、図８の処理を終了する。一方、処理が完了していなければ（Ｓ８２０：ＮＯ）、検出部３１０は、集合Ｎの中から未処理のノードを選択する。選択されたノードをノードｎとする。そして、検出部３１０は、そのノードｎについて、循環の検出処理を行う（Ｓ８４０）。
【００４２】
循環の検出処理は、例えばＣ言語などの関数型プログラム言語の関数、または、Ｊａｖａ（登録商標）言語などのオブジェクト指向プログラム言語のメソッドで実現されてよい。その場合においては、この循環の検出処理の対象となるノードｎ（厳密にはその通し番号である数値ｎ）が、関数またはメソッドの引数として与えられてよい。この場合において、数値ｎ以外の各種集合および変数は、いわゆる大域変数として、呼び出された関数またはメソッド内においても同一シンボルにより参照される。
【００４３】
後述するＳ８４０の処理を終えると、検出部３１０は、Ｓ８２０に処理を戻して、未処理の次のノードｎについて同様の処理を繰り返す。
図９は、図８のＳ８４０における処理の流れの詳細を示す。まず、検出部３１０は、例えば引数として与えられたノードｎを、Ｎｓｔａｃｋにプッシュする（Ｓ９００）。
【００４４】
次に、検出部３１０は、Ｎｖ（ｎ）＝０かどうかを判断する（Ｓ９０５）。Ｎｖ（ｎ）＝０であれば（Ｓ９０５：ＹＥＳ）、検出部３１０は、Ｎｖ（ｎ）＝１とする（Ｓ９１０）。また、検出部３１０は、ノードｎから制約を受ける他のノード（ノードｎの子と称す）を制約データから検出して、その集合をＮｃとする。集合Ｎｃは、実体はノードの通し番号の配列であり、その記憶域は記憶装置内に確保されてよい。
【００４５】
次に、検出部３１０は、Ｎｃが空集合かを判断する（Ｓ９１５）。Ｎｃが空集合でなければ（Ｓ９１５：ＮＯ）、検出部３１０はＮｃからノードｎｃを取り出す（Ｓ９２０）。Ｎｃからｎｃは除外される。そして、検出部３１０は、ノードｎｃについて、循環の検出処理を再帰的に行う（Ｓ９２５）。これは、例えばノードｎｃ（正確にはその通し番号ｎｃ）を引数とする関数またはメソッドの再帰呼び出しにより実現される。
【００４６】
循環の検出処理が完了すると、検出部３１０は、Ｓ９１５に処理を戻して、Ｎｃに含まれる次のノードｎｃについて処理する。一方、Ｎｃが空集合であれば（Ｓ９１５：ＹＥＳ）、検出部３１０は、Ｎｓｔａｃｋからノードｎをポップして（Ｓ９８０）、図９の処理を終了する。
【００４７】
一方、Ｎｖ（ｎ）＝０で無い場合に（Ｓ９０５：ＮＯ）、検出部３１０は、Ｎｓｔａｃｋのトップを除きＮｓｔａｃｋにノードｎが含まれるかどうかを判断する（Ｓ９３０）。Ｎｓｔａｃｋにノードｎが含まれない場合に（Ｓ９３０：ＮＯ）、検出部３１０は、Ｎｓｔａｃｋからノードｎをポップして（Ｓ９８０）、図９の処理を終了する。
【００４８】
一方、Ｎｓｔａｃｋにノードｎが含まれる場合に（Ｓ９３０：ＹＥＳ）、検出部３１０は、Ｎｓｔａｃｋのうちノードｎよりもスタックトップ側にあるノードの集合（スタックトップに存在するノードｎ自体も含む）を求める（Ｓ９３５）。その集合をＮｌｏｏｐとする。
【００４９】
次に、検出部３１０は、ｉｄ（ｎ）＝−１かどうかを判断する（Ｓ９４０）。ｉｄ（ｎ）＝−１であれば、検出部３１０は、新しいＩＤをｉｄ（ｎ）に付与する。新しいＩＤとは、例えば、既に何れかのノードｍについてｉｄ（ｍ）の値として設定した整数の最大値の次に大きい整数である。まだ何れのノードｍについてもｉｄ（ｍ）を設定していなければ、当該新しいＩＤは０である。
【００５０】
次に、検出部３１０は、Ｎｌｏｏｐに含まれる全てのノードの各々（ｎｌｏｏｐと呼ぶ）について、ｉｄ（ｎｌｏｏｐ）を設定する処理が終了したかどうかを判断する（Ｓ９４５）。終了していなければ（Ｓ９４５：ＮＯ）、検出部３１０は、Ｎｌｏｏｐから未処理のノードであるｎｌｏｏｐを選択する（Ｓ９５０）。
【００５１】
検出部３１０は、ｉｄ（ｎｌｏｏｐ）＝−１かどうかを判断する（Ｓ９５５）。ｉｄ（ｎｌｏｏｐ）＝−１であれば（Ｓ９５５：ＹＥＳ）、検出部３１０は、ｉｄ（ｎｌｏｏｐ）の値をｉｄ（ｎ）と同一の値に設定する（Ｓ９６０）。一方、ｉｄ（ｎｌｏｏｐ）＝−１でなければ（Ｓ９５５：ＮＯ）、検出部３１０は、ｉｄ（ｎ´）がｉｄ（ｎｌｏｏｐ）と等しいすべてのｎ´をＮの中から検索して、検索したそれぞれのｎ´について、ｉｄ（ｎ´）の値をｉｄ（ｎ）と同一の値に設定する（Ｓ９７０）。
【００５２】
そして、検出部３１０は、Ｓ９４５に処理を戻してＮｌｏｏｐの全てについて処理を終了するまでｉｄ（ｎｌｏｏｐ）に値を設定する処理を繰り返す。Ｎｌｏｏｐの全てについて処理を終了した場合に（Ｓ９４５：ＹＥＳ）、検出部３１０は、Ｎｓｔａｃｋからノードｎをポップして（Ｓ９８０）、図９の処理を終了する。
【００５３】
以上の処理により、同じ循環に含まれるノードには、同じｉｄの値が付与される。例えば、あるノードｎおよびノードｍが同じ循環に含まれる場合には、ｉｄ（ｎ）はｉｄ（ｍ）と等しくなる。これにより、制約データ中に循環が幾つあって、かつ、それぞれの循環がどのようなノードを含むかを判別することができる。
【００５４】
図４の説明に戻る。次に、選択部３２０は、循環を解消するために除外するべき制約の組を選択する（Ｓ４３０）。その処理の詳細を図１０に示す。
図１０は、図４のＳ４３０における処理の流れの詳細を示す。複製部３２５は、制約データの複製である複製データを生成する（Ｓ１０００）。また、選択部３２０は、以降の処理に使用する各種のデータを初期化する（Ｓ１００５）。
【００５５】
具体的には、選択部３２０は、集合Ｎを、各設計プロセスを表すノードの集合とし、集合Ｅを、各制約を表すエッジの集合とする。ノードおよびエッジには、それぞれ、１から順に通し番号が識別情報として付与されているものとする。この場合において、ＮおよびＥのそれぞれは、その後の演算によって参照・変更が可能なように、例えば集合の各要素を識別する識別情報の配列としてＲＡＭなどの記憶装置に記憶されてよい。
【００５６】
選択部３２０は、また、それぞれのエッジｅについて、エッジの集合Ｅｏｗｎ１（ｅ）およびＥｏｗｎ２（ｅ）を定義する。即ち例えば、選択部３２０は、Ｅｏｗｎ１について、エッジの集合を格納するための記憶域を、エッジの数だけ記憶装置内に確保する。また、Ｅｏｗｎ２について、選択部３２０は、エッジの集合を格納するための記憶域を、エッジの数だけ記憶装置内に確保する。
【００５７】
そして、選択部３２０は、それぞれのエッジｅについて、Ｅｏｗｎ１（ｅ）をそのエッジｅ自体のみを含む集合によって初期化する。また、選択部３２０は、それぞれのエッジｅについて、Ｅｏｗｎ２（ｅ）を空集合によって初期化する。
【００５８】
次に、削除部３３０は、第１の削除処理を行う（Ｓ１０１０）。その詳細を図１１ａおよび図１１ｂに示す。
図１１ａは、図１０のＳ１０１０における処理の流れの詳細を示す。まず、削除部３３０は、集合Ｎに含まれる全てのノードｎについて処理が完了したかどうかを判断する（Ｓ１１００）。全てのノードｎについて処理が完了したならば（Ｓ１１００：ＹＥＳ）、削除部３３０は、図１１ａに示す第１の削除処理を終了する。
【００５９】
何れかのノードｎが未処理ならば、削除部３３０は、未処理のノードｎを集合Ｎから１つ選択する（Ｓ１１１０）。そして、削除部３３０は、選択したノードｎに入ってくるエッジが１つ、かつ、選択したノードｎから出てゆくエッジが１つであるかを判断する（Ｓ１１２０）。
【００６０】
選択したノードｎに入ってくるエッジが１つ、かつ、選択したノードｎから出てゆくエッジが１つであれば（Ｓ１１２０：ＹＥＳ）、削除部３３０は、ノードｎに入ってくるエッジをｒ１とおき、かつ、ノードｎから出てゆくエッジをｒ２とおく（Ｓ１１３０）。
【００６１】
そして、削除部３３０は、エッジｒ１の元にあるノードとエッジｒ２の先にあるノードとが同一かどうかを判断する（Ｓ１１４０）。同一であれば（Ｓ１１４０：ＹＥＳ）、削除部３３０は、Ｓ１１００に処理を戻して次のノードについて判断する。
【００６２】
同一でなければ（Ｓ１１４０：ＮＯ）、削除部３３０は、エッジｒ１が表す制約の強さｗ（ｒ１）とエッジｒ２が表す制約の強さｗ（ｒ２）を比較する（Ｓ１１５０）。ｗ（ｒ１）＜ｗ（ｒ２）であれば（Ｓ１１５０：ＹＥＳ）、削除部３３０は、集合Ｎからノードｎを削除する（Ｓ１１６０）。また、削除部３３０は、エッジｒ１を、エッジｒ１の元のノードからエッジｒ２の先のノードへ張り直し、エッジｒ２を集合Ｅから削除する。
【００６３】
ｗ（ｒ１）＜ｗ（ｒ２）でなければ（Ｓ１１５０：ＮＯ）、削除部３３０は、集合Ｎからノードｎを削除する（Ｓ１１７０）。また、削除部３３０は、エッジｒ２を、エッジｒ１の元のノードからエッジｒ２の先のノードへ張り直し、エッジｒ１を集合Ｅから削除する。そして、削除部３３０は、Ｓ１１００に処理を戻して次のノードｎについて処理を繰り返す。
【００６４】
図１１ｂは、図１０のＳ１０１０により制約関係が除去されるグラフの一例を示す。この例において、設計プロセスｗ１は、本発明に係る第３の設計プロセスの一例であり、設計プロセスｗ２は、本発明に係る第４の設計プロセスの一例であり、設計プロセスｗ３は、本発明に係る第５の設計プロセスの一例である。
【００６５】
そして、設計プロセスｗ２は設計プロセスｗ１から第３の強さの制約、例えば、４単位時間の手戻りの発生を示す制約を受ける。また、設計プロセスｗ３は設計プロセスｗ２から第４の強さの制約、例えば、７単位時間の手戻りの発生を示す制約を受ける。さらに、設計プロセスｗ２は他の何れの設計プロセスからも制約を受けず、かつ、設計プロセスｗ２は他の何れの設計プロセスをも制約しない。
【００６６】
この場合において、削除部３３０は、これらの制約を、設計プロセスｗ３が設計プロセスｗ１から受ける、第３および第４の強さのうち何れか小さい方の強さの制約に置換する。即ちここでは、第３の制約の強さは４単位時間であり、第４の制約の強さである７単位時間より小さいから、これらの制約は、設計プロセスｗ３が設計プロセスｗ５から受ける４単位時間の制約に置換される。
【００６７】
このような置換の妥当性は、直感的には以下の通りである。この例において、設計プロセスｗ２に関して発生する手戻りの時間は、設計プロセスｗ１およびｗ３との順序関係に依存して定まる。例えば設計プロセスｗ１の後に設計プロセスｗ３を処理するという前提において、設計プロセスｗ１、ｗ２およびｗ３の順で処理すれば手戻りは発生しない。
【００６８】
一方、設計プロセスｗ３の後に設計プロセスｗ１を処理するという前提においては、設計プロセスｗ３、ｗ２およびｗ１の順で処理することが、手戻りを最小化する観点からは最善である。但し、この場合において４単位時間の手戻りが発生する。
【００６９】
以上より、設計プロセスｗ１を設計プロセスｗ３より前に処理したとしても、設計プロセスｗ１を設計プロセスｗ３より後に処理したとしても、その他の設計プロセスを最善の順序で処理するならば、設計プロセスｗ２およびｗ３の間に定義された７単位時間の手戻りは発生することが無い。
【００７０】
従って、削除部３３０は、このような手戻りが発生し得ない制約については複製データから除外する。そのような制約は、必ず充足される制約であり、循環を解消するためであっても除外されることが無いからである。
なお、設計プロセスｗ１およびｗ３の何れを先に処理するべきかについては、その他の設計プロセスとの間の関係によって定まる。
【００７１】
図１０の説明に戻る。次に、削除部３３０は、第２の削除処理を行う（Ｓ１０２０）。その詳細を図１２ａおよび図１２ｂに示す。
図１２ａは、図１０のＳ１０２０における処理の流れの詳細を示す。削除部３３０は、集合Ｎに含まれる全てのノードｎについてＳ１０２０の処理が完了したかどうかを判断する（Ｓ１２００）。完了した場合には（Ｓ１２００：ＹＥＳ）、削除部３３０は、図１２ａに示す第２の削除処理を終了する。
【００７２】
完了していない場合には（Ｓ１２００：ＮＯ）、削除部３３０は、集合Ｎから未処理のノードを選択する（Ｓ１２１０）。選択したノードをノードｎとする。そして、削除部３３０は、そのノードｎには、入ってくるエッジしか存在しないか、または、出てゆくエッジしか存在しないかを判断する（Ｓ１２２０）。
【００７３】
入ってくるエッジしか存在しないか、または、出てゆくエッジしか存在しない場合に（Ｓ１２２０：ＹＥＳ）、削除部３３０は、集合Ｎからノードｎを除外すると共に、集合Ｅからノードｎに接続しているエッジを除外する（Ｓ１２３０）。そして、削除部３３０は、Ｓ１２００に処理を戻して他のノードについて図１２ａの処理を繰り返す。
【００７４】
図１２ｂは、図１０のＳ１０２０により制約関係が除去されるグラフの一例を示す。本例において設計プロセスｗ４には、入ってくるエッジしか存在しない。即ち、設計プロセスｗ４は、少なくとも何れか１つの設計プロセスの制約を受け、かつ、何れの設計プロセスをも制約しない。このような場合に、削除部３３０は、この設計プロセスｗ４を複製データから削除する。
【００７５】
これに加えて、削除部３３０は、出てゆくエッジしか存在しない設計プロセス、即ち、少なくとも何れか１つの設計プロセスを制約し、かつ、何れの設計プロセスの制約をも受けない設計プロセスを、複製データから削除する。このように、循環の解消に影響しない設計プロセスは、後の処理の所要時間を短くするために複製データから削除される。
【００７６】
図１０の説明に戻る。次に、削除部３３０は、第３の削除処理を行う（Ｓ１０３０）。その詳細を図１３ａおよび図１３ｂに示す。
図１３ａは、図１０のＳ１０３０における処理の流れの詳細を示す。削除部３３０は、集合Ｅの中の全てのエッジについて、Ｓ１０３０の処理が終了したかどうかを判断する（Ｓ１３００）。終了した場合には（Ｓ１３００：ＹＥＳ）、削除部３３０は、図１３ａに示す第３の削除処理を終了する。
【００７７】
何れかのエッジについて処理がまだ終了していなければ（Ｓ１３００：ＮＯ）、削除部３３０は、集合Ｅから未処理のエッジを選択する（Ｓ１３１０）。選択したエッジをエッジｅとする。そして、削除部３３０は、エッジｅと両端のノードを共有するエッジを集合Ｅから検索して、検索されたエッジの集合を集合Ｅｓとする。
【００７８】
例えば、エッジｅがある第１の設計プロセスが第２の設計プロセスから受ける第１の強さの制約を示す場合において、このエッジと同じ向きのエッジ、即ち第１の設計プロセスが第２の設計プロセスから受ける他の制約を示す他のエッジが、集合Ｅｓの要素として選択される。また、エッジｅと逆向きのエッジ、即ち第２の設計プロセスが第１の設計プロセスから受ける制約を示す他のエッジについても、集合Ｅｓの要素として選択される。また、集合Ｅｓにはエッジｅ自体も含められる。
【００７９】
次に、削除部３３０は、集合Ｅｓの要素がエッジｅのみであるか判断する（Ｓ１３３０）。集合Ｅｓの要素がエッジｅのみである場合に（Ｓ１３３０：ＹＥＳ）、削除部３３０は、Ｓ１３００に処理を戻して、集合Ｅに含まれる他のエッジｅについて処理を繰り返す。
【００８０】
集合Ｅｓの要素がエッジｅのみではない場合に（Ｓ１３３０：ＮＯ）、削除部３３０は、集合Ｅｓを２つの集合Ｅｓ１およびＥｓ２に分類する（Ｓ１３４０）。集合Ｅｓ１は、エッジｅと同じ向きのエッジを示し、集合Ｅｓ２は、エッジｅと逆向きのエッジを示す。
【００８１】
また、削除部３３０は、集合Ｅｓ１に含まれるエッジの重み、つまり制約の強さの合計を計算する。制約の強さの合計とは、例えば本実施形態においては、手戻りの所要時間の合計であってよい。その合計値をｗ１とする。
【００８２】
同様に、削除部３３０は、集合Ｅｓ２に含まれるエッジの重み、つまり制約の強さの合計を計算する。制約の強さの合計とは、例えば本実施形態においては、手戻りの所要時間の合計であってよい。その合計値をｗ２とする。
【００８３】
次に、削除部３３０は、合計値ｗ１を合計値ｗ２と比較する（Ｓ１３５０）。合計値ｗ１が合計値ｗ２より大きい場合に（Ｓ１３５０：ＹＥＳ）、削除部３３０は、集合Ｅから集合Ｅｓを削除する。そして、集合Ｅｓに含まれる各エッジを、合計値ｗ１から合計値ｗ２を減じた差分の大きさを重みとする新たなエッジｅｎｅｗに置換する。
【００８４】
エッジｅｎｅｗには、新たな通し番号（例えば既に使用されている通し番号の最大値よりも大きい値）が付与される。エッジｅｎｅｗは、エッジｅと同じ向きのエッジである。即ち、エッジｅｎｅｗはエッジｅの元のノードからエッジｅの先のノードに至るエッジである。
【００８５】
また、後に複製データと元の制約データとの対応関係を認識し易くするために、この置換の処理による置換前のエッジおよび置換後のエッジを対応付けるための処理を行うことが望ましい。具体的には、削除部３３０は、集合を表す変数Ｅｏｗｎ１（ｅｎｅｗ）に、Ｅｏｗｎ１（Ｅｓ１）およびＥｏｗｎ２（Ｅｓ２）の和集合を代入する。また、削除部３３０は、集合を表す変数Ｅｏｗｎ２（ｅｎｅｗ）に、Ｅｏｗｎ２（Ｅｓ１）およびＥｏｗｎ１（Ｅｓ２）の和集合を代入する。
【００８６】
ここで、Ｅｏｗｎ１（Ｅｓ１）は、集合Ｅｓ１に含まれる各エッジについての変数Ｅｏｗｎ１の和集合を示し、Ｅｏｗｎ２（Ｅｓ２）は、集合Ｅｓ２に含まれる各エッジについての変数Ｅｏｗｎ２の和集合を示す。また、Ｅｏｗｎ２（Ｅｓ１）は、集合Ｅｓ１に含まれる各エッジについての変数Ｅｏｗｎ２の和集合を示し、Ｅｏｗｎ１（Ｅｓ２）は、集合Ｅｓ２に含まれる各エッジについての変数Ｅｏｗｎ１の和集合を示す。
【００８７】
一方、合計値ｗ１が合計値ｗ２より小さい場合に（Ｓ１３５０：ＮＯ）、削除部３３０は、集合Ｅから集合Ｅｓを削除する。そして、集合Ｅｓに含まれる各エッジを、合計値ｗ２から合計値ｗ１を減じた差分の大きさを重みとする新たなエッジｅｎｅｗに置換する。即ち、エッジｅｎｅｗはエッジｅの先のノードからエッジｅの元のノードに至るエッジである。
【００８８】
また、削除部３３０は、集合を表す変数Ｅｏｗｎ１（ｅｎｅｗ）に、Ｅｏｗｎ１（Ｅｓ２）およびＥｏｗｎ２（Ｅｓ１）の和集合を代入する。また、削除部３３０は、集合を表す変数Ｅｏｗｎ２（ｅｎｅｗ）に、Ｅｏｗｎ２（Ｅｓ２）およびＥｏｗｎ１（Ｅｓ１）の和集合を代入する。以上の処理が完了すると、削除部３３０はＳ１３００に処理を戻して次のエッジについて処理を繰り返す。
【００８９】
図１３ｂは、図１０のＳ１０３０により制約関係が除去されるグラフの一例を示す。設計プロセスｗ１は、本発明に係る第１の設計プロセスの一例であり、設計プロセスｗ２は、本発明に係る第２の設計プロセスの一例である。また、設計プロセスｗ１は設計プロセスｗ２から、第１の強さの一例である所要時間が３単位時間の、制約を受ける。また、設計プロセスｗ２は設計プロセスｗ１から、第２の強さの一例である所要時間が７単位時間の、制約を受ける。
【００９０】
ここでは、第１の強さよりも第２の強さが強いので、もとのこれらの制約は、設計プロセスｗ２が設計プロセスｗ１から受ける、第１および第２の強さの差分の強さの制約によって置換される。この結果、設計プロセスｗ１は設計プロセスｗ２から、所要時間が５単位時間である制約を受ける。
【００９１】
図１０の説明に戻る。次に、削除部３３０は、第１から第３の削除処理によって、制約グラフが変化したか、即ち置換または削除されたエッジまたはノードが存在したかどうかを判断する（Ｓ１０４０）。そのようなエッジまたはノードが存在した場合には（Ｓ１０４０：ＹＥＳ）、削除部３３０は、Ｓ１０１０に処理を戻して、削除または置換することのできる設計プロセスがなくなるまで複製データに対し同様の処理を繰り返す。
【００９２】
一方、削除または置換することのできる設計プロセスがなくなると（Ｓ１０４０：ＮＯ）、対応制約選択部３４０は、複製データのうち、除外すると循環を解消することのできる、制約の強さの合計が最小の制約の組を選択する（Ｓ１０５０）。この制約の組の選択には、例えば、既に述べた全数探索などの手法を利用できる。そのよう手法を利用しても、各種置換・削除処理の後の複製データは、もとの制約データと比較して極めて規模が小さいので、現実的な計算時間で処理が完了する。
【００９３】
これに代えて、対応制約選択部３４０は、動的計画法などの各種の手法により、制約の強さの合計が最小の制約の組を選択してもよい。さらには、対応制約選択部３４０は、必ずしも論理的に最小でなくとも、制約の強さの合計を近似的に最小化できれば、他の手法により制約の組を選択してよい。
そして、対応制約選択部３４０は、選択した制約の組に含まれるそれぞれの制約に対応する上記Ｅｏｎｗ１によって表される集合を、もとの制約データにおいて除外するべき制約の集合として選択する。
【００９４】
但し、削除部３３０による各種削除処理によって、複製データ上では既に循環が解消されている場合がある。例えば、各種削除処理によって、複製データは２つのノードおよびそれらのノードを接続する１つのエッジのみを含む場合がある。この場合においては、対応制約選択部３４０は、当該各種削除処理によって削除されてきた制約の集合を、もとの制約データにおいて除外するべき制約の集合として選択する。例えば、複製データが１つのエッジのみを含む場合において、対応制約選択部３４０は、そのエッジに対応する上記Ｅｏｗｎ２によって表される集合を、元の制約データにおいて除外するべき制約の集合として選択する。
なお、何れの場合においても除外するべき制約は、必ず満たすべき制約ではなく、満たさないと手戻りが発生する制約の中から選択される。
【００９５】
図４の説明に戻る。次に、出力部３５０は、選択部３２０により選択された制約の組を、制約データから除外する（Ｓ４４０）。そして、出力部３５０は、制約の組を除外した当該制約データを、例えば表示部に表示することにより、利用者に対し出力する（Ｓ４５０）。その一例を図１４に示す。
【００９６】
図１４は、本実施形態に係る出力部３５０により出力される制約グラフの一例を示す。図２ｂに示す制約グラフと比較して一部の制約が削除されている。具体的には、設計プロセスｗ２が設計プロセスｗ８から受ける制約、および、設計プロセスｗ５が設計プロセスｗ７から受ける制約が削除されている。この結果、設計プロセスの間の制約関係の循環が解消するので、利用者は、何れの設計プロセスを先に処理するべきかを容易に認識できる。
【００９７】
また、利用者の利便性向上のため、出力部３５０は、この制約グラフを以下の２つの例のように表示してもよい。
（１）処理可能なプロセスの表示
開発の各段階において、入力部３００は、既に終了した設計プロセスの入力を受け付ける。例えば、設計プロセスｗ１、ｗ２およびｗ３が既に終了した旨の入力を受け付けてよい。すると、出力部３５０は、制約データが示す制約において既に終了した当該設計プロセスの制約を受け、まだ終了していない設計プロセスの制約は受けない設計プロセスを選択する。
【００９８】
この例では、設計プロセスｗ２は、既に終了した設計プロセスｗ１の制約を受けるが、他の何れの設計プロセスの制約も受けていない。このため、設計プロセスｗ２は出力部３５０により選択される。また、設計プロセスｗ５は、既に終了した設計プロセスｗ３の制約を受けるが、他の何れの設計プロセスの制約も受けていない。このため、設計プロセスｗ５は出力部３５０により選択される。
【００９９】
一方で、設計プロセスｗ６は、既に終了した設計プロセスｗ２の制約を受けるが、まだ終了していない設計プロセスｗ５の制約も受けている。従って、設計プロセスｗ６は出力部３５０により選択されない。同じように、設計プロセスｗ９は、既に終了した設計プロセスｗ３の制約を受けるが、まだ終了していない設計プロセスｗ５の制約も受けている。設計プロセスｗ９は出力部３５０により選択されない。
【０１００】
そして、出力部３５０は、選択したそれぞれの設計プロセスを、他の設計プロセスとは識別可能に表示する。例えば、出力部３５０は、設計プロセスｗ２およびｗ５を示すノードを、他の設計プロセスとは異なる色で着色して表示してよい。また、出力部３５０は、設計プロセスｗ２およびｗ５を示すノードを点滅表示してもよいし、他の設計プロセスを示すノードより大きなサイズで表示してもよい。
これにより、利用者は、次に取り掛かると効率がよい設計プロセスを正確に認識することができる。
【０１０１】
（２）違反する制約の表示
（１）の例と同様に、開発の各段階において、入力部３００は、既に終了した設計プロセスの入力を受け付ける。例えば、設計プロセスｗ１、ｗ６およびｗ３が既に終了した旨の入力を受け付けてよい。すると、出力部３５０は、制約データが示す制約において既に終了した当該設計プロセスがまだ終了していない設計プロセスの制約を受けるかどうかを判断する。
【０１０２】
出力部３５０は、既に終了した当該設計プロセスがまだ終了していない設計プロセスの制約を受けるかどうかを判断する。例えば、既に終了した設計プロセスｗ６が、まだ終了していない設計プロセスｗ２の制約を受けている。このため、出力部３５０は、このような制約を、他の制約とは識別可能な形態で表示する。例えば、出力部３５０は、このような制約を、他の制約とは異なる色彩で表示してもよいし、例えば矢印を太線にする等、異なる形態で表示してもよい。
【０１０３】
図１５は、本実施形態に係るコンピュータ１００のハードウェア構成の一例を示す。コンピュータ１００は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。
【０１０４】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【０１０５】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、上記通信インターフェイス１０２の一例であり、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、上記記憶装置１０４の一例であり、コンピュータ１００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又はハードディスクドライブ１０４０に提供する。
【０１０６】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、コンピュータ１００の起動時にＣＰＵ１０００が実行するブートプログラムや、コンピュータ１００のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０またはハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【０１０７】
コンピュータ１００に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出されコンピュータ１００にインストールされて実行される。プログラムがコンピュータ１００等に働きかけて行わせる動作は、図１から図１４において説明した支援システム１０６における動作と同一であるから、説明を省略する。
【０１０８】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１００に提供してもよい。
【０１０９】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【０１１０】
【図１】図１は、本実施形態に係るコンピュータ１００の概要を示す。
【図２ａ】図２ａは、本実施形態に係る記憶装置１０４のデータ構造の一例を示す。
【図２ｂ】図２ｂは、本実施形態に係る制約データを表すグラフの一例を示す。
【図３】図３は、本実施形態に係る支援システム１０６の機能構成を示す。
【図４】図４は、本実施形態に係る記憶装置１０４により制約データが加工されて出力される処理の流れを示す。
【図５】図５は、不要または冗長な制約を含む制約グラフの第１例を示す。
【図６】図６は、不要または冗長な制約を含む制約グラフの第２例を示す。
【図７】図７は、不要または冗長な制約を含む制約グラフの第３例を示す。
【図８】図８は、図４のＳ４２０における処理の流れの詳細を示す。
【図９】図９は、図８のＳ８４０における処理の流れの詳細を示す。
【図１０】図１０は、図４のＳ４３０における処理の流れの詳細を示す。
【図１１ａ】図１１ａは、図１０のＳ１０１０における処理の流れの詳細を示す。
【図１１ｂ】図１１ｂは、図１０のＳ１０１０により制約関係が除去されるグラフの一例を示す。
【図１２ａ】図１２ａは、図１０のＳ１０２０における処理の流れの詳細を示す。
【図１２ｂ】図１２ｂは、図１０のＳ１０２０により制約関係が除去されるグラフの一例を示す。
【図１３ａ】図１３ａは、図１０のＳ１０３０における処理の流れの詳細を示す。
【図１３ｂ】図１３ｂは、図１０のＳ１０３０により制約関係が除去されるグラフの一例を示す。
【図１４】図１４は、本実施形態に係る出力部３５０により出力される制約グラフの一例を示す。
【図１５】図１５は、本実施形態に係るコンピュータ１００のハードウェア構成の一例を示す。
【符号の説明】
【０１１１】
１００  コンピュータ
１０２  通信インターフェイス
１０４  記憶装置
１０６  支援システム
３００  入力部
３１０  検出部
３２０  選択部
３２５  複製部
３３０  削除部
３４０  対応制約選択部
３５０  出力部
【図１】
0005142132.tif 000002
【図２ａ】
0005142132.tif 000003
【図２ｂ】
0005142132.tif 000004
【図３】
0005142132.tif 000005
【図４】
0005142132.tif 000006
【図５】
0005142132.tif 000007
【図６】
0005142132.tif 000008
【図７】
0005142132.tif 000009
【図８】
0005142132.tif 000010
【図９】
0005142132.tif 000011
【図１０】
0005142132.tif 000012
【図１１ａ】
0005142132.tif 000013
【図１１ｂ】
0005142132.tif 000014
【図１２ａ】
0005142132.tif 000015
【図１２ｂ】
0005142132.tif 000016
【図１３ａ】
0005142132.tif 000017
【図１３ｂ】
0005142132.tif 000018
【図１４】
0005142132.tif 000019
【図１５】
0005142132.tif 000020