(57)【要約】複合製品はいくつかの部品で構成され、各部品は他の部品に依存している可能性がある。こうした相互依存の結果、１つの部品を選択すると、他の部品が最終的な製品に含まれることを妨げる可能性もある。整合された構成は、全ての相互依存関係が満たされた部品選択である。計算機で支援された構成のためのコンピュータプログラムは、エンドユーザが整合された製品をもたらす選定を行う際の手助けとなる。本発明の好適な実施形態である仮想作表は、効率的かつ正確な構成プログラムの構築を見込んで多数の部品間の相互依存関係を追跡し続ける方法である。このようなプログラムにより、ネットワーク（例えばインターネット）上での対話式の構成が可能になる。スマート探索と呼ばれる本発明の他の態様は、部品間の相互依存関係にてなるセットを製品データベースから計算できるようにする。
2004523026.tif 000002
【特許請求の範囲】
【請求項１】
多数の構成要素を備えた製品の構成方法であって、
・各構成要素に対して、上記構成要素に対する複数の選択肢にてなるグループに関連した情報を提供することと、
・異なる複数の構成要素からの複数の選択肢間の互換性に関するルールを定義することと、
・上記ルールを有向非循環グラフ（ＤＡＧ）に表現することとを含み、
・−構成要素を選定することと、
−この構成要素に対する複数の選択肢にてなるグループから１つの選択肢を選択することと、
−上記選択された選択肢が他の構成要素からの他の選定された選択肢との互換性を有するか否かについてＤＡＧをチェックすることと
を繰り返すことにより、上記製品を反復的に構成することを含む方法。
【請求項２】
上記反復的に構成することは、各構成要素について１つの選択肢が選定された時点であって、かつ上記複数の構成要素に係る選定された複数の選択肢が互換性を有する時点において終了される請求項１記載の製品の構成方法。
【請求項３】
上記選択肢を選択するステップは、上記選択肢の選択以前に、
・上記ＤＡＧを使用して、上記構成要素のうちの少なくとも１つの構成要素について、上記構成要素に対する選択肢にてなるサブセットを、上記サブセットにおける選択肢の各々が他の構成要素からの選定された選択肢との互換性を有するように決定することと、
・この情報をユーザに提供することとを含む請求項１乃至２のうちのいずれかの請求項に記載の製品の構成方法。
【請求項４】
上記方法は音声合成器を有するシステムを提供することをさらに含み、上記ユーザに情報を提供することはさらに、
・上記音声合成器によって発生される音声によって上記情報を提供することを含む請求項３記載の製品の構成方法。
【請求項５】
上記構成要素と選択肢とを選定するステップはさらに、上記構成要素の各々について、
・上記ＤＡＧを使用して、上記構成要素のどの選択肢が他の構成要素の各々の少なくとも１つの選定された選択肢との互換性を有するかをチェックすることと、
・ユーザにこの情報を提供することと、
・上記ユーザが、上記他の構成要素の各々に対する選定された選択肢のうちの少なくとも１つとの互換性を備えた選択肢のうちの１つを選択できるようにすることとを含む請求項１乃至４のうちのいずれかの請求項に記載の製品の構成方法。
【請求項６】
上記選択肢を選択するステップと、上記ＤＡＧをチェックするステップとはさらに、
・上記選定された構成要素に対する選択肢のうちのサブグループを選択するか又は定義するステップと、
・上記サブグループにおけるどの選択肢が他の構成要素からの選定された選択肢との互換性を有するかについて上記ＤＡＧをチェックするステップと、
・上記サブグループにおけるどの選択肢が他の構成要素の選定された選択肢との互換性を有するかに関する情報を提供するステップとを含む請求項１乃至５のうちのいずれかの請求項に記載の方法。
【請求項７】
上記反復的な構成はさらに、
・少なくとも一度、上記構成要素のうちの少なくとも１つの構成要素の選択肢を制限することに関連した情報を定義することと、
・上記構成要素のどの選択肢が上記制限する情報と整合するかについて上記ＤＡＧをチェックすることとを含む請求項１乃至６のうちのいずれかの請求項に記載の製品の構成方法。
【請求項８】
上記反復的な構成はユーザからの要求があった時点で終了され、選択肢が選定される製品の各々について少なくとも１つの選定された選択肢を含む全ての可能な互換性を有する製品に関する情報が提供され、この情報はユーザに提供される請求項１乃至７記載の製品の構成方法。
【請求項９】
上記反復的な構成は、選択肢が選定される製品の各々について少なくとも１つの選定された選択肢を含む全ての可能な互換性を有する製品の個数を取得するステップと、この情報をユーザに提供するステップとを含む請求項１乃至８のうちのいずれかの請求項に記載の製品の構成方法。
【請求項１０】
上記ルールを上記ＤＡＧにおいて表現するステップは、上記ルールを、
・少なくとも１つの終端ノードと、
・−複数の可能な互いに素な結果を有する数式、及び、
−上記式の可能な結果の個数に対応する多数のポインタを備えた複数のノードとを備えたグラフにおいて表現することを含み、
・上記ノードのうちの少なくとも１つのノードのポインタは他のノードを示し、
・上記ノードのうちの少なくとも１つのノードのポインタは少なくとも１つの終端ノードのうちの１つを示し、
・上記ノードのうちの少なくとも１つのノードは最上位置のノードであり、１つ又は複数のパスはこの最上位置のノードから上記少なくとも１つの終端ノードのうちの１つへ上記ノードのうちの１つ又は複数のノードとそのポインタとを介して画成され、各ノードは少なくとも１つのパスの一部である先行するいずれかの請求項に記載の方法。
【請求項１１】
上記ルールを上記ＤＡＧにおいて表現するステップは、上記ノードのうちの１つ又は複数のノードに、１つの数学的演算子をそれぞれ備えた数式を提供することを含み、各演算子は、関連するノードの複数のポインタによって示された複数のノードにより表現される複数のルールが組み合わされた方法を記述することで、複数のルールにてなる組み合わされたセットを表現する請求項１０記載の製品の構成方法。
【請求項１２】
上記ルールを上記ＤＡＧにおいて表現するステップは、上記ルールを多数のノードを備えたＤＡＧにおいて表現することを含み、上記ノードの数式はブール式である請求項１０乃至１１のうちのいずれかの請求項に記載の製品の構成方法。
【請求項１３】
上記ルールを上記ＤＡＧにおいて表現するステップは、変数である数式をそれぞれ備えた多数のノードを備えたＤＡＧにおいて、上記ルールを表現することを含む請求項１０乃至１２のうちのいずれかの請求項に記載の製品の構成方法。
【請求項１４】
上記ルールを上記ＤＡＧにおいて表現するステップは、複数のノードを備えたＤＡＧにおいて上記ルールを表現することを含み、上記複数のノードの数式は、各ノードについて、実際のノードの式が上記実際のノードのポインタによって示された任意のノードの式より低位であるように所定の順序付けに従って配列される請求項１０乃至１３のうちのいずれかの請求項に記載の製品の構成方法。
【請求項１５】
上記ルールを上記ＤＡＧにおいて表現することは、さらに、
・同一の式と、同一のノードを示すそれらのポインタとを有する第１及び第２のノードを識別するステップと、
・上記第１のノードを示すポインタに上記第２のノードを示させるステップとを含む請求項１０乃至１４のうちのいずれかの請求項に記載の製品の構成方法。
【請求項１６】
上記ルールを上記ＤＡＧにおいて表現するステップは、
・各ルールを論理式として表現することと、
・各論理式から、上記式に対する可能な解にてなるセットを表現する部分的なＤＡＧを構成することと、
・上記論理式の各々を表現する上記部分的なＤＡＧから全てのルールを表現するＤＡＧを構成することとを含む請求項１０乃至１５のうちのいずれかの請求項に記載の製品の構成方法。
【請求項１７】
上記各構成要素に対する複数の選択肢に関連した情報を提供するステップは、
・上記構成要素の個別の選択肢を表現する複数のブール変数を選択することと、
・上記構成要素の選択肢の各々に関する符号化を、上記複数のブール変数のブール値の組み合わせとして提供することを含む請求項１６記載の製品の構成方法。
【請求項１８】
上記各ルールを論理公式／式として表現するステップは、上記ルールが関連する複数の選択肢に関連した複数のブール変数を提供することと、上記ルールに従って上記複数の変数を相互に関連させることとを含む請求項１７記載の方法。
【請求項１９】
上記ルールを上記ＤＡＧにおいて表現するステップは少なくとも１つのタイプの終端ノードを提供することを含み、このような終端ノードを備えた各パスについて、上記パスのポインタに関する全ての式と全ての関連した結果との組み合わせは、互換性のある製品又は互換性を持たない製品の何れかに関連する請求項１０記載の方法。
【請求項２０】
上記ルールを上記ＤＡＧにおいて表現するステップは第１及び第２のタイプの終端ノードを提供することを含み、
・上記第１のタイプの終端ノードを備えた各パスについて、上記パスのポインタに関する全ての式と全ての関連した結果との組み合わせは、互換性を有する製品に関連し、
・上記第２のタイプの終端ノードを備えた各パスについて、上記パスのポインタに関する全ての式と全ての関連した結果との組み合わせは、互換性を持たない製品に関連する請求項１９記載の製品の構成方法。
【請求項２１】
上記第１のタイプの終端ノードは“真”、“一”又は“１”を表現するように適応化され、上記第２のタイプの終端ノードは“偽”、“ゼロ”又は“０”を表現するように適応化される請求項２０記載の方法。
【請求項２２】
上記選択肢を選択するステップは、上記構成要素の他の（複数の）選択肢に関するブール変数とこのような他の（複数の）選択肢に関する式を含むノードとを識別することと、上記ＤＡＧにおいて、このようなノードを備えたパスを識別することと、その第１のタイプの任意の（複数の）終端ノードを第２のタイプの（複数の）終端ノードに変更することとを含む請求項１７と請求項２０乃至２１のうちのいずれかの請求項とに記載の方法。
【請求項２３】
異なる選定の可能な場合の個数の計算は、ＤＡＧに適用されかつ各最上位置のノードに関する下記のステップ、即ち、
・最上位置のノードから開始して、
−上記ノードが終端ノードであれば、上記終端ノードが第１のタイプのとき“１”を提供し、第２のタイプのとき“０”を提供するステップと、
−その他であれば、上記実際のノードのポインタによって示された各ノードにより表現される可能な場合の個数を発見し、そこから上記ノードによって表現される上記可能な場合の個数を計算するステップとを実行することにより、実際のノードによって表現される可能な場合の個数を反復的に発見するステップによって実行される請求項９及び請求項２０記載の製品の構成方法。
【請求項２４】
上記ＤＡＧをチェックするステップはさらに、上記選択された選択肢が他の選定された選択肢との互換性を持たなければ、
・上記選択された選択肢との互換性を持たない他の選定された選択肢に関連した情報を提供することと、
・この情報をユーザに提供することを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項２５】
上記ルールを定義するステップは、
・データベースに質問することにより、１つ又は複数の構成要素に関する選択肢に関連する情報及び／又は異なる構成要素の２つ以上の選択肢間の互換性に関連する情報を取得することと、
・上記データベースから取得された情報から１つ又は複数のルールを構築することとを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項２６】
上記データベースは、各構成要素からの１つの選択肢をそれぞれ含む製品に関する情報をその複数の行の各々に有する２次元テーブルを備え、上記複数の選択肢は互換的であり、上記ルールを提供するステップは各行の情報に関するルールを提供することを含み、上記ルールを上記ＤＡＧにおいて表現するステップは排反したルールを提供することを含む請求項２５記載の製品の構成方法。
【請求項２７】
上記選択肢が互換的であるか否かについて上記ＤＡＧをチェックするステップは、最上位置のノードから終端ノードまでのパスに関して上記ＤＡＧを検索することを含み、上記検索は、
・実際のノードとして最上位置のノードから開始することと、
・上記実際のノードが終端ノードになるまで、
−上記実際のノードにおける数式を評価して、その結果を他の構成要素から選定された選択肢に照らして決定し、
−上記結果を表現するノードのポインタを選択し、
−上記選択されたポインタによって示されるノードを実際のノードとして選択することを反復することと、
・上記選定された選択肢に関する情報を提供することと、
・上記パスに関する情報は上記選定が互換的であることを表現することとを含む請求項１０記載の製品の構成方法。
【請求項２８】
情報は、上記パスのノードの式から、所定の構成要素のどの（複数の）選択肢が選定されているかに関する情報を提供することによって上記ＤＡＧにおけるパスから提供され、これらの選択肢を含む製品の互換性に関する情報は、上記パスの終端ノードの表現によって与えられる請求項２０記載の製品の構成方法。
【請求項２９】
上記ＤＡＧのノードの式はブール変数であり、上記終端ノードは“真”又は“偽”の何れかを表現し、パスの情報は、上記パスの（複数の）ノードの（複数の）数式における変数の恒等式とその値又は従属関係とに関連し、上記恒等式及び値／従属関係は複数の構成要素の選定された選択肢に関連し、上記選定された複数の構成要素は上記パスの終端ノードが“真”を表現すれば互換的であり、かつ上記選定された複数の構成要素は上記パスの終端ノードが“偽”を表現すれば非互換的である請求項２８記載の製品の構成方法。
【請求項３０】
上記ルールを上記ＤＡＧにおいて表現するステップは、
・実際のＤＡＧに上記ルールを表現することと、
・上記構成要素のうちで隠蔽されるべき少なくとも１つの構成要素を選択することと、
・上記実際のＤＡＧを、
−上記実際のＤＡＧにおける、上記選択された（複数の）構成要素に関連した複数の式を含む関連した複数のノードを識別し、
−これらのノードを上記実際のＤＡＧから除去し、
−これらの構成要素によって暗示された互換性が上記実際のＤＡＧによって反映されるように、上記選択された（複数の）構成要素に関連した式を含まないノードを上記実際のＤＡＧに追加することによって変更することと、
・上記実際のＤＡＧを、上記ルールを表現するＤＡＧとして提供することとを含む請求項１０記載の製品の構成方法。
【請求項３１】
上記ルールを上記ＤＡＧにおいて表現するステップは、
・上記ルールの各々に関して、上記ルールを表現する部分的なＤＡＧを構成することと、
・上記構成要素のうちで隠蔽されるべき少なくとも１つの構成要素を識別することと、
・上記識別された構成要素の順序付けを選択することと、
・最初に、ルールを表現しない実際のＤＡＧを構成し、次に、
−選択されていない最下位の構成要素を選択し、
−上記選択された構成要素に関連した式を含む部分的なＤＡＧが全て選定されるまで、
＊上記選択された構成要素に関連した式を含む部分的なＤＡＧを選定することと、
＊上記実際のＤＡＧを上記選定された部分的なＤＡＧと組み合わせて新たな実際のＤＡＧにすることとを繰り返し、
−上記実際のＤＡＧを、
＊上記実際のＤＡＧにおける、上記識別された構成要素に関連した式を含むノードを識別することと、
＊これらのノードを上記実際のＤＡＧから除去することと、
＊上記識別された構成要素によって暗示された互換性が上記実際のＤＡＧによって反映されるように、上記識別された構成要素に関連した式を含まないノードを上記実際のＤＡＧに追加することとによって変更することを反復することと、
・上記実際のＤＡＧを、選択されていない全ての部分的なＤＡＧと組み合わせることによって上記ＤＡＧを提供することとを含む請求項１０記載の製品の構成方法。
【請求項３２】
上記方法はさらに、
・ユーザを識別することと、
・上記ユーザによって制御される装置と上記反復的な構成が実行されるもう１つの装置との間の通信を行うことにより、上記ユーザにより、構成要素の選択肢を選択するステップを実行することと、
・上記ＤＡＧのチェックに関連した情報を上記ユーザに送信することとを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項３３】
上記方法はさらに、
・ユーザを識別することと、
・上記反復的な構成の前に、
−上記ユーザによって制御される装置へ上記ＤＡＧを送信し、
−上記ユーザの装置上で上記反復的な構成を実行することとを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項３４】
上記反復的な構成の間に、
・選択肢が選定されていない構成要素に対する１つ又は複数の選択肢に関連した情報を取得するステップを含み、上記１つ又は複数の選択肢の各々は選定された選択肢との互換性を有し、
・この情報をユーザに提供するステップとを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項３５】
上記方法はさらにシステムに音声認識装置を提供することを含み、上記製品を反復的に構成するステップはさらに、
・上記音声認識装置によって認識されたテキストから構成要素を選定することと、
・上記音声認識装置によって認識されたテキストによるこの構成要素に対する複数の選択肢にてなるグループから１つの選択肢を選択することを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項３６】
上記方法はさらに構成可能な装置とインターフェース装置とを識別することと、
・上記構成可能な装置に関するルールを表現するＤＡＧを記憶することと、
・上記ＤＡＧを上記構成可能な装置から上記インターフェース装置へアップロードすることと、
・上記製品を反復的に構成するステップにおいて、上記インターフェース装置上で、選択された選択肢が他の構成要素の選定された他の選択肢との互換性を有するか否かということに関して上記ＤＡＧをチェックすることを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項３７】
上記方法はさらに、上記構成可能な装置における予め決められた構成要素にてなるリストを識別することと、上記構成可能な装置におけるこれらの構成要素に対する予め決められた選択肢にてなるリストを識別することを含み、上記製品を反復的に構成するステップはさらに、
・上記インターフェース装置上で、選択された選択肢が他の構成要素の選定された他の選択肢との互換性を有しかつ上記予め決められた選択肢との互換性を有するか否かということに関して上記ＤＡＧのチェックを実行することを含む請求項３６記載の製品の構成方法。
【請求項３８】
上記方法はさらに、オブザーバ的な構成要素にてなるリスト及びオブザーバ的でない構成要素にてなるリストを識別することを含み、かつ、
・上記オブザーバ的でない構成要素用のルールをＤＡＧに表現することと、
・各オブザーバ的な構成要素について、上記ルールのサブセットを決定し、これらのルールから、上記オブザーバ的でない構成要素に対する選択肢との互換性を有する上記オブザーバ的な構成要素に対する選択肢を決定することができるようにすることと、
・各オブザーバ的な構成要素について、上記ルールのサブセットをオブザーバ的ＤＡＧとして表現することと、
・上記製品を反復的に構成するステップにおいて、
−選択された選択肢が他の構成要素の選定された他の選択肢との互換性を有するか否かということに関して上記ＤＡＧをチェックし、
−各構成要素について、選定された全ての選択肢との互換性を有する選択肢は１つのみであるか否かを決定することにより、システムによって決定された選択肢にてなるセットを決定し、
−少なくとも１つのオブザーバ的な構成要素について、上記オブザーバ的な構成要素のオブザーバ的ＤＡＧをチェックすることで、選定された他の選択肢及び上記システムによって決定された選択肢にてなるセットとの互換性を有する選択肢は１つのみであるか否かを決定し、
−この情報をユーザに提供することを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項３９】
上記製品を反復的に構成するステップは、さらに、
・構成要素と選択肢の各対について、上記対の状態に係る分類を提供することと、
・複数の結果にてなるリストのうちの１つに、ブロックされた状態、選択可能な状態、ユーザが選択した状態、システムが選択した状態、又は強制状態を含む分類を採用することと、
・他の構成要素に対する選択肢の選定を考慮するまでもなく、上記構成要素に上記選択肢を選定することができない場合は、ブロックされた状態の分類を提供することと、
・上記構成要素に対する選択肢が他の構成要素の選定された選択肢との互換性を有する場合は、選択可能な状態の分類を提供することと、
・上記構成要素に上記選択肢が既に選定されている場合は、ユーザが選択した状態の分類を提供することと、
・上記選択肢が、他の構成要素の選定された選択肢との互換性を有する上記構成要素にとって唯一の選択肢であり、かつ上記選択肢がユーザによってまだ選択されていない場合は、システムが選択した状態の分類を提供することと、
・上記構成要素に上記選択肢を選定可能であるが、これが他の構成要素の選定された他の選択肢の幾つかとの互換性を持たない場合は、強制状態の分類を提供することと、
・上記分類に関する情報をユーザに提供することを含む先行するいずれかの請求項に記載の製品の構成方法。
【請求項４０】
コンピュータ上で実行されると、先行するいずれかの請求項に記載の方法に係る全てのステップを実行するように適応化されたコンピュータプログラムコード手段を備えたコンピュータプログラム。
【請求項４１】
コンピュータが読み取り可能な媒体上に具現された請求項４０記載のコンピュータプログラム。
【請求項４２】
請求項４０記載のコンピュータプログラムを備えたコンピュータが読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、幾つかの部品で構成される製品を構成するタスクに関する。複数の部品は相互依存性を有し、その結果、動作する製品を構築するための部品の選択に関して、所定の必要条件が存在する。一般に、複数の部品にてなる集合物が一体となって動作するか否かを決定する処理は複雑なタスクであり、このタスクを解決することを補助するためにコンピュータプログラムがしばしば使用される。このようなコンピュータプログラムは、相互依存性をもって、効率的でしかも精密な方法で動作するものでなければならない。本発明は、このようなコンピュータプログラムが実装されうる方法に関する。
【０００２】
本発明は、計算機で支援された製品構成（computer assisted product configuration）を実行する方法に関する。
【背景技術】
【０００３】
複合製品（complex product）は、幾つかの構成要素（components）で構成される。複合製品の製品モデルは、その製品を幾つかの汎用の「構成要素」で構成されたものとして捉えることにより作成される場合が多い。これらの構成要素には各々、複数の特定の「選択肢」にてなるグループが存在する。
【０００４】
自転車の製品モデルの一例を挙げると、自転車は下記の構成要素、即ち、フレームと、前輪と、後輪と、ギヤセットとから組み立てられる。フレーム構成要素には、下記の選択肢、即ち、カーボンの男性用と、標準型の女性用と、標準型の男性用と、オフロードとが存在する。前輪構成要素には、スリックと、オフロードとが存在する。後輪構成要素には、スリックと、オフロードとが存在する。最後にギヤ構成要素には、内装３速と、外装１０速とが存在する。
【０００５】
構成のコンテキストにおいて、“構成要素”という用語は、物理的な構成要素の総称的説明としてのみ理解されるべきではない。これは、色と形状や、ギヤ数及び馬力等のパラメータといった属性でもあり得る。構成要素はまた、製品の特性ではなく、自転車のタイプ（オフロード、シティサイクル、過酷な作業に使用するための自転車（heavy duty bike）など）、ユーザの好み（ファッショナブル、クラシック、子供っぽい）、又は価格や重量、もしくは製品のユーザにとって興味のある同様の特性のような、構成装置（コンフィギュレータ）のユーザからのニーズを表す“必要属性”として理解される場合もある。
【０００６】
複合製品を組み立てるためには、構成要素の各々について特定の選択肢が選択される必要がある。「選択」の個数は、製品の「部分構成」と呼ばれる。各構成要素の選択肢の完全な選択は、製品の「完全構成（又は単に構成）」と呼ばれる。
【０００７】
製品の可能な構成の個数は、製品を構成する構成要素の個数が増えるとともに急激に増大する。例えば、上記例の自転車を構成するためには、４つのフレーム、２つの前輪、２つの後輪及び２つのギヤの中から選択する必要がある。従って、この場合は４×２×２×２＝３２個の異なる構成が存在する。実際の例では、この個数はすぐ何百万以上にも増大する。
【０００８】
非互換性などに起因して、選択肢の組み合わせの全てが機能するわけではない。上述の自転車の例について考えると、これは、前輪と後輪が同じタイプでなければならない場合かもしれない。もう１つの必要条件として、カーボンの男性用フレームのみが外装１０速ギヤを可能にするフレームであるという可能性がある。各選択肢間のこれらの非互換性の記述（descriptions）は、製品必要条件と呼ばれる。製品必要条件は、各構成要素間の互換性を定義するルールとして表される場合が多い。全ての必要条件が満たされるときに、構成は「整合されている（consistent）」と呼ばれる。上述の自転車の例の場合、３２個の可能性のうちで、１０種類の異なる整合された構成（内装３速ギヤを備えた８個の構成、外装１０速ギヤを備えた２個の構成）が存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
一般に、上記必要条件は複雑であって人による概観が困難である可能性があり、整合された構成を決定することは複雑なタスクである。構成の間はコンピュータプログラムが大きな手助けとなる可能性があり、当該コンピュータプログラムは、一般にユーザの選択をルールに照らしてチェックことによって動作する。チェックすることに非現実的なほど長時間かかりうるか、もしくはチェックの結果が不正確になりうるかのいずれかであって、このチェックは一般に実行が困難である。ルールの取扱い方法には、少なくとも下記の異なる２つがある。
【００１０】
明示的列挙：この方法は、典型的には複数のビットベクトルを使用して、可能性のある全ての整合された構成を表現する。可能性のある全ての構成がルールに照らしてテストされ、整合されていることが判明した構成が、典型的には複数のビットベクトルのハッシュテーブルを使用してリストに列挙される。このアプローチによる１つの重要な制約事項は、利用可能な構成要素の個数が増えるときに構成の個数が急速に増大する（典型的には、構成の個数は構成要素の個数に対して指数関数的に増大する）ことにある。このことは、必要とされるメモリ量が極端に大きいことを意味し、当該方法は大きな製品モデルには適用できない。もう１つの問題点は、構成の個数が少なくメモリに十分に保持できる場合であっても、アルゴリズムは可能性のある各構成を独立に探索（traverse）しかつ処理する必要があり、構成の個数に対して線形な実行時間をもたらすということにある。
【００１１】
ルール／拘束条件の伝搬：構成の選択が実行されると、整合性をチェックするためにルールデータベースが検索される。検索時間は予測不可能であり、ゆえに、ユーザへのタイムリーな応答を保証するために、許容される時間消費量に対して制限が課される場合が多い。この時間制限を守るために、検索は、完全かつ正確な結果を知ることなく、早まって終了されなければならないことが多い。検索は、決定された複数の選択に対してルールベース（rule base）からのルールを反復して適用することによる、情報の蓄積に基づいている。これは、コストが非常に高くなる場合が多い。さらに、検索時間と、従って検索の品質とは、そのルールが正確にはどのように定式化されているかということに大きく依存する。
【００１２】
現状における当該技術のツールは、上述の２つの技術を適用している。これらは販売補助（sales assistant）ツールとして開発され、現在ではインターネットに適応化されている。インターネット上には、情報の不正確さ及び欠如を補償するために利用可能な人間としての販売補助員は存在しない。ユーザは、販売過程の全体を自分自身で実行することになるが、このことは販売システムの品質に厳しい要求を課す。システムは、速い応答時間を有することと、しかも結果が正確であることを保証することとを必要がある。例えば、ユーザが、ユーザの以前の選択に整合しない（即ち、ルールのうちのいくつかを侵害した状態になる）選択肢を選択させられることは「決して」あってはならない。
【００１３】
現状における当該技術のツールは、（複雑な製品を取り扱い、かつシステムが多数の同時発生的ユーザを処理できるようにする上で）正確な結果を取得し、同時に望ましい応答時間を保証することが困難である。
【００１４】
多数の特許が製品構成に関連している。
【００１５】
米国特許第６，１１５，５４７号の明細書は、以前の構成をキャッシュメモリに記憶する特殊な方法を含む製品構成であって、構成プログラムの性能を改善させるものを開示している。
【００１６】
米国特許第５，６７５，７８４号の明細書は、製品をモデリングすることに使用されるデータ構造（“３層の階層的なデータ構造”）を含む製品構成を開示している。
【００１７】
欧州特許出願公告第０７７０２３９Ｂ１号の明細書は、エキスパートシステムを備えた製品構成を開示している。この構成方法は、ルール／拘束条件の伝搬に関連している。
【００１８】
米国特許第５，２０６，９４９号の明細書は、データベース探索及び検索システムを備えた製品構成を開示している。
【００１９】
米国特許第５，８４４，５５４号の明細書は、製品モデルを設計するためのグラフィカルユーザインターフェースの方法を含む製品構成を開示している。
【００２０】
米国特許第５，９８７，４７３号の明細書は、ネットワークを介する対話型の構成を実行する方法を含む製品構成を開示している。
【００２１】
米国特許第５，９９５，９７９号の明細書は、ユーザがネットワーク上でデータベースにおけるエントリを選択できるようにする方法を含む製品構成を開示している。
【００２２】
米国特許第５，９９６，１１４号の明細書は、可能性のある多くの構成を取り扱う方法を含む製品構成を開示している。この構成方法は、明示的列挙に関連している。
【００２３】
米国特許第５，７４５，７６５号の明細書は、ユーザが整合された構成を選択できるようにする方法を含む製品構成を開示している。
【００２４】
本願明細書に記載された発明は、ハードウェア回路の形式的検証で知られる「シンボルモデルチェック」という既知の技術を適用して、計算機支援構成のためのプログラムを開発することに固有の計算上の課題を解決する。シンボルモデル検査は、［ケー．エル．マクミラン（K. L. McMillan）の、シンボルモデル検査：状態爆発問題へのアプローチ（Symbolic Model Checking: An Approach to the State Explosion Problem）］に記載されている。
【課題を解決するための手段】
【００２５】
従って、第１の態様において、本発明は、多数の構成要素を備えた製品を構成する方法に関し、上記方法は、
・各構成要素に対して、上記構成要素に対する複数の選択肢にてなるグループに関連した情報を提供することと、
・異なる複数の構成要素からの複数の選択肢間の互換性に関連したルールを定義することと、
・有向非循環グラフ（ＤＡＧ）に上記ルールを表現することとを含み、
・−１つの構成要素を選定することと、
−この構成要素の複数の選択肢にてなるグループから１つの選択肢を選択することと、
−選択された選択肢が他の構成要素から選定された他の選択肢との互換性を有するか否かについて上記ＤＡＧをチェックすることと
を繰り返すことによって、上記製品を反復的に構成することを含む。
【００２６】
本コンテキストにおける“構成要素”という用語は、物理的な構成要素の総称的説明としてのみ理解されるべきではない。これは、色と形状や、ギヤ数及び馬力等のパラメータといった属性でもあり得る。構成要素はまた、製品の特性ではなく、自転車のタイプ（オフロード、シティサイクル、過酷な作業に使用するための自転車など）、ユーザの好み（ファッショナブル、クラシック、子供っぽい）、又は価格や重量、もしくは製品のユーザにとって興味のある同様の特性のような、構成装置（コンフィギュレータ）のユーザからのニーズを表す“必要属性”として理解される場合もある。
【００２７】
ルールは、例えば製品の異なる２つの構成要素からの１つの選択肢の互換性に関連することが可能である。しかしながら、ルールは、より多数の構成要素からの１つの選択肢の互換性に関連することが好ましい可能性がある。極端ではあるが決して想定不可能ではない場合において、ルールは、各構成要素からの１つの選択肢を含む製品に関連している。
【００２８】
本来、選択肢に関する情報又は複数の選択肢にてなるグループに関する情報は、その類似点又は相違点に関する情報である可能性がある。通常、この情報は、他の構成要素及び／又は複数の他の構成要素の選択肢に対する関連した情報になる。
【００２９】
ＤＡＧにルールが表現されると、もはや（通常は非常に多くの個数の）ルールをチェックする必要はない。代わりに、ＤＡＧは、選択（select）／選定（choose）された複数の選択肢に関連した情報に従って探索され、解析され、もしくは訂正さえされてもよい。この手順は、多数のルールを個別にチェックすることより格段に速く実行可能である。
【００３０】
本コンテキストにおいて、選択肢は、これが“選択”されて、構成されるようとしている組み立てられる製品の一部であることがわかると、即ち選択された選択肢が少なくとも１つの選定された選択肢との互換性を有することがわかると、“選定”される。
【００３１】
反復的に構成することは、各構成要素に対して１つの選択肢が選定されたときに終了されることが可能であり、好適には、選定された複数の構成要素の各選択肢が互換性のあるときに終了されることが可能である。
【００３２】
選択肢を選択する前に、構成要素のうちの少なくとも１つについて、ＤＡＧを使用して当該構成要素に対する複数の選択肢のうちのサブセットを決定することで、当該サブセットにおける選択肢の各々が他の構成要素から選定された他の選択肢に対して互換性を有するようにし、この情報をユーザに提供することが望ましい場合がある。
【００３３】
こうした状況において、ユーザは、与えられた構成要素に対する多数の選択肢との互換性−既に選定された選択肢との互換性−に関連した情報を所望し、通常はそのグループから互換性のある選択肢を選択することができる。このサブセットは、寸法、色、製造業者、製造場所などのような、ユーザの嗜好に関連してもよい。
【００３４】
ユーザへの情報がコンピュータで生成された音声として提供されれば、システムとの対話を簡単化することができる。このことは、音声合成器を有するシステムを提供することによって行われ、ユーザに情報を提供することは、
・上記音声合成器によって生成される音声によって上記情報を提供することをさらに含む。
【００３５】
それに代わって、構成要素及び選択肢を選択するステップは、上記各構成要素に関して、
・上記ＤＡＧを使用して、上記構成要素のどの選択肢が他の各構成要素（即ち、その選択肢が既に選定されているもの）の少なくとも１つの選定された選択肢に対して互換性を持つかをチェックすることと、
・ユーザにこの情報を提供することと、
・他の構成要素の選定された個々の選択肢のうちの少なくとも１つとの互換性を有した選択肢のうちの１つを、上記ユーザが選択できるようにすることとをさらに含んでもよい。
【００３６】
従って、この方法では、構成要素に対する全ての選択肢の、既に選定された選択肢との互換性に関連した情報が提供されることで、ユーザは製品の構成を迅速に進めていくことができる。
【００３７】
しかしながら、それに代わって、もしくはそれに加えて、選択肢を選択するステップ及びＤＡＧをチェックするステップは、
・選定された構成要素に対する選択肢のうちのサブグループを選択するか又は定義するステップと、
・上記サブグループ内の選択肢のうちのどれが、他の構成要素から選定された選択肢との互換性を有するかということに関して、上記ＤＡＧをチェックするステップと、
・上記サブグループ内の選択肢のうちのどれが他の構成要素の選定された選択肢との互換性を有するかということに関する情報を提供するステップとをさらに含むことが望ましい場合がある。
【００３８】
このことが好都合となりうる１つの状況は、ユーザが特定の選択肢に関する決断を未だ下していないが、他の構成要素の選定された選択肢との互換性がチェックされた選択肢のうちのサブグループを彼が提示しているという状況である。この情報は、構成の間にユーザをさらにガイドするために使用可能である。
【００３９】
有益となりうるもう１つのアプローチは、
・少なくとも一度、少なくとも１つの上記構成要素の選択肢を制限することに関連した情報を定義することと、
・上記構成要素のどの選択肢が上記制限する情報に整合するかということに関して上記ＤＡＧをチェックすることである。
【００４０】
この制限する情報はユーザによって提供されることが可能であり、構成要素のどの選択肢が上記制限する情報に整合するかということに関する情報は、ユーザに提供されることが可能である。
【００４１】
このような制限する情報は、ユーザによって所望された異なる複数のグループからの選択肢間の互換性に関連した情報であってもよい。
【００４２】
反復的に構成することはまた、ユーザからの要求を受けて、通常は、そこに、各構成要素に対する選択肢が選定／選択されていない時点で、又は選択／選定された選択肢が完全な互換性を持たない時点で終了されることが可能である。次に、選択肢が既に選定されている製品の各々について、少なくとも１つの選定された選択肢を含む、互換性を有するすべての可能な製品に関連した情報が提供されてもよく、この情報はユーザに提供されてもよい。
【００４３】
こうして、ユーザは構成を終了することが可能であり、次いで、選定された選択肢を含む、利用可能な、互換性を有する製品の総数について通知されることが可能である。
【００４４】
また、反復的に構成することは、選択肢が選定されている製品の各々について、少なくとも１つの選定された選択肢を含む、互換性のある、すべての可能な製品の個数を取得し、かつこの情報をユーザに提供するステップを含んでもよい。この方法では、ユーザは、選定された選択肢を含む利用可能な製品の個数について常時通知されることが可能である。ユーザは、与えられた１つの構成要素に対して、実際には１つよりも多くの選択肢を選択又は選定できるという点は注意される必要がある。この状況においては、互換性のチェックはこのような選択肢の各々に関するチェックとなり、潜在的な最終製品の総数はこれらの選択肢のうちの１つを備えた潜在的な最終製品の総和に関連する。
【００４５】
一般に、ＤＡＧに上記複数のルールを表現するステップは、グラフに上記複数のルールを表現することを含み、上記グラフは、
・少なくとも１つの終端ノードと、
・複数のノードであって、
−複数の可能な排反する結果を有する数学的な表現式（又は数式）と、
−上記式の可能な結果の個数に対応する多数のポインタとを含む複数のノードとを備え、
・上記ノードのうちの少なくとも１つのノードのポインタは、上記ノードのうちのもう１つのものを示し、
・上記ノードのうちの少なくとも１つのノードのポインタは、上記少なくとも１つの終端ノードのうちの１つを示し、
・上記ノードのうちの少なくとも１つのノードは最上位置（top-most）のノードであり、１つ又は複数のパスは、上記最上位置のノードから、上記少なくとも１つの終端ノードのうちの１つへ、上記ノードのうちの１つ又は複数のノード及びそれらのポインタを介して画成され、各ノードは少なくとも１つのパスの一部である。
【００４６】
これは、ＤＡＧにルールを表現する標準的な方法である。こうして、ルールは数式で表されて１つ又は複数のノードに導入される。各ルールは１つ又は複数の結果を含み、ノードのポインタは各々このような１つの結果に関連している。従って、ルールの異なる結果は、グラフ／ＤＡＧを介して横断する異なるパスをもたらす。
【００４７】
従って、ＤＡＧにルールを表現するステップは、１つの数学的演算子をそれぞれ含む数式を上記ノードのうちの１つ又は複数のノードに提供することを含んでもよく、各演算子は、関連するノードのポインタで示されたノードによって表現されるルールを組み合わせて、複数のルールにてなる組み合わされたセットを表現する方法を記述している。
【００４８】
ＤＡＧにルールを表現するステップは、多数のノードを含むグラフに当該ルールを表現することを含んでもよく、それの数式はブール式及び／又は変数である。
【００４９】
また、ＤＡＧにルールを表現するステップは、ルールを複数のノードを含むグラフに表現することを含んでもよく、それの数式は、各ノードに関して、実際のノードの式が、当該実際のノードのポインタで示された任意のノードの式より低位になるように、所定の順序付けに従って順序付けされる。
【００５０】
順序付けを提供することは、ＤＡＧにおいて検索することや２つのＤＡＧを結合することのような、ＤＡＧに対する多数の演算を容易化する。
【００５１】
適正なＤＡＧを維持するために、上記ＤＡＧに上記ルールを表現することはさらに、
・同一の式を有する第１及び第２のノードであって、かつそれらのポインタは同一のノードを示す第１及び第２のノードを識別するステップと、
・上記第１のノードを示すポインタに、上記第２のノードを示させるステップとを含む。
【００５２】
こうした状況では、実際に同一の内容を表す２つのノードは１つだけに減らされる。
【００５３】
ＤＡＧを提供する好適な一方法は、上記ＤＡＧに上記ルールを表現するステップが、
・各ルールを論理式で表すことと、
・各論理式から、上記式に対する可能な複数の解にてなるセットを表す、部分的なＤＡＧを構成することと、
・論理式の各々を表す上記複数の部分的なＤＡＧから、全てのルールを表すＤＡＧを構成することとを含む方法である。
【００５４】
上記方法は、１つのルールから部分的なＤＡＧを構成することが通常は簡単なタスクであり、かつ、複数のＤＡＧの組み合わせは公知技術であって、これは、上述の複数の式の順序付けが使用される場合には実際に簡単化されるという点で、非常に簡単である。
【００５５】
好適には、各構成要素に対する上記複数の選択肢に関連した情報を提供するステップは、
・上記構成要素の個別の選択肢を表現する複数のブール変数を選択することと、
・上記構成要素の個別の選択肢の各々の符号化を、上記複数のブール変数に対するブール値の組み合わせとして提供することを含んでいる。
【００５６】
次に、各ルールを論理公式／式として表すステップは、当該ルールが関連する複数の選択肢に関連した複数のブール変数を提供することと、上記複数の変数を上記ルールに従って相互に関係させることとを含んでもよい。
【００５７】
一般に、ＤＡＧにルールを表現するステップは、好適には、少なくとも１つのタイプの終端ノードを提供することを含み、このような終端ノードを含む各パスに関して、全ての式と当該パスのポインタに関する全ての関連する結果との組み合わせは、互換性のある製品又は互換性を持たない製品の何れかに関連している。
【００５８】
上記のことより、１つのパスに係る複数のノードの数式の変数は、複数の構成要素に係る多数の選択肢に関連しているということは明らかである。また、パスは複数のノードを互いにリンクするポインタによっても画成されるということと、これらのポインタは各々、１つの数式の結果に関連し、従って各変数間の与えられた関係に関連するということも明らかである。従って、終端ノードの情報を含む１つのパスの情報は、好適には、１つの製品と、その複数の選択肢と、それらの間の互換性とに関する情報を提供する。
【００５９】
好適には、上記ＤＡＧに上記ルールを表現するステップは第１及び第２のタイプの終端ノードを提供することを含み、
・上記第１のタイプの終端ノードを含む各パスに関して、全ての式と、当該パスのポインタに関する全ての関連する結果との組み合わせは、互換性のある製品に関連し、かつ、
・上記第２のタイプの終端ノードを含む各パスに関して、全ての式と、当該パスのポインタに関する全ての関連する結果との組み合わせは、互換性を持たない製品に関連する。
【００６０】
この状況では、第１のタイプの終端ノードは“真”、“一”又は“１”を表現するように適応化されることが可能であり、第２のタイプの終端ノードは“偽”、“ゼロ”又は“０”を表現するように適応化されることが可能である。
【００６１】
一般に、１つの選択肢を選択するステップは、構成要素の他の（複数の）任意の選択肢に関連したブール変数と、このような他の（複数の）選択肢に関連した式を含むノードとを識別することと、ＤＡＧにおいて、このようなノードを含むパスを識別することと、上記第１のタイプのその任意の（複数の）終端ノードを上記第２のタイプの（複数の）終端ノードに変更することとを含む可能性がある。従って、このようなパスは、次に、“互換性を持たない製品”と直接関連付けられてもよいが、これは、これらの製品がもはや興味あるものでなく、選択された選択肢は、通常、同じ構成要素に対する他の複数の選択肢との互換性を持たないからである。ユーザが、その構成要素に対する複数の選択肢のうちのサブグループを選択すれば、当然ながら、続いて、そのサブグループには存在しない構成要素の選択肢について同じ手順が実行される。
【００６２】
この状況では、異なる選択を行う可能な場合（possibilities）の個数を計算することは、上記ＤＡＧに適用されかつ各最上位置ノードに関する下記ステップ、即ち、
・最上位置ノードから開始し、かつ、
−当該ノードが終端ノードである場合に、上記終端ノードが上記第１のタイプであれば“１”を提供し、それが上記第２のタイプであれば“０”を提供するステップと、
−その他の場合に、上記実際のノードのポインタで示された各ノードによって表現される上記可能な場合の個数を発見して、その結果からそのノードによって表現される上記可能な場合の個数を計算するステップと
を実行することにより、上記実際のノードで表現される上記可能な場合の個数を反復して発見するステップによって実行される可能性がある。
【００６３】
通常、例えば１つのポインタで表現された第１の可能な場合の個数と、もう１つのポインタによる第２の可能な場合の個数とを有するノードによって表現される可能な場合の個数は、第１の可能な場合の個数と第２の可能な場合の個数との和として計算可能である。しかしながら、（“ローカルな削減”のような）ＤＡＧのサイズ削減のために、実際のノードと、第１及び／又は第２のノードによって示された（複数の）ノードとの間に暗黙的ノードが（暗黙的に）配置されていれば、実際のノードによって表現される可能な場合の個数を求める際には、これらの暗黙的ノードが考慮される必要がある。
【００６４】
構成の間に、選択された選択肢が選択された他の選定された選択肢との互換性を持たない場合、上記ＤＡＧをチェックするステップは、
・上記選択された選択肢との互換性を持たない、他の選定された選択肢に関連した情報を提供することと、
・この情報をユーザに提供することとをさらに含んでもよい。
【００６５】
この状況では、ユーザは、上記選択された選択肢を実際に入力する、もしくは選定／選択することを選び、次にこれとの互換性を持たない（複数の）選択肢の選択を取り消してもよい。
【００６６】
互換性に関連したルールを実際に提供するための多数の方法が存在する。ある好適な方法は、上記ルールのうちの少なくとも１つのルールが、
・データベースに質問することにより、１つ又は複数の構成要素に関する選択肢に関連した情報、及び／又は異なる複数の選択肢に対する２つ以上の選択肢間の互換性に関連した情報を取得することと、
・上記データベースから取得された情報から１つ又は複数のルールを構築することとによって画成される方法である。
【００６７】
これを実行するある簡単な方法は、上記データベースが２次元テーブルを備え、上記２次元テーブルは、その複数の行の各々に各構成要素からの選択肢を含む製品に関連した情報を有し、上記複数の選択肢は互換性を有する方法であり、上記ルールを提供するステップは、各行の情報に関連したルールを提供することを含み、上記ＤＡＧに複数のルールを表現するステップは上記複数のルールの排反を提供することを含む。
【００６８】
従って、上記テーブルの各行は、各構成要素に対して１つの選択肢を含む完全な製品に関連した情報を備え、各製品の全ての選択肢は完全な相互の互換性を有する。単一の行の情報は、単一のルールとして容易に提供されることが可能であり、これは続いてＤＡＧに導入される。
【００６９】
構成される製品を提供するエンティティの側から見れば、これには、ルールが、予め決められた範囲の識別された製品にのみ関連しているため、これらの製品のみが構成されうるという優位点がある。従って、構成を実行するユーザの側からすれば、構成が互換性以外の何物によっても制限されないように思えるとしても、構成は常に、供給業者によって識別される製品となって終わる。
【００７０】
好適には、上記ＤＡＧをチェックして選択された選択肢が上記選定された複数の選択肢との互換性を有するか否かを決定するステップは、上記ＤＡＧにおいて、ある最上位置のノードから終端ノードまでのパスを検索することを含み、上記検索は、
・実際のノードとして上記最上位置のノードから開始することと、
・上記実際のノードが終端ノードになるまで、
−上記実際のノードにおける数式を評価して、その結果を、他の構成要素から選定された選択肢を考慮して決定することと、
−上記結果を表現するノードのポインタを選択することと、
−上記選択されたポインタによって示されるノードを実際のノードとして選択することとを反復することと、
・上記選定された選択肢に関連した情報を提供することと、
・上記パスに関連した情報は、上記選定が互換性を有することを表現することとを含む。
【００７１】
ＤＡＧにおける１つのパスからの情報を提供する簡単な１つの方法は、上記パスのノードの式から、与えられた構成要素のどの（複数の）選択肢が選定されているかということに関する情報を提供する方法であり、これらの選択肢を含む製品の互換性に関する情報は、上記パスの終端ノードの表現によって与えられる。
【００７２】
従って、個別の選択肢に関連した情報は、複数のノードの式と、複数のノードを相互に接続するポインタとから導出され、互換性情報はパスの終端ノードでわかる。
【００７３】
従って好適には、ＤＡＧのノードに関する式はブール変数であり、終端ノードは“真”又は“偽”の何れかを表現し、１つのパスは、１つの数式と、パス内のもう１つのノード又は終端ノードへのポインタとをそれぞれ備えた１つ又は複数のノードを含み、上記パスの情報は、上記パスの（複数の）ノードの（複数の）数式における複数の変数の恒等式及びその値又は従属関係に関連し、上記恒等式及び値／従属関係は複数の構成要素の選定された選択肢に関連し、上記選定された構成要素は、上記パスの終端ノードが“真”を表現すれば互換性を有し、上記選定された構成要素は、上記パスの終端ノードが“偽”を表現すれば互換性を持たない。
【００７４】
構成要素が、本来は構成の間に考慮されなければならないが構成を実行するユーザにとって参考にならないかもしくは上記ユーザに関係のない場合があるタイプであるような、特殊な状況も存在する。従って、構成の間にこのような構成要素を“隠蔽する”ことが望ましい場合がある。
【００７５】
隠蔽される可能性のある構成要素の一例として、自転車の車輪のハブの幅がある。この幅は、これがフレームと車輪との互換性を説明していることから非常に重要であるが、自転車を構成するユーザがこの点に関心を払う必要はない。システムは、単にこの構成要素を隠蔽して、暗黙に選択されたハブ幅（既に選定されたフレーム又は車輪によって画成されたもの等）と相反する選択をユーザが実行できなくなるように保証してもよい。
【００７６】
こうした状況において、上記ＤＡＧに上記ルールを表現するステップは、
・実際のＤＡＧに上記ルールを表現することと、
・上記複数構成要素のうちの、隠蔽される少なくとも１つの構成要素を選択することと、
・上記実際のＤＡＧを、
−上記実際のＤＡＧにおける、上記選択された（複数の）構成要素に関連した複数の式を含む関連した複数のノードを識別することと、
−これらのノードを上記実際のＤＡＧから除去することと、
−これらの（複数の）構成要素によって暗示された互換性が上記実際のＤＡＧによって反映されるように、上記選択された（複数の）構成要素に関連した複数の式を含まない複数のノードを上記実際のＤＡＧに追加することと
によって変更することと、
・上記実際のＤＡＧを、上記ルールを表現するＤＡＧとして提供することとを含んでもよい。
【００７７】
従って、ＤＡＧは以下の方法で簡単に変更される。すなわち、他の構成要素に対する複数の選択肢を暗黙的に選択する、隠蔽された構成要素に係る１つの選択肢が、後続の互換性チェックが上記“隠蔽された”構成要素にも関連するが、ただしユーザはこれを検証できないように、上記他の構成要素に対するこれらの選択肢を暗黙的に選択する。
【００７８】
可能な限り早い段階で上記“隠蔽された”構成要素を除去することによって、上記ＤＡＧを変更することが好ましい。これは、
・上記ルールの各々に関して、当該ルールを表現する部分的なＤＡＧを構成することと、
・上記構成要素のうちの、隠蔽される少なくとも１つの構成要素を識別することと、
・複数の上記識別された構成要素の順序付けを選択することと、
・まず何のルールも表現しない実際のＤＡＧを構成し、次に、
−最下位の選択されていない構成要素を選択し、
−上記選択された構成要素に関連した式を含む部分的なＤＡＧが全て選定されるまで、
＊上記選択された構成要素に関連した式を含む部分的なＤＡＧを選定し、
＊上記実際のＤＡＧを上記選定された部分的なＤＡＧと組み合わせて新たな実際のＤＡＧにすることを繰り返し、
−上記実際のＤＡＧを、
＊上記実際のＤＡＧにおける、上記識別された構成要素に関連した複数の式を含む複数のノードを識別し、
＊これらのノードを上記実際のＤＡＧから除去し、
＊上記識別された構成要素によって暗示された互換性が上記実際のＤＡＧによって反映されるように、上記識別された構成要素に関連した式を含まないノードを上記実際のＤＡＧに追加することによって変更することとを反復することと、
・上記実際のＤＡＧを、全ての選定されていない部分的なＤＡＧと組み合わせて上記ＤＡＧを提供することによって行われうる。
【００７９】
一般に、上記方法は、
・ユーザを識別することと、
・上記ユーザによって制御される装置と反復的な構成が実行されるもう１つの装置との間の通信を行うことにより、上記ユーザにより、構成要素の選択肢を選択するステップを実行することと、
・上記ＤＡＧをチェックすることに関連した情報を、上記ユーザに送信することをさらに含んでもよい。
【００８０】
従って、計算負荷の主要部分は、すなわち、ルール及びＤＡＧを導出することとともにＤＡＧを反復的にチェックすることは、ユーザによって遠隔から実行され、結果のみがユーザに送信される。このことは、例えばインターネット上の帯域幅を節約し、ここで、上記インターネットでは、仮想的に任意のタイプの製品に対してもこのような構成が実行可能になる。
【００８１】
また、上記方法は、
・ユーザを識別することと、
・上記反復的な構成の前に、
−ユーザによって制御される装置へ上記ＤＡＧを送信し、
−上記ユーザの装置上で上記反復的な構成を実行することをさらに含んでもよい。
【００８２】
この方法では、ＤＡＧはユーザに送信され、次いで、それは、クライアント上で、即ちユーザによって制御されるか、場合によってはユーザによって所有されたコンピュータ上で、ＤＡＧでの構成を実行する。
【００８３】
ある特に好適な実施形態は、上記反復的な構成の間に、
・選択肢が全く選定されていない構成要素に対する１つ又は複数の選択肢に関連した情報を取得するステップを含み、上記１つ又は複数の選択肢の各々は上記選定された選択肢との互換性を有し、
・この情報を上記ユーザに提供するステップを含むものである。
【００８４】
従って、妥当な選択肢のみが表示されるので、従って、構成は、格段に高速に実行可能であり、かつ、互換性を持たない選択肢同士を組み合わせようとすることによってユーザが間違いを犯すことなしに、実行可能である。
【００８５】
ユーザが製品構成と対話する有益な方法は、上記方法が音声認識装置を備えたシステムを提供することをさらに含み、かつ上記製品を反復的に構成するステップは、
・上記音声認識装置によって認識されたテキストから構成要素を選定することと、
・上記音声認識装置によって認識されたテキストからの、この構成要素の複数の選択肢にてなるグループから、１つの選択肢を選択することをさらに含む場合である。
【００８６】
この方法では、選択肢は音声によって選択されるが、電話を介する製品構成等のアプリケーションでは、このことは非常に好ましい。
【００８７】
構成される製品が所定の装置であるアプリケーションでは、上記方法が、構成可能な装置及びインターフェース装置を識別することと、
・上記構成可能な装置に関するルールを表現するＤＡＧを記憶することと、
・上記ＤＡＧを上記構成可能な装置から上記インターフェース装置へアップロードすることと、
・上記製品を反復的に構成するステップにおいて、上記インターフェース装置上で、選択された選択肢が他の構成要素からの選定された他の選択肢との互換性を有するか否かということに関してＤＡＧのチェックを実行することとをさらに含んでいれば有益である。
【００８８】
この方法では、上記構成可能な装置の構成に関連した全ての情報は、上記装置内に記憶されることが可能であり、かつ任意のインターフェース装置からアクセス可能であり、このとき、上記インターフェース装置は上記構成可能な装置に関する特別な知識を持たない（without）。
【００８９】
上記選択肢のうちの幾つかが上記構成可能な装置自体によって決定されうる状況においては、上記方法が、上記構成可能な装置における予め決められた構成要素のリストを識別することと、上記構成可能な装置におけるこれらの構成要素に対する予め決められた選択肢のリストを識別することとをさらに含み、上記製品を反復的に構成するステップは、
・上記インターフェース装置上で、上記選択された選択肢が、他の構成要素からの選定された他の選択肢との互換性を有し、かつ予め決められた選択肢との互換性を有するか否かということに関して、上記ＤＡＧのチェックを実行することをさらに含んでいれば有益である。
【００９０】
予め決められた選択肢は、実行されなければならない選択肢の選定が少なくなることから、ユーザにとって容易になる。
【００９１】
多数の製品の製品構成において、上記構成要素のうちのいくつかはオブザーバ的な構成要素であって、上記オブザーバ的な構成要素に対しては、ユーザは選択肢を選定せず、何が互換値（compatible value）であるかについてのみ関心を持つということを観察することが有益である。これは、上記方法がさらに、オブザーバ的な構成要素のリスト及びオブザーバ的でない構成要素のリストを識別することを含み、かつ、
・上記オブザーバ的でない構成要素に対するルールをＤＡＧに表現することと、
・上記各オブザーバ的な構成要素について、ルールのサブセットを決定し、（such that）これらのルールから、上記オブザーバ的でない構成要素に対する選択肢との互換性を有する上記オブザーバ的な構成要素に対する選択肢を決定することができるようにすることと、
・各オブザーバ的な構成要素について、上記ルールのサブセットをオブザーバ的ＤＡＧとして表現することと、
・上記製品を反復的に構成するステップにおいて、
−選択された選択肢が、他の構成要素からの選定された他の選択肢との互換性を有するか否かということに関してＤＡＧをチェックし、
−各構成要素について、上記選定された全ての選択肢との互換性を有する選択肢は１つのみであるか否かを決定することにより、システムによって決定された複数の選択肢にてなるセットを決定し、
−上記オブザーバ的な構成要素のうちの少なくとも１つについて、上記オブザーバ的な構成要素のオブザーバ的ＤＡＧをチェックし、選定された他の選択肢と上記システムによって決定された複数の選択肢にてなるセットとの互換性を有する選択肢は１つのみであるか否かを決定し、
−この情報をユーザに提供することと
を含む場合に利用されることが可能である。
【００９２】
複数のルールを異なる複数のＤＡＧに表現することは、このことがＤＡＧの合計のサイズを低減し、必要な記憶量を減少して性能を改善するということの利点をもたらすので有益である。
【００９３】
上記製品を反復的に構成するステップが、
・構成要素と選択肢との対のそれぞれについて、上記対の状態の分類を提供することと、
・複数の結果にてなるリストのうちの１つに、ブロックされた状態、選択可能な状態、ユーザが選択した状態、システムが選択した状態、又は強制状態を含む分類を採用することと、
・他の構成要素に対する選択肢の選定を考慮するまでもなく、上記構成要素に対して上記選択肢が選定されることが不可能な場合は、ブロックされた状態の分類を提供することと、
・上記構成要素に対する選択肢が上記他の構成要素からの選定された選択肢との互換性を有する場合は、選択可能な状態の分類を提供することと、
・上記構成要素に対して上記選択肢が既に選定されている場合は、ユーザが選択した状態の分類を提供することと、
・上記選択肢が上記構成要素にとって唯一の選択肢であり、これが他の構成要素からの選定された選択肢との互換性を有する場合は、システムが選択した状態の分類を提供することと、
・上記構成要素に対して上記選択肢が選択可能であるが、これは他の構成要素の選択肢に係る他の選定のうちのいくつかとの互換性を持たない場合は、強制状態の分類を提供することと、
・上記分類に関する情報を上記ユーザに提供することと
をさらに含む場合は、ユーザにさらに有益な情報を与えることができる。
【００９４】
分類は、ユーザインターフェースにおいて、可能性のある選択肢の選定の効果に関する有益な情報をユーザに提供することによって使用可能である。いくつかは不可能であり、いくつかは直接選択することが可能であり、その他はユーザ又はシステムによって既に選択済みであり、最後の幾つかは強制可能であって、これは、ユーザが以前のいくつかの選定を取り消す用意があればそれらが選択可能であるということを意味する。
【００９５】
本発明の第２の態様は、当該プログラムがコンピュータ上で実行されるときに上記方法に係るすべてのステップを実行するように適応化されたコンピュータプログラムコード手段を備えたコンピュータプログラムに関連している。
【００９６】
本発明はまた、コンピュータが読み取り可能な媒体上に具現されたコンピュータプログラムと、上記コンピュータプログラムを備えたコンピュータが読み取り可能な媒体とに関する。
【発明を実施するための最良の形態】
【００９７】
以下、付録及び図面に関連して、本発明に係る好ましい実施形態を説明する。
【００９８】
次に、本発明を、本発明によって扱われる課題の起源である、幾つかの部品で構成される複合製品に係る、対話式の、計算機で支援された構成に適用された好適な実装に関連して説明する。しかしながら、当業者には、本発明はこの特定のアプリケーションに限定されるものではなく、当該構成を実行する方法と構成される製品の構造との両方に関する、より広範なアプリケーションを有するということが理解されるであろう。
【００９９】
本発明は、製品を構成する方法を含んでいる。本発明を限定することなく、「製品モデル」は、製品の関連した複数の態様をモデル化するために使用される。本製品モデルにおいて、製品は多数の構成要素で構成され、かつこれらの構成要素の各々について複数の「選択肢」にてなるグループが存在する。各構成要素は、典型的には、色、動作、重量、インターフェースなどのような当該構成要素の関連した態様を記述する「属性」を有する。これらの属性の各々について、複数の具体的な「値」にてなるグループが存在する。例えば、色の属性は、赤、青又は緑の値を有する可能性がある。さらに、異なる構成要素に対する選択肢間には、互換性に関連したルールが存在する。
【０１００】
この製品を構成するための方法は、下記のことを含む。
【０１０１】
・製品の関連した態様を「製品モデル」として指定すること。上記製品モデルは、構成要素、これらの構成要素に対する属性を記述するとともに、各構成要素に対する選択肢及び各属性の値を記述している。さらに上記製品モデルは、複数の構成要素と複数の属性との間の互換性に関連した複数のルールにてなるグループを備えている。
・この製品モデルを、上記製品モデルの整合された構成を表現する仮想テーブルとして符号化すること。
・上記仮想テーブルを使用して、整合された構成をもたらす製品を構成すること。典型的には、これは、ユーザと構成プログラムとの間の対話式セッションにおいて行われる。
【０１０２】
図１は、これらのステップを略示している。この図は、特定の製品（自転車）、特定の形式の製品モデル（テキストの記述）、特定の仮想テーブル（ブール決定ダイヤグラム（Boolean Decision Diagram））、及び特定の対話式の構成処理を示している。当業者には、本発明がこれらの特定の選定に限定されないということは明白である。
【０１０３】
・まず、この場合では自転車である具体的な製品の製品モデルが生成される。この具体的な製品モデルは、２つの異なるフレームが存在しかつ２つの異なるギヤが存在することを表現している。さらに、本製品モデルは、ルールから、外装ギヤが選定されれば、フレームはカーボンフレームでなければならないということを表現している。
【０１０４】
・製品モデルは、仮想テーブルとして符号化される。本仮想テーブルは、全ての整合された構成を表現する有向非循環グラフ（directed acyclic graph）である。この具体的な有向非循環グラフは、２つの変数、即ち、外装（ｅｘｔｅｒｎａｌ；選択されたギヤが外装ギヤであることを表す）とカーボン（ｃａｒｂｏｎ；カーボンフレームが選択されたことを表す）とを有するブール決定ダイヤグラム（ＢＤＤ）（「シンボルモデル検査」の分野の当業者に知られている）である。くだいた言い方をすると、ＢＤＤと製品モデルとは、「外装」及び「カーボン」へのブール値の割り当てが終端１に至る場合かつその場合に限り、対応する構成には整合性がある、という関係にある。
・次に、自転車に対する、計算機で支援された構成が実行される。コンピュータプログラムは、各構成要素に対する可能な選択肢を示す。コンピュータプログラムのユーザは、１つの構成要素を選択し、この構成要素に対する可能な選択肢の中から１つを選択する。例えば、ユーザはギヤ構成要素を選定可能であるが、そのギヤは外装ギヤであるとする。このユーザの選択に基づき、コンピュータプログラムは仮想テーブルを使用し、次にどんな選択をすれば整合された構成になるかを発見する。例えば、コンピュータプログラムは仮想テーブルを使用して、外装ギヤの選択はフレームがカーボンフレームでなければならないことを暗示するという決定を下す。この対話式処理は、各構成要素について１つの選択肢が選択されるまで続く。この構成処理の結果、整合された製品構成がもたらされる。
【０１０５】
以下の３つのセクションにおいて、製品モデル、符号化処理及び最終的な構成処理をさらに詳述する。各セクションにおいて、好適な実施形態が提示される。
【０１０６】
製品モデル．
一般に、「製品モデル」は、製品が何の構成要素から構成されているかということと、これらの構成要素間の相互の従属関係とを記述するために使われる。
【０１０７】
本発明の本質は、製品モデルに対して特別な限定を課さない。しかしながら、製品モデルは、本発明を限定することなく、複数の「製品変数」にてなるセット、これらの変数の各々の「領域」、及び複数のルールにてなるセットをしばしば画成する。各製品変数は、構成要素又は属性を表す。構成要素を表す製品変数の場合、製品変数の領域は、当該構成要素に対する可能な選択肢に対応する。属性を表す製品変数の場合、製品変数の領域は当該属性に対する可能な値に対応する。製品変数の可能な領域は、離散的な領域を含むとともに、連続的な領域を含む。構成要素と属性との間の相互従属関係はルールとして表現され、かつ典型的には、複数の製品変数に関する式（又は公式）として定式化される。
【０１０８】
製品モデルの一例は、マザーボード（異なる３つの選択肢）、ＣＰＵ（２つの選択肢）及びハードディスク（２つの選択肢）で構成されるコンピュータの製品モデルである。ＣＰＵはスロットを使用してマザーボードへ接続されるので、スロットのタイプはＣＰＵ及びマザーボードの両方にとって重要な属性であり、また、ハードディスクは特定のコントローラタイプを使用してマザーボードへ接続されるので、コントローラタイプもまた重要な属性である。以下は、コンピュータ製品モデルのテキストの一例である。
【０１０９】
［製品モデル１］
2004523026.tif 000003
2004523026.tif 000004
【０１１０】
最初のセクションは、製品変数のタイプを定義するために使用されるタイプを宣言する。次のセクションは、製品変数を宣言する。これらの変数は各々、識別子とタイプとを有する。この例の場合のタイプシステムは、原子的な構成と、レコード構成（｛…｝）と、列挙されたタイプ（…│…│…）とを備えている。例えば、ｃｐｕは、ｎａｍｅ（名前）とｓｌｏｔ（スロット）より成るレコードを備えた製品変数であり、このスロットはｃｐｕ−ｓｌｏｔ−ｔのタイプである。ｃｐｕ−ｓｌｏｔ−ｔは、次の２つの選択肢、即ちＳＬＯＴ−１及びＳＬＯＴ−Ａを備えた列挙タイプとして宣言される。プライベート（ｐｒｉｖａｔｅ）修飾子及びパブリック（ｐｕｂｌｉｃ）修飾子は、構成の間にエンドユーザに対してどの構成要素又は属性が提示されるかを制御するために使用される（詳細は後述する）。第３のセクションは、複数のルールを宣言する。これらのルールは、製品変数に関する一般的なブール式であり、整合された構成のためには全てのルールが満たされる必要がある。一般に、ルールは複数の製品変数間の任意の関係を表現できるが、この例に提示されている具体的なルールは、下記の２つの異なるカテゴリーに分けられるものとして考えることができる。
【０１１１】
属性ルール：特定の選択肢に関する所定の属性の値を指定する。例えば、Ａｏｐｅｎ−ＡＸ６ＢＰ−ＡＴＸマザーボードのスロットタイプは、ＳＬＯＴ−１であると指定される。
互換性ルール：異なる構成要素からの複数の選択肢／属性間の一般的な相互の従属関係を指定する。例えば、ハードディスクのコントローラタイプはマザーボードのコントローラタイプと同じでなければならないと指定されている。
【０１１２】
このセットアップでは、構成は、製品変数の全てのパブリック部分に関する具体的な値の選択を含んでいる。このコンピュータの例では、これは、マザーボードの名前、ＣＰＵの名前及びハードディスクの名前の選択を含んでいる。本コンピュータの整合された構成は、コンピュータの製品モデルに係るルールを満たす構成である。整合された構成の一例は、ｍｏｔｈｅｒｂｏａｒｄ．ｎａｍｅをＡｂｉｔ−ＢＸ６−ＡＴＸにして、ｃｐｕ．ｎａｍｅをＩｎｔｅｌ−Ｃｅｌｅｒｏｎ−Ａ−３６６ＭＨｚにして、かつｈａｒｄｄｉｓｋ．ｎａｍｅをＩＢＭ−Ｄｅｓｋｓｔａｒ−２５ＧＰ−１０，１ＧＢにする選択である。
【０１１３】
上述の例では、製品モデルはテキストで表現されている。しかしながら、本発明はこのような表現に限定されない。それに代わって、製品モデルの完全な表現は多数の表現間で分割されることが可能である。本発明のある態様は、製品説明を製品テーブルと組み合わせて完全な製品モデルを得ている。製品説明は一般に、構成要素及びそれらの属性を定義することによって製品の構造を表現するために使用され、製品テーブルは一般に、構成要素に対する具体的な選択肢を表現するとともに属性の具体的な値を表現するために使用される。
【０１１４】
このアプローチにより、通常は包含することが困難になるであろう製品データの巨大なテーブルを、計算機で支援された構成のための製品モデルにすることが可能である。これのアプリケーションは不動産販売店の構築を含み、ここでは、家屋の潜在的購入者にとっては彼が彼自身の家を“構成”しているように見える。実際には、彼は、全ての整合された選定を表す簡単なドロップダウンメニューを使用して、例えば１０，０００軒の家屋から選定する。この例において、属性は、価格の範囲、場所、ガレージ、水泳用のプール、部屋数、面積などを含む。
【０１１５】
例示となるコンピュータ製品モデルは、１つの製品説明と３つの製品テーブルとに分割されることが可能である。製品説明は、元のコンピュータ製品モデルと同じセクションで構成されるが、属性ルールは除去されている。
【０１１６】
［製品モデル２］
2004523026.tif 000005
【０１１７】
最初のテーブルは、マザーボード構成要素の属性を定義する。
【０１１８】
【表１】
2004523026.tif 000006
【０１１９】
第２のテーブルは、ハードディスク構成要素の属性を定義する。
【０１２０】
【表２】
2004523026.tif 000007
【０１２１】
第３の最後のテーブルは、ｃｐｕ構成要素の属性を定義する。
【０１２２】
【表３】
2004523026.tif 000008
【０１２３】
テキストによる製品モデルは、下記の方法により、１つの製品説明と、複数の製品テーブルにてなる１つのセットとから取得されることが可能である。
【０１２４】
・各テーブルについて、当該テーブルをルールに翻訳する。
・先行するステップで取得されたルールを、製品説明に追加する。
【０１２５】
テーブルは、テーブルを論理和標準形上の表現（expression）として見ることができるという、鍵となる観察事実を使用してルールに翻訳される。ｎ個の行とｍ個の列を有するテーブルは、下記のように翻訳される。
【０１２６】
・行ｉ及び列ｊにおける、ｙｊというラベルを有する列において内容ｘｊｉを有するセルは、ｙｊ＝ｘｊｉという原子的なルールに翻訳される。
・ｎ個の行のうちで行ｉについて、この行上のセルから取得される全ての原始的なルールが、これらの原始的なルールを互いに結合することにより組み合わされて、サブルールが形成される（ｙ１＝ｘ１ｉ∧…∧ｙｍ＝ｘｍｉ）。
・ｎ個のサブルールは全て、これらのサブルールを互いに直和することにより組み合わされ、１つの大きなルール
【数１】
2004523026.tif 000009
が生成される。
・この１つの大きなルールが、ルールに翻訳されたテーブルである。
【０１２７】
例えば、コンピュータ製品モデルの最後のテーブルは、下記のように翻訳される。
【０１２８】
［製品モデル３］
2004523026.tif 000010
【０１２９】
便利な拡張方法は、製品テーブルにおける値を製品説明における値にマッピングする「テーブルフィルタ」を追加するものである。このようなフィルタの一例は、製品テーブルにおける特定の価格（＄１００、＄２２３、＄８１７等）を製品説明における価格のレベル（安価（ｃｈｅａｐ）、手頃な価格（ｒｅａｓｏｎａｂｌｅ）及び高価（ｅｘｐｅｎｓｉｖｅ）等）にマッピングする。このようなマッピングは、典型的には、与えられた区間における全ての価格を同じ価格のレベルにマップする。
【０１３０】
ルールへの翻訳は、明示的に実行される必要はない。本発明のある態様では、この翻訳は、代わって、仮想テーブルの構築の間にオン・ザ・フライで実行可能である。
【０１３１】
製品モデルの好ましい実施形態．
製品モデルの好適な実施形態は、１つの製品説明と、複数の製品テーブルにてなるセットとで構成される。製品説明は、ＸＭＬ  １．０の文書として与えられる。製品テーブルは、ＯＤＢＣデータソースとＳＱＬ質問との組み合わせである。
【０１３２】
ＸＭＬ文書は、付録Ａ  １０に示されている文書型宣言（ＤＴＤ）を使用して定義される。基本的には、製品説明は下記のものを含む。
【０１３３】
定数宣言：定数は、明示的に特定可能であるか（ｃｏｎｓｔａｎｔ）、又は、評価されるときに正確に１つのセルに戻さなければならないＳＱＬ質問として特定可能である（ｄｂｃｏｎｓｔａｎｔ）。
型宣言：型宣言（ｔｙｐｅ）は、基本的には型識別子を特定のタイプに対する省略表記として宣言する（以下を参照）。
製品変数：製品変数（ｐｒｏｄｕｃｔｖａｒｉａｂｌｅ）は、パブリック又はプライベートを宣言でき、これは所定のタイプに属する（以下を参照）。
ルール：ルールは、構成が整合されたものであるために満たされる必要がある製品変数に関するブール式である。この式は、明示的に特定されるか（ｒｕｌｅ）、又は、評価されるときに、ルールに翻訳されうるテーブルを戻さなければならないＳＱＬ質問を使用して特定されるか（ｄｂｒｕｌｅ）の何れかであることが可能である。
データベースの詳細：最後に、下記のようないくつかの追加の情報の部分、即ち、ＯＤＢＣデータソースを定義するエイリアス（別名）定義（ａｌｉａｓ）、ＳＱＬ質問定義（ｓｑｌｑｕｅｒｉｅｓ）、及びデータベースにおける値と製品説明における値との間のマッピングに使用可能なフィルタ（ｆｉｌｔｅｒ）を提供することができる。
【０１３４】
ルールは、次のような構造化された式、即ち、ブール値（ｔｒｕｅ（真），ｆａｌｓｅ（偽））、有界なサブレンジからの値（０，１，…，ｎ）のような原子的な式と、複数のアレーから構築された複合式（compound expression）と、レコード式と、列挙（総和（sum））式とを含んでいる。さらに、算術演算子及びブール演算子が提供される。本好適な実施形態では、許容された算術演算は加算、減算及び乗算を含み、乗算演算は、少なくとも１つのオペランドが定数である場合にのみ許容される。許容されたタイプの算術演算子は最初は奇妙に思えるが、後に明らかとなるように、この選定は、本好適な実施形態と協働するとき仮想テーブルにとって非常に好首尾に機能する。
【０１３５】
製品説明用の言語としてのＸＭＬの選定は、コンピュータ上への表現のためのテキストフォーマットとツリーデータ構造との両方への直接的な翻訳を可能にしたものである。
【０１３６】
製品説明を作成するための本好適な方法は、グラフィカルユーザインターフェースを使用するものである。コンフィジットスタジオ（ＣｏｎｆｉｇＩｔＳｔｕｄｉｏ）は、このようなグラフィカルユーザインターフェースである。図２のスクリーンショットを参照されたい。このスクリーンショットは、ｐｃの製品モデルを編集中のコンフィジットスタジオの製品モデルエディタを示している。スクリーンショットの左側の領域におけるツリー表示は製品説明のツリー表示であり、ＸＭＬ文書型宣言に密接に関連している。（このスクリーンショットでは、型宣言に“テンプレート（template）”という用語が使用され、ルールには“拘束条件（constraint）”という用語が使用されている。）右側の領域は、ツリー内の選択された頂点に関する詳細を示し、頂点を操作するために使用可能である。このスクリーンショットの上部のメニューは、製品モデル（以下を参照）用の仮想テーブルを構築することと（“コンパイル”メニュー）、インターネットを介した対話式構成（以下を参照）用の仮想テーブルサーバを動作させること（“実行”メニュー）とに使用可能である。
【０１３７】
仮想テーブルとしての製品モデルの符号化．
本発明の重要な態様は、製品モデルをコンパクト「かつ」効率的な表現に変換する処理である。この処理を「仮想作表（virtual tabulation）」と呼び、結果として得られる表現を「仮想テーブル」と呼ぶ。この変換を実行できる多数の方法が存在する。変換の目的は、まず、構成問題を符号化して当該構成問題に対するすべての解を求める方法を発見し、次に、上記構成問題に関連した情報を仮想テーブルへの効率的な質問によって取得できるように、これらを仮想テーブルにおいて仮想的に作表することにある。符号化は、製品モデルの構成要素に係る符号化と、ルールの対応した符号化とを発見すること含む。ルールに対する有効な解に関する照会が効率的に実行されうるように、ＤＡＧは全てのルールを表現する。仮想テーブルは、このＤＡＧと、製品モデルとＤＡＧとの間の関係に関する情報とで構成される。
【０１３８】
現状における当該技術を凌ぐ本発明の利点は、すべての解にてなるテーブルが実際に存在しているかのような効率的な照会を実行できるように、ＤＡＧを使用して全てのルールを表現するステップに由来する。テーブルの全体は、ほとんど常に、大きすぎて実用的なものではないが、それに対して、適切に選定された符号化は、小さなＤＡＧをもたらすことができると同時に、全ての解を作表していることによって精度を維持することができる。
【０１３９】
仮想テーブルの最も重要な部分は、整合された構成を１つ１つ表現するＤＡＧである。実在の製品モデルに関しては、こうした構成が途方もなく多数存在するので、ＤＡＧは何とかしてこれらの構成を暗黙的に表現する必要がある。しかも、ＤＡＧはこれらの構成を「正確に」（即ち、“精度を下げることなく”）表現する必要がある。ＤＡＧに対する必要条件は、次の２つのカテゴリーに分類することができる。
【０１４０】
機能の必要条件：ＤＡＧは、当該各構成が製品変数の各々に対する値を定義する、「複数の構成にてなるセット」を表現できる必要がある。ＤＡＧ上の基本的なアルゴリズムは、このような構成セットに対する演算及び機能を模倣し、下記を達成しなければならない。
【０１４１】
・複数の構成セットにてなるグループの和集合を構築しかつ共通集合を構築し、２つの構成セットの差集合を構築し、構成セット内の変数の可能な値を変化させ、制限し、又は拡張する、など。
・セットが空集合であること、セットの包含関係及びセットの同値関係をチェックする。変数の可能な値を決定し、かつ構成セットにおける構成の個数を決定する。
効率の必要条件。製品モデルにおけるルールの本質／構成は、上で紹介されたアルゴリズムの多くが、製品変数の個数に関して（少なくとも）指数関数的である、典型的な最悪の場合の実行時間を有することになる点を暗示している。ＤＡＧのサイズも、典型的な最悪の場合で、製品変数の個数に関して（少なくとも）指数関数的になる。それにも関わらず、実在の製品モデルでは、アルゴリズムは「効率的」に動作し、ＤＡＧ表現は「コンパクト」である、というのが実情でなければならない。
【０１４２】
これらの必要条件は、最初は満たすことが困難であるように思える可能性もあるが、実在の製品モデルではこのようなＤＡＧが実際に存在することが分かる。
【０１４３】
ブール決定ダイヤグラム（ＢＤＤ）は、単一のブール変数をそれぞれ含む複数のノードを備えたＤＡＧである。ハードウェア回路の形式的検証の分野から、ＢＤＤを使用して次式のタイプの任意のブール関数を符号化できるということが知られている（ここで、ｎはブール変数の個数である）。
【０１４４】
【数２】
2004523026.tif 000011
【０１４５】
これらの関数は、“ブール製品モデル”に対する構成セットと同形である。（“ブール製品モデル”によって、われわれは、製品変数の値が真及び偽に制限されている製品モデルを指す。）従って、一般的な製品モデルをこのようなブール製品モデルとして符号化することが可能であれば、かつさらに、必要な構成アルゴリズムを基本的なＢＤＤ演算の形で表すことができれば、１）ＢＤＤを使用して一般的な製品モデルの仮想テーブルを表現し、かつ２）この仮想テーブルを使用して一般的な製品の実際の構成を実行することが可能である。
【０１４６】
ＢＤＤに関しては、これらの必要条件が全て満たされることが分かり、かつさらに、大部分の実在する製品モデルに関して、本アルゴリズムは効率的であり、ＤＡＧはコンパクトである。事実、ＢＤＤはＤＡＧの好適な実施形態である。
【０１４７】
しかしながら、本発明はこのようなＤＡＧに限定されない。他の多くのＤＡＧが、各々セット及びセットに対する演算として捉えることのできる表現及びアルゴリズムを有している。ＤＡＧは、製品モデルにおいてルールを表現する言語に基づいて注意深く選定される必要がある。
【０１４８】
例えば、差決定ダイヤグラム（メラー（Moeller）ほか，差決定ダイヤグラム（Difference Decision Diagrams），欧州計算機科学論理（ＣＳＬ）学会年次会議論文集（proceedings Annual Conference of the European Association for Computer Science Logic (CSL)），１９９９年９月２０−２５日，スペイン，マドリッドを参照）は、
【数３】
2004523026.tif 000012
のタイプの関数（のうちのサブセット）を表現するために使用可能であると同時に、必要なアルゴリズムも提供する。その直接的な優位点は、これにより、ルールが連続的な領域を有する変数に対する存在記号化された式（の制限されたサブセット）で構成される場合の、製品モデルを符号化する方法が存在することにある。反対に、本アルゴリズムは効率が劣る（符号化され得るルールの充足可能性（satisfiability）はｐｓｐａｃｅ困難であることが分かる）という欠点もある。
【０１４９】
製品モデルのルールがより多くの一般的な算術演算を含む場合に適切なもう１つのアプローチは、翻訳されたブール変数に対してＢＤＤを使用するものである（３１６−３２７ページ，ダブリュー．チャン（W. Chan），アール．ジェイ．アンダーソン（R. J. Anderson），ピー．ビーム（P. Beame），及びディー．ノトキン（D. Notkin），非線形拘束条件を有するシステムのクラスに対する拘束条件解法とシンボルモデルチェックとの組み合わせ（Combining constraint solving and symbolic model checking for a class of systems with non-linear constraints），オー．グルムバーグ（O. Grumbreg）編集，計算機支援検証（Computer Aided Verification），第９回国際会議（9th International Conference），ＣＡＶ’９７論文集（CAV'97 Proceedings），計算機科学講義録第１２５４巻（volume 1254 of Lecture Note in Computer Science），ハイファ，イスラエル，１９９７年６月，シュプリンガー・フェアラーク（Springer-Verlag）を参照）。各ブール変数は式を表し、ＤＡＧ内のパスはこのような式の結合（conjunction）を表し、このようなパスの充足可能性は、例えば線形プログラミングを使用して決定されることが可能である。
【０１５０】
次に、製品モデルを仮想テーブルとして符号化することについて、（ＢＤＤを使用する）その好適な実施形態で説明する。しかしながら、当業者であれば、異なる基礎的なデータ構造、例えば上述の２つのデータ構成のうちの一方を使用するようにアルゴリズムを微調整することができる。
【０１５１】
製品モデルを仮想テーブルとして符号化するための好適な実施形態．
製品モデルを仮想テーブルとして符号化するための好適な実施形態は、下記のステップを含む。
【０１５２】
静的拡張：製品モデルは、タイプの階層を平坦化することによって拡張される。その結果、平坦化された製品モデルと、製品モデルを平坦化された製品モデルに接続するシンボルテーブルとが得られる。
ＢＤＤの符号化：各ルールについてＢＤＤが構築され、全ての整合された構成を表現する１つの大きなＢＤＤが構築される。
【０１５３】
以下、最初に、静的拡張を実行する方法を示す。平坦化された製品モデルはこの静的拡張の結果であり、ＢＤＤを使用する符号化に適合するように生成されている。
【０１５４】
静的拡張．
静的拡張は、タイプの階層を平坦化することによって実行される。その結果、平坦化された製品モデルと、製品モデル及び平坦化された製品モデルを関連付けるシンボルテーブルとが得られる。
【０１５５】
平坦化された製品モデルは、１）レコード式の除去と、２）領域の簡単化と、３）ブール形式の符号化とによって取得される。レコードタイプの除去は、レコードタイプを含む各製品変数について、製品変数を、平坦化された変数にてなるリストで置換することにより実行される。さらに、この製品変数に対する全ての式は、平坦化された変数に対する式によって置換される。この置換の後には、全てのレコードが製品モデルから除去されている。コンピュータの製品モデルの場合、このステップは結果として下記のような製品モデルをもたらす。（ｍｏｔｈｅｒｂｏａｒｄ（マザーボード）は、ｎａｍｅ（名前）、ｓｌｏｔ（スロット）及びｃｏｎｔｒｏｌｌｅｒ（コントローラ）より成るレコードタイプの製品変数であったことを想起されたい。）
【０１５６】
［製品モデル４］
2004523026.tif 000013
【０１５７】
製品モデルを平坦化する第２のステップは、平坦化される変数の領域の簡単化を含んでいる。平坦化された値は全て数に変換され、平坦化された変数の各々の領域は区間に変換される。例えば、ｃｐｕ＿ｓｌｏｔについて言えば、（ｃｐｕスロットに対する第１の選択肢であった）ＳＬＯＴ−１に代えて値０が使用され、ＳＬＯＴ−Ａ（第２の選択肢）に代えて値１が使用される。コンピュータの製品モデルの場合は、次のような製品モデルが結果としてもたらされる。
【０１５８】
［製品モデル５］
2004523026.tif 000014
【０１５９】
製品モデルを平坦化する最後のステップは、製品モデルをブール形式で符号化することを含んでいる。平坦化された各変数はブール変数にてなるリストで置換され、各ルールは、これらのブール変数に対する新しいルールで置換される。
【０１６０】
タイプ０．．ｎの領域を有する平坦化された変数は、
【数４】
2004523026.tif 000015
個のブール変数
によって置換される。ｎ＋１個の値の各々について、これらのブール変数に対する固有の割り当てが選定される。例えば、ｍｏｔｈｅｒｂｏａｒｄ＿ｎａｍｅの平坦化される変数に係る３つの値を有する領域（ｎ＝２）を符号化するためには、２つのブール変数、Ｘ０及びＸ１が必要である。領域内の各値について、ブール変数の割り当てが選定される、即ち、値０にはＸ０＝０，Ｘ１＝０が、値１にはＸ０＝０，Ｘ１＝１が、最後に値２にはＸ０＝１，Ｘ１＝０が選定される。各ルールはここで、平坦化された製品モデルを取得しているブール変数に対する新たなルールで置換される。例えば、コンピュータ製品モデルの平坦化された製品モデルは次のようになる。
【０１６１】
［製品モデル６］
2004523026.tif 000016
【０１６２】
製品モデルの平坦化の間に、シンボルテーブルが構築される。このシンボルテーブルは２つのテーブルを備えている。第１のテーブルは、タイプと、平坦化される変数の各々の領域と、この変数の値を符号化するために使用されるブール変数とに関する情報を含む。コンピュータ製品モデルの場合、このテーブルは下記の通りである。
【０１６３】
【表４】
2004523026.tif 000017
【０１６４】
第２のテーブルは、平坦化される値、それらの整数値、及び固有のブール割り当てに関するものである。コンピュータ製品モデルの場合、このテーブルは下記の通りである。
【０１６５】
【表５】
2004523026.tif 000018
【０１６６】
ＢＤＤ符号化．
次に、ＤＡＧの構築が実行される。好適な実施形態は、（既約の順序を有する）二分決定ダイヤグラムである。
【０１６７】
ブール決定ダイヤグラムを使用してブール式を表現することは公知である。ブール決定ダイヤグラムの概論については、［クリストフ・マイネル（Cristoph Meinel）及びソーステン・セオバルド（Thorsten Theobald），ＶＬＳＩ設計におけるアルゴリズムとデータ構成（Algorithms and Data Structures in VLSI Design），シュプリンガー（Springer），１９９８年］を参照されたい。われわれは、下記の（公知の）ＢＤＤのテキスト表現を用いる。
【０１６８】
・０は、終端ＢＤＤ０（真）を表す。
・１は、終端ＢＤＤ１（偽）を表す。
・
【数５】
2004523026.tif 000019
は、ａ及びｂに対して、演算子
【数６】
2004523026.tif 000020
で示された任意の２進ブール演算子を適用することによって求められるＢＤＤを表す。
・∃ｘ．ａは、ＢＤＤａから変数ｘを存在記号化することによって求められるＢＤＤを表す。
・（ｘ→ａ，ｂ）は、ｘであればａであり、ｘでなければｂである式を表すＢＤＤであり、これはより簡単な演算子の形で（ｘ∧ａ）∨（¬ｘ∧ｂ）のように表すこともできる。
【０１６９】
ＢＤＤは、公知のグラフ表現を有する。図５はこの表現の一例である。この図は、２つの変数Ｘ０及びＸ１に対するＢＤＤである。変数の選定された順序付け
【数７】
2004523026.tif 000021
は
【数８】
2004523026.tif 000022
であり、ＢＤＤは次式を表す。
【０１７０】
【数９】
2004523026.tif 000023
【０１７１】
ＢＤＤの構築及び分解のためのＢＤＤに対する基本的な演算は、アルゴリズム１に概説されている。アルゴリズムＭＫは頂点の構築に使用され、アルゴリズムＡＰＰＬＹは２つの頂点に演算子を適用するために使用され、アルゴリズムＥＸＩＳＴＳは、ＢＤＤにおける変数の存在記号化を表すＢＤＤを構築するために使用される。アルゴリズムＶＡＲ、ＬＯＷ及びＨＩＧＨはＢＤＤを分解するために使用される簡単な関数であり、ＶＡＲ（ｕ）は頂点ｕに関連付けられた変数を返し、ＬＯＷ（ｕ）は頂点ｕに関連付けられた低い息子（low-son）を返し、ＨＩＧＨ（ｕ）は頂点ｕに関連付けられた高い息子（high-son）を返す。アルゴリズムＦＵＬＬＯＮＥＳＡＴ（ｕ）は、ＢＤＤｕが、所定の条件を満たす正確に１つの割り当てを有するように（通常、ｕは、少なくとも１つの解を含む実現可能なものでなければならない）、ｖ→ｕを満たす新しいＢＤＤであるｖを計算する。アルゴリズムＡＮＹＳＡＴ（ｕ）は、ｕ（この場合もｕは実現可能なものでなければならない）における変数に対する値に係る、所定の条件を満たす割り当てを返す。最後に、アルゴリズムＳＡＴＣＯＵＮＴ（ｕ）はｕを満たす割り当ての個数を返す。
【０１７２】
ＢＤＤ表現の構築は、平坦化された製品モデルに基づいている。まず、ブール変数の適正な順序付けが選定される。この順序付けの選定は、構成されるＢＤＤのサイズにとって重要である。好適な実施形態において、順序付けは、同じ平坦化された変数を表現するブール変数を、それらが互いに隣接するように保持することによって選定される。コンピュータ製品モデルの場合の適正な順序付けは、次式になる。
【０１７３】
【数１０】
2004523026.tif 000024
【０１７４】
順序付けが選定されると、ルールの各々がＢＤＤとして符号化される。例えば、第３のルールのＢＤＤである（Ｘ０＝０  ／＼  Ｘ１＝０）＝＞（Ｘ４＝０  ／＼  Ｘ６＝０）は、（図４に示された）次式を符号化することによって構築される。
【０１７５】
【数１１】
2004523026.tif 000025
【０１７６】
符号化は、公知のＭＫ及びＡＰＰＬＹアルゴリズムを使用して実行される。以下では、セットＲは複数のルールにてなるセットを表し、各ルールはＢＤＤとして符号化されている。
【０１７７】
その後、各平坦化される変数について、可能なブール変数割り当てを表す領域拘束条件が生成される。例えば、平坦化される変数ｍｏｔｈｅｒｂｏａｒｄ＿ｎａｍｅには３つの可能な値（０，１及び２）が存在する。従って、２つのブール変数を使用して、割り当て（Ｘ０＝０，Ｘ１＝０）、（Ｘ０＝０，Ｘ１＝１）及び（Ｘ０＝１，Ｘ１＝０）をそれぞれ用いることによって、領域が符号化される。図５には、ｍｏｔｈｅｒｂｏａｒｄ＿ｎａｍｅに対する領域拘束条件のＢＤＤが示されている。残りの（未使用の）割り当て（Ｘ０＝１，Ｘ１＝１）は、終端０に至ることが観察される。平坦化される他の全ての変数の領域サイズは（単一のブール変数に対応する）２であることから、他の全ての領域拘束条件のＢＤＤは終端ＢＤＤ１によって表現されることになる。これらのＢＤＤを構築するためのこの好適な方法は、ＭＫ及びＡＰＰＬＹアルゴリズムもまた使用する。以下、セットＤは領域拘束条件にてなるセットを表し、各領域拘束条件はＢＤＤとして符号化されている。
【０１７８】
このステージで構築されるＢＤＤは、全てのルールＲ及び全ての領域拘束条件Ｄを表現する１つの大きなＢＤＤを生成するためのビルディングブロックとして使用される。このＢＤＤは、まず個別のルールに対する複数のＢＤＤを結合し、１つのＢＤＤである次式のＲａｌｌにすることによって構築される。
【数１２】
2004523026.tif 000026
【０１７９】
ここで、∧ｒ∈Ｒｒは、Ｒからの全ての要素ｒを互いに結合した結果を示す。
【０１８０】
図６は、コンピュータ製品の場合のこのＢＤＤを示す。このＢＤＤでは、Ｘ０＝１及びＸ１＝１を選択しても終端１に至ることが実際に可能である点に留意されたい。これは、領域拘束条件が考慮されていないという事実によって生じる。従って、全ての領域拘束条件を含むＢＤＤであるＤａｌｌは、次式のように構築される。
【数１３】
2004523026.tif 000027
【０１８１】
全ての可能な整合された構成を表すＢＤＤは、次式のように全てのルール及び全ての領域拘束条件に対する全てのＢＤＤを結合することによって求められる。
【０１８２】
【数１４】
2004523026.tif 000028
【０１８３】
コンピュータ製品モデルの場合、このＢＤＤは図７に示されている。全ての変数を含む正確に３つの異なるパスが、終端１に至ることが観察される。従って、このコンピュータ製品モデルの場合は、正確に３つの整合された製品構成が（異なる各マザーボードにつき１つずつ）存在する。
【０１８４】
Ｒａｌｌ、Ｄａｌｌ及びＣａｌｌを構築する好適な方法は、アルゴリズム２に示されたアルゴリズムＭＵＬＴＩＡＰＰＬＹを使用するものである。結合的法則を満たしかつ可換な演算子
【数１５】
2004523026.tif 000029
と、頂点のセットＵ＝｛ｕ１，…，ｕｎ｝とが与えられたとして、本アルゴリズムは、次式を表すＢＤＤを返す。
【０１８５】
【数１６】
2004523026.tif 000030
【０１８６】
上述したように、平坦化されたパブリック変数のみが、構成の間にエンドユーザにとって利用可能であると考えられる。必要な情報を捨て去ることなく、これらの変数のみに関する、より小さなＢＤＤを構築することが可能である。このＢＤＤは、好適にはアルゴリズム３に示されたＭＵＬＴＩＥＸＩＳＴＳアルゴリズムを使用し、平坦化されたプライベート変数にてなるセット（セットＶｐｒｉｖと呼ばれる）を存在記号化することによって、次式のように構築される（ＶｐｒｉｖＢは、Ｖｐｒｉｖを表すブール変数にてなるセットを示すものとする）。
【０１８７】
【数１７】
2004523026.tif 000031
【０１８８】
ここで、
変数の有限セットＷ＝｛ｘ１，…，ｘｍ｝に対する∃Ｗを、ｍ個の存在記号∃ｘ１，…，∃ｘｍの省略表記として使用する。
【０１８９】
コンピュータの製品モデルの場合、結果として得られるものは、図８に示されたＢＤＤである。この図では、最上位置の頂点から終端１に至る任意のパスが、当該コンピュータの整合された構成を構成する、ブール変数の１つ又は複数の割り当てを表している。いくつかの変数がパス上に存在しないならば、さらに多くの割り当てが表現される。これらは、値０又は１の何れをも取ることが可能であり、しかも整合された割り当てを結果としてもたらす。シンボルテーブルを使用すれば、この情報をもとの平坦化された変数に関連付けることができる。
【０１９０】
早期の存在記号化（Early Quantification）．
大型の製品モデルの場合、「最初」に整合された構成の全体のセットに関するＢＤＤを構築し、「その後」で、プライベート変数を存在記号化することが、構成の間に非常に大きなＢＤＤを生じさせるということが分かる。早期の存在記号化として知られる技術を符号化処理に適合化させることによって、さらなる優位点を得ることができる（［ジェイ．アール．バーチ（J. R. Burch），イー．エム．クラーク（E. M. Clarke），ディー．イー．ロング（D. E. Long），区分化された遷移関係を用いたシンボルモデルチェック（Symbolic Model Checking with Partitioned Transition Relations），１９９１年ＶＬＳＩ国際会議論文集（Proceedings of the 1991 International Conference on VLSI）］を参照）。鍵となる観察事実は、変数が、あるルールにおいて自由でなければ、次式のように、存在記号化を、ルールの連接的組み合わせ（conjunctive combination）における論理積より下に“移動”させることができるということである。
【０１９１】
【数１８】
2004523026.tif 000032
【０１９２】
この技術の適応化の好適な実施形態は、次のようなものである。即ち、グラフ（Ｖ，Ｅ）は、１つの平坦化された変数でそれぞれラベル付けされた頂点Ｖと、１つのルールでそれぞれラベル付けされた辺Ｅとを備えて構成される。グラフは配向されていないが、２つの頂点を２つ以上の辺で接続することができる（マルチグラフ）。当該グラフは、
・平坦化された各プライベート変数ｖについて、ｖとラベル付けされた頂点と（この頂点を頂点ｖと呼ぶ）、
・頂点ｖ，ｗ及びルールｒの各対について、平坦化された変数ｖ及びｗが共にｒにおいて自由である場合のｖとｗの間の辺（この辺を辺（ｖ，ｒ，ｗ）と呼ぶ。）と
を含む。
【０１９３】
構成されたグラフに基づいて、強く接続された構成要素グラフが生成される（例えば［コーメン（Cormen），レイザーソン（Leiserson），リベスト（Rivest），アルゴリズム入門（Introduction to Algorithms），４８８−４９０ページ］を参照）。Ｓは、強く接続された構成要素にてなるセットを示すものとする。強く接続された構成要素の各々は、サブグラフ（部分グラフ）を備えている。Ｇｉ＝（Ｖｉ，Ｅｉ）は、これらのサブグラフのうちのｉ番目のサブグラフを含むものとする（１≦ｉ≦｜Ｓ｜とする）。Ｖｉはこのサブグラフにおける平坦化されたプライベート変数であり、
【数１９】
2004523026.tif 000033
はこのサブグラフにおけるルールである。
【０１９４】
ここで、グラフＧｉにおける平坦化されたプライベート変数は、構成上、Ｇｉ内に存在しない全てのルールにおいては自由ではない。式１に示された観察を使用すれば、このことは次式を意味する（ＶｉＢはＶｉを表すブール変数であるものとする）。
【０１９５】
【数２０】
2004523026.tif 000034
【０１９６】
次に、下記のステップを実行することにより、複数のルールの順序付けと平坦化された変数とが生成される。
【０１９７】
・各サブグラフＧｉに関して、当該サブグラフに固有な複数の平坦化された変数Ｖｉの順序付けを選定する。Ｏｉは、これらの平坦化された変数の順序付けされたリストであるものとする。
・全ての平坦化された変数の順序付けされたリストを次式で定義する。
【０１９８】
【数２１】
2004523026.tif 000035
【０１９９】
・順序付けＯに基づいて複数のルールをソートする。
【０２００】
最後のステップは、好適には、アルゴリズム４に示されたアルゴリズムＯＲＤＥＲＲＵＬＥＳによって実行される。このアルゴリズムは、入力として、１）順序付けされた複数の平坦化された変数のリストＯと、２）辺Ｅとを取る。ＯＲＤＥＲＲＵＬＥＳ（Ｏ，Ｅ）の呼び出しは、ルールのセットにてなるリストＦ＝＜Ｆ１，…，Ｆ｜Ｖ｜＞を返す。ここで、次式が常に成り立つ。
【０２０１】
【数２２】
2004523026.tif 000036
【０２０２】
次に、式１と式２を組み合わせれば、１）領域拘束条件Ｄａｌｌに対するＢＤＤから開始し、２）ｉ（１≦ｉ≦│Ｖ│）を増大させながら、このＢＤＤに対して、反復して、まずＦｉにおける複数のルールを結合し、その後ｖｉを表すブール変数を存在記号化することにより、整合された構成にてなるセットＣｐｕｂを決定することができる。このタスクは、好適にはアルゴリズム５に示されたように実装されるアルゴリズムＣＯＮＪＯＩＮＥＸＩＳＴＳによって実行される。整合された構成にてなるセットは、次式になる（ここで、ＯＢは、Ｏを符号化するためのブール変数のベクトルにてなるリスト＜ｖ１Ｂ，…，ｖ｜Ｖ｜Ｂ＞である）。
【数２３】
2004523026.tif 000037
【０２０３】
大部分のＢＤＤパッケージでは、宣言される変数の個数は、初期設定時に例えばｎとして与えられる。よって変数は、０からｎ−１までのインデックスを使用して示される。宣言される変数の個数は、例えばＳＡＴＣＯＵＮＴアルゴリズムにおいて使用される。パブリックブール変数の中にＣｐｕｂの自由変数のみが存在するとしても、単にＳＡＴＣＯＵＮＴを使用することで、整合された構成の個数を計数することはできない。これをすると、ｊをプライベートブール変数の個数として、係数２ｊだけ大きな個数がもたらされることになる。整合された状態の正しい個数を得るためには、結果をこの係数で除算する必要があるが、代替として、パブリックブール変数の個数に等しい宣言された変数の個数を使用してＢＤＤパッケージを初期化し直すこともできる（次いで、ＢＤＤ  ｗｒｔ．を新しい変数のインデックスに符号化し直す必要がある）。ここでは、後者のアプローチを選ぶことにする。
【０２０４】
算術演算の符号化．
コンピュータ製品モデルは、いかなる算術演算も含まない。しかしながら、上述したように、製品モデルの本好適な実施形態は、注意深く選択された所定の算術演算、即ち２つの式の加算、２つの演算の減算、及び式と定数との乗算を可能にして「いる」。これらの算術演算が可能にされる理由は、１）製品のモデル化の間にはこれらが有益となり、２）同時に、このような式を符号化するための効率的なＢＤＤ演算が存在することにある。
【０２０５】
鍵となる観察事実は、静的拡張の間であってかつ製品モデルがブール形式に符号化される直前には、全てのルールにおける全ての式は、これらの基本的な算術演算と平坦化された変数に対する（不）等式とのブール結合であるということにある。標準的なブール等価（equivalences）を使用すれば、全てのルールを、下記の文法（ＢＮＦ形式で書かれている）によって生成される形式で書き表すことができる。
【０２０６】
【数２４】
2004523026.tif 000038
【０２０７】
ここで、ｃｏｎｓｔａｎｔは定数を表し、ｖａｒｉａｂｌｅは平坦化された変数を表す。
【０２０８】
ＢＤＤにおいて、これらの算術演算を符号化する方法は公知である。参考文献には、［アラン・ジョン・フー（Alan John Hu），二分決定ダイヤグラムを使用する効率的な形式検証技術（Techniques for Efficient Formal Verification Using Binary Decision Diagrams），スタンフォード大学計算機科学科博士学位論文（Ph. D. thesis, Stanford University, Department of Computer Science），テクニカル・レポート第ＣＳ−ＴＲ−９５−１５６号］及び［ヨルン・ボー・リンド−ニールセン（Joern Bo Lind-Nielsen），大型状態／イベント・システムの検証（Verification of Large State/Event Systems），コペンハーゲン工科大学情報技術科博士学位論文（Ph. D. Thesis, Department of Information Technology, Technical University of Copenhagen），ＩＴ−ＴＲ：２０００−０３２］の２つがある。
【０２０９】
製品テーブルの符号化．
上述したように、（典型的にはデータベースで表現される）製品テーブルは、ルールを適正な方法で表現するために使用可能である。最初に製品テーブルをテキストのルールに明示的に翻訳してその後に上記ルールをＢＤＤに翻訳するということは必要ではない。代わりに、製品テーブルから直接にＢＤＤを構築することができる。
【０２１０】
この処理の好適な実施形態は、アルゴリズム６に示されたアルゴリズムＶＩＲＴＵＡＬＩＺＥＴＡＢＬＥである。このアルゴリズムは、各セルを作表し、このセルについてＢＤＤを構築し、作表の結果を一時的なＢＤＤノードに累積する。補助関数ＶＩＲＴＵＡＬＩＺＥＣＥＬＬは、特定セルに対するＢＤＤを構築する。このアルゴリズムの実装は、平坦化された変数をブール変数にマップする方法を発見するために、シンボルテーブルを使用する。
【０２１１】
この方法には、テーブルフィルタに関する情報をシンボルテーブルに追加し、かつこの情報を使用するように補助関数ＶＩＲＴＵＡＬＩＺＥＣＥＬＬを変更することによって、テーブルフィルタを容易に追加することができる。
【０２１２】
サムタイプの符号化．
コンピュータ製品モデルは、列挙されたタイプの値（例えば［ＩＤＥ│ＳＣＳＩ］）を含んでいる。同じくＢＤＤを使用して符号化されることが可能なより一般的なタイプは、（多くの古典的なタイプのシステムから知られた）サムタイプ（sum type）である。この複合タイプは、（列挙の場合におけるような）タグと、（任意のタイプをとることが可能な）値とを許容する。追加のハードディスクが存在しないか又は（特定のタイプで）存在するかのいずれかが可能なサムタイプのモデル化の一例は、次の通りである。
【０２１３】
［製品モデル７］
2004523026.tif 000039
【０２１４】
ｅｘｔｒａｈａｒｄｄｉｓｋの可能な値は、ＡＢＳＥＮＴ（存在しない）、ＰＲＥＳＥＮＴ（存在する）（ＩＤＥ）、及びＰＲＥＳＥＮＴ（ＳＣＳＩ）である。これらの値のうちの１つを符号化したい場合は、１）ＡＢＳＥＮＴタグを選択しているのかそれともＰＲＥＳＥＮＴタグを選択しているかということについて検索し、かつ２）後者の場合はどちらの部分値（ＩＤＥ又はＳＣＳＩ）を選択しているかということについて検索する必要がある。好ましい本実施形態は、これらの２つの部分を別個に符号化する。この特定の場合では、１つのブール値（Ｐ）は追加のハードディスクがＰＲＥＳＥＮＴであることを示し、１つのブール変数（Ｔ）はタイプがＳＣＳＩであることを示す。
【０２１５】
この符号化を使用すると、Ｐ＝偽であればＴの値は意味を成さないということが観察される。（Ｐ＝偽であれば、２つの異なる値の割り当て、即ちＰ＝偽、Ｔ＝偽と、Ｐ＝偽、Ｔ＝真とが存在する。）表現のサイズを制限しかつ意味のある割り当ての個数を計数できるように、各部分値に対して「デフォルト値」を選定する。次に、この部分値が選択「されない」場合にはいつでも部分値はデフォルト値をとらなければ「ならない」ことを表わす「正規化拘束条件」を定義する。ｅｘｔｒａｈａｒｄｄｉｓｋの例では、Ｔのデフォルト値を偽として選定している。よって、正規化拘束条件は次式になる。
【０２１６】
【数２５】
2004523026.tif 000040
【０２１７】
このようなサムタイプが発生する場合は、全ての正規化拘束条件はＢＤＤ  Ｃｐｕｂ上で結合（conjoin）されて、複数の整合された構成にてなるセットを表現する最終的なＢＤＤが取得される必要がある。
【０２１８】
仮想テーブルを使用する対話式構成．
次に、仮想テーブルを使用して構成を実行する。本発明を限定することなく、ユーザは、通常、この処理に関与する。ユーザは、仮想テーブルにインターフェースで接続するコンピュータプログラムである構成アシスタントと対話する。一般に、ユーザとコンピュータプログラムとによって実行される構成セッションは、構成アシスタントが下記のような構成処理を用いてユーザをガイドする対話式の反復的な構成であると考えることができる。
【０２１９】
・構成アシスタントは、仮想テーブルを使用することで、ユーザに提供される情報を発見し、
・ユーザは、彼／彼女の希望に関連した情報を提供する。
【０２２０】
このような構成セッションのための“プロトコル”は、多くの方法で構成されることが可能である。本発明を限定することなく、本セッションは、典型的には（構成アシスタントの視点から捉えられた）下記のステップを含む反復的な処理である。
【０２２１】
１．仮想テーブルを検査するステップ。仮想テーブル固有の情報量は、一般に膨大である。従って、構成アシスタントは仮想テーブルから限定された量の情報のみを抽出可能である必要がある。しかも、提供されるその情報は、与えられたコンテキストに関連しかつ十分なものである必要がある（ここで、コンテキストは、典型的には先に選択されている）。
２．ユーザにこの情報を提供するステップ。これは、ユーザが、与えられた時刻に彼／彼女がどのオプションを有しているかということと、構成される製品の整合性に選択がどのような影響を与えるかということとを告げることができるように提供される必要がある。
３．ユーザが（複数の）選択を実行する／取り消すことを可能にするステップ。構成アシスタントは、この段階ではユーザに既に情報を提供しているため、ユーザが整合された選択を行うことは容易であるが、ユーザが、以前の選択との互換性を持たない選択をとにかく行ってしまうという場合もある。構成アシスタントは、このようなあらゆる場合に道理合理的な対応をしなければならない。何を以て合理的とするかは、アプリケーションに依存する。しかしながら、構成アシスタントは、もう１度整合された複数の選択にてなるセットに到達するために、先行するいくつかの選択を犠牲にせざるを得ない場合も多い（これらの犠牲についてユーザに通知する）。
４．仮想テーブルを使用して、ユーザによって行われた選択の結果を計算するステップ。
【０２２２】
この反復的な処理は、ユーザがセッションの終了を決定するまで続く。この段階で整合されかつ完全な構成が発見されていれば、これを発注システム（order placement system）などに提供することができる。
【０２２３】
ユーザと構成アシスタントとの間の通信は、ユーザインターフェースを介して実行される。図３は、ｐｃ製品モデルのためのユーザインターフェースのスクリーンショットである。このユーザインターフェースにより、ユーザは、既に実行された選択を見ることができ（例えば、ユーザは、構成要素ハードディスク（Ｈａｒｄｄｉｓｋ）１に、選択肢ＩＢＭ  ＤｅｓｋＳｔａｒ  ２５ＧＰ  １０，１ＧＢを選択している）、（ここでは、目下ＣＰＵの選択肢を示している“ポップアップ”ウィンドウにより）何の選択肢が利用可能であるかということを見ることができ、（ここでは、黒の背景色を使用して）これらのうちのどの選択肢が先行する全ての選択との互換性を有するかということを見ることができる。ユーザは、構成要素に対する１つの選択肢を選択することや、先に行った構成の選択を取り消すことなどができる。下記の２つの追加機能により、ユーザの作業はさらに楽になる。
【０２２４】
・ユーザが希望する全ての選択を彼／彼女が実行すると、（選択が行われなかった全ての構成要素の整合された選択を実行することにより）構成アシスタントに構成を終了させるボタン（コンフィジット！（ConfigIt!））が設けられる。
・他のボタンにより、ユーザは、例えばｐｃショップの標準型のワークステーションのような予め構成された選択肢から選ぶことができる。ユーザはこのワークステーションを後でさらに変更することも随意に可能であり、しかも構成アシスタントからの援助も得られる。
【０２２５】
一般的な場合は、このようなユーザインターフェースをウェブブラウザに提示するものであり、明らかに通信のためのインターネットの使用を可能にする。仮想テーブルは、「仮想テーブルサーバ」上、又はウェブブラウザを実行するクライアント上の何れかに配置されることが可能である。第１の場合では、構成アシスタントは、（並列して動作し、インターネットを介して通信する）サーバとクライアントスレッドとを備える。第２の場合では、構成アシスタントは、典型的には、ウェブブラウザの内部で単独で動作する。両方のアプローチとも実現可能であり、配備の方法は、与えられた構成セッションにはどの特性が必要であるかということに基づく必要がある。しかしながら、第１のアプローチが好ましい実施形態である。
【０２２６】
われわれの枠組みにおいては、構成要素は平坦化された製品変数に対応し、選択肢は値に対応することを想起されたい。本発明を限定することなく、下記の擬似コードは、一般的に構成アシスタントが動作する方法を記述している（明らかに、詳細は多くの方法で取り扱われることが可能であり、ユーザが利用できる正確なコマンドは異なるものである可能性があり、システムからのフィードバックは異なる可能性があり、関連したステップのうちの多くのものの順序は変更される可能性がある）。
【０２２７】
［擬似コード１］
2004523026.tif 000041
【０２２８】
変数Ｓは、複数の選択にてなる順序付けされたリストであり、各選択は対（ｖ，ｄ）を含んでいる。ここで、ｖは平坦化された変数であり、ｄは平坦化された値である。選択は、一般に、仮想テーブルにおいて利用可能な、複数の整合された構成にてなる空ではないセットを表現している。
【０２２９】
初期状態では何の選択も行われていないので、Ｓは空のリストであり、仮想テーブルにおける整合された構成の完全なセットを表している。
【０２３０】
これで、Ｓ及び仮想テーブルから取得されうる情報がユーザに提示される。典型的には、各平坦化された変数について、Ｓと互換性を有する可能な選択がユーザに示される。
【０２３１】
ここで、ユーザはコマンドＣに関して質問される。コマンドは、Ｓとの互換性を有した選択のうちの１つの「選択」であるか、既にＳに存在する選択の「選択取り消し」であるか、選択の「強制」であるか、又は、選択が全ての平坦化されたパブリック変数に関して行われる場合は、構成を「終了」することである可能性がある。
【０２３２】
コマンドＣ及び先行する選択Ｓに基づいて、下記のように新しい選択リストが計算される。
【０２３３】
・「選択」の場合では、新しい選択はＳとの互換性を有する。従って、この新しい選択は単にＳの終わりに追加される。これで、Ｓは、複数の構成にてなる、より小さい（又は同等の）セットを表すことになる。
・先の選択の「選択取り消し」では、選択は単にリストＳから除去される。これで、Ｓは、複数の構成にてなる、より大きい（又は同等の）セットを表すことになる。
・選択の「強制」の場合は、少しばかり複雑である。強制とは、“この選択が他の選択との互換性を持たないとしても、Ｓにおける他の選択を犠牲にしてこの選択を「強制する」”ことを意味する。新しいＳ’は、下記によって求められる。
１．新しい選択をＳの「前」に追加する。（Ｓは「順序付けされた」リストであることを想起されたい。）
２．Ｓ’を新しい空のリスト＜＞に初期化する。
３．Ｓの前から開始して、Ｓにおける各選択ｓについて、
−ｓがＳ’における選択との互換性を持てば、ｓをＳ’の終わりに追加し、
−ｓがＳ’における選択との互換性を持たなければ、廃棄する。
４．新しい選択がＳ’になる。
・「終了」の場合では、作業は終了し、整合されかつ完全な構成Ｓが返され、かつ例えば発注システムへと廻される。
【０２３４】
ユーザと構成アシスタントとの間の通信に関する詳細が変更されるとしても、擬似コードを実装するための仮想テーブルに関する基本アルゴリズムは、多かれ少なかれ同じものであることが分かる。一般的には、以下の主要なアルゴリズムが必要とされる。
【０２３５】
・仮想テーブルを１つ又は複数の選択と組み合わせ、その組み合わせに整合性があるか否かをチェックするための（複数の）アルゴリズム。
・仮想テーブルと、優先順位を与えられた、整合性を持たない可能な構成にてなるリストとに関して、どの選択が許容され得るものであるかということと、その選択を整合されたものにするためにはどの選択が“犠牲”にされるかということとを決定できるアルゴリズム。
・仮想テーブル及び幾つかの整合された選択に関して、選択されていない全ての構成要素にとって整合された選択を決定するアルゴリズム。
・与えられた選択にてなるセットにとって整合された構成の個数を計数するアルゴリズム。
・所定の変数に関して、先の選択との互換性を有する可能な選択を決定するアルゴリズム。
【０２３６】
これらのアルゴリズムは、一般に、仮想テーブルにおけるＤＡＧの基本的なアルゴリズム（ＢＤＤの場合では、アルゴリズム１に示されたアルゴリズム）を利用して実装される。
【０２３７】
対話式構成の好適な実施形態．
対話式構成システムの好適な実施形態は、仮想テーブルサーバ上とウェブブラウザの中とでそれぞれ動作するサーバとクライアントスレッドとを備えた構成アシスタントである。まず、仮想テーブル上の主要なアルゴリズムの好適な実施形態を提示する。次に、サーバとクライアントのアルゴリズムを提示する。
【０２３８】
基本的なＢＤＤアルゴリズムは、ダイナミック・プログラミングとして知られるプログラミング技術を利用している。従って、ＢＤＤ上での計算結果は（利用可能なメモリなどに依存して）キャッシュされている。これは、同じ引数による再計算は一般に一定の時間で実行されるということを含意している。いくつかのアルゴリズムはこれを使用し、一時的なＢＤＤを有するテーブルを維持する代わりに、基礎となる演算が（同じ引数によって）呼び出され、その結果は（一般に）一定時間利用可能である。このアプローチは、“状態なし（ステートレス）”サーバの実装をさらに可能にしている。
【０２３９】
最初の４つの主要なアルゴリズムは、仮想テーブルと選択との組み合わせに関するものである。
【０２４０】
アルゴリズム７に示された第１のアルゴリズムＣＯＮＦＩＧ１は、仮想テーブル（Ｃａｃｔｕａｌ）を１つの選択と組み合わせるために使用される。上記選択は、平坦化された変数ｖと値ｄとを含んでいる。最初に、上記選択を表現するＢＤＤであるｕが構築される。このＢＤＤは、１）（シンボルテーブルに質問することによって）ｖを表すブール変数＜ｖ１，…，ｖｎ＞と、ｄを表すブール値＜ｄ１，…，ｄｎ＞とを決定することと、２）ブール変数と値との各対（ｖｉ，ｄｉ）に関して、（ｖｉ＝ｄｉ）に対するＢＤＤを構築することと、３）ＭＵＬＴＩＡＰＰＬＹ（→，・）を使用してこれらのＢＤＤを組み合わせ、１つのＢＤＤを取得することとによって構築される。この後、ｕは仮想テーブルを表すＢＤＤと結合され、新しいＢＤＤが発生される。このＢＤＤは、（例えば製品モデルのルールを表す）元の仮想テーブルと表すとともに選択（ｖ＝ｄ）を表す、整合された構成にてなるセットである。但し、構成の空のセットはＢＤＤ  ０で表されるということを注意する。従って、結果的に得られるＢＤＤが０であれば、その仮想テーブルは選択との互換性を持たない。
【０２４１】
以前に議論された例示となるコンピュータ製品モデルを想起していただきたい。図８には、ルール及び領域拘束条件を表すＢＤＤが示されていた。ハードディスクがＳｅａｇａｔｅ−Ｂａｒｒａｃｕｄａ−９−９，１ＧＢに選択されたときの整合された構成にてなるセットを表すＢＤＤは、ＣＯＮＦＩＧ１によって決定されることが可能である。図９にその結果が示されている。但し、１に至るパスは１つのみであるということを注意する。これは、他の全ての構成要素がハードディスクの選択によって暗黙的に選定されることを意味する。英文明細書２９ページのシンボルテーブルを調べると、これがＡｏｐｅｎ−ＡＸ６ＢＰ−ＡＴＸのマザーボードと、（当然ながら）Ｓｅａｇａｔｅ−Ｂａｒｒａｃｕｄａ−９−９，１ＧＢのハードディスクと、Ｉｎｔｅｌ−Ｃｅｌｅｒｏｎ−Ａ−３６６ＭＨｚのｃｐｕとに対応することは容易に分かる。
【０２４２】
アルゴリズム８に示されたアルゴリズムＣＯＮＦＩＧＣＯＮＳＩＳＴＥＮＴは、幾つかの選択Ｓｎｅｗを表すＢＤＤを構築する。本アルゴリズムは単にＣＯＮＦＩＧ１を反復して適用し、漸次小さくなる構成のセットを表すＢＤＤを発生する。但し、各選択が互換性を持たなければ、返されるＢＤＤは０であり、“いつ”問題が発生したかということについて知ることは不可能である。
【０２４３】
これに対処するのは、アルゴリズム９に示されたアルゴリズムＣＯＮＦＩＧＣＨＥＣＫである。Ｓｎｅｗにおける選択の順序付けは、複数の選択に優先順位を与えるために使用される。先のアルゴリズムの場合と同様、個別の選択にＣＯＮＦＩＧ１が適用される。選択が整合されているものである限り、その選択は、整合された選択にてなるリストに追加される。しかしながら、ある選択が先の選択と整合しないことが分かれば、その選択は“拒絶”され、先行する構成のセットが維持される。拒絶された選択は、１つのリストにまとめられる。アルゴリズムが終了すると、空ではない構成のセットを表すＢＤＤが返される。初期状態の仮想テーブルは空でないという（妥当な）仮定の下で、このアルゴリズムは、空ではない構成のセットを表すＢＤＤを常に返す。さらに、整合されかつ拒絶された選択のリストが返される。
【０２４４】
アルゴリズム１０に示された次のアルゴリズムＣＯＮＦＩＧＩＴは、１）互換性を有する選択にてなるセットに基づいて、構成にてなるセットを制限し、かつ２）残りの製品変数に対する互換値を自動的に選択するために使用される。本アルゴリズムはＣＯＮＦＩＧＣＯＮＳＩＳＴＥＮＴとして開始し、空ではない解のセットＣａｃｔｕａｌを表すＢＤＤを発生する。その後、既知のＢＤＤアルゴリズムＦＵＬＬＯＮＥＳＡＴが使用される。このアルゴリズムは、Ｃａｃｔｕａｌから単一のパスを含むＢＤＤを構築する。このＢＤＤは、正確に１つの構成を表現する。次に、既知のＢＤＤアルゴリズムＡＮＹＳＡＴが使用され、このパスによって表されるブール選択が取得される。シンボルテーブルの“後ろ向き”の使用により、製品選択が決定される。
【０２４５】
次の２つのアルゴリズムは、仮想テーブルについて質問するために使用される。
【０２４６】
アルゴリズム１１に示されたアルゴリズムＣＯＮＦＩＧＣＯＵＮＴは、仮想テーブルにおける整合された構成の個数を計数する。この個数を決定するためにアルゴリズムＳＡＴＣＯＵＮＴが使用される。しかしながら、単にこの個数を返すことができるようになるためには、下記の３つの重要な詳細事項が存在する。
【０２４７】
１．仮想テーブルを符号化することに係る好適な実施形態においては、仮想テーブル上に領域拘束条件が結合された。領域拘束条件がなければ、“不当な”パスが存在することになり、誤った構成個数が生じる。
２．仮想テーブルを符号化することに係る好適な実施形態においては、全てのサムタイプが正規化された。正規化なしでは、（英文明細書３５ページの例より）値ＡＢＳＥＮＴに関する変数に係る２つ以上のブール選択が存在することになり、誤った構成個数が生じる。
３．仮想テーブルを符号化することに係る好適な実施形態においては、仮想テーブルを構築した後にＢＤＤパッケージが再度初期化され、これにより、プライベートブール変数が除去された。ＢＤＤパッケージが再度初期化されない場合では、ＳＡＴＣＯＵＮＴから取得された数を２ｎで除算する必要がある。ここで、ｎは、（シンボルテーブルを検査することによって取得される）プライベートブール変数の個数である。
【０２４８】
コンピュータ製品モデルの仮想テーブルを表すＢＤＤ上でＣＯＮＦＩＧＣＯＵＮＴを使用することは、コンピュータの整合された構成の個数、すなわち３を返す。この個数は、１に至るパスの個数を計数することによっても求めることができる。
【０２４９】
アルゴリズム１２に示されたアルゴリズムＤＥＴＥＲＭＩＮＥＤＯＭＡＩＮは、与えられた平坦化される変数ｖｉと仮想テーブルＣａｃｔｕａｌとに関して、どの可能な値が選択されるるかということを決定する。本アルゴリズムは、ｖｉを表すブール変数ｖｉＢを除く全てのブール変数Ｘを存在記号化することによって動作する。これらの存在記号化の結果は、構成の視点からすると仮想テーブルを表すＢＤＤである。この仮想テーブルは、それが１つの列（ｖｉの可能な値を有する列）のみを含むという、優れた特性を有する。製品変数は仮想テーブルの形状に起因して他の変数とのいかなる相互従属関係も持ちえない（１列のみがある）ので、領域は、単に仮想テーブルにおける要素をリストに列挙するだけで決定可能である。これは、１）仮想テーブルにおけるブール変数ｖｉＢの割り当てにてなるセットを発見し、２）これらの各々を平坦化された値に翻訳することによって行われる。
【０２５０】
ある例示となる例は、コンピュータ製品モデルの初期状態の仮想テーブルに関して、ｍｏｔｈｅｒｂｏａｒｄ＿ｎａｍｅの平坦化された変数の領域を決定するものである。ｍｏｔｈｅｒｂｏａｒｄ＿ｎａｍｅを表すブール変数は、Ｘ０及びＸ１である。他の全てのブール変数は存在記号化され、図１０（図５と等価な構成）に示されたＢＤＤを生じる。このＢＤＤは、ブール変数Ｘ０及びＸ１の３つの割り当て、（０，０）、（０，１）及び（１，０）を有する。シンボルテーブルを使用することによって、対応する平坦化された値を決定することができる。
【０２５１】
上述のアルゴリズムは、多くの異なる構成システムを実装するために使用可能である。次に、インターネット等のネットワークを介したサーバとクライアントスレッドとの通信を含む構成アシスタントにおいて、これらが如何に使用されるかを示す。仮想テーブルは、構成の間に必要な計算を実行する「仮想テーブルサーバ」上に配置されている。「クライアント」は、構成処理に関する情報をユーザに提示することや、選択に関して質問することなどのために使用される。
【０２５２】
本好適な実装は、２つのスレッドのＣＯＮＦＩＧＣＬＩＥＮＴ（クライアント側）とアルゴリズムＣＯＮＦＩＧＳＥＲＶＥＲ（サーバ側）とを含んでいる。この２つのアルゴリズムは、各々アルゴリズム１３及びアルゴリズム１４に示されている。
【０２５３】
ＣＯＮＦＩＧＣＬＩＥＮＴは、１つの構成セッションの間に実行される。ユーザが適切な構成を発見してその構成セッションを停止することを希望すると、本アルゴリズムは取得された構成を返す。（“返す”とは、実際に、典型的には、結果を発注モジュールなどに送信することによって置き換えられる。）
【０２５４】
ＣＯＮＦＩＧＳＥＲＶＥＲアルゴリズムは「終了することがない」。起動するとループに入り、サービスを提供すべきクライアントを待機する。これがクライアントから構成コマンドを受信すると、これは結果を計算し、この結果を即座にクライアントに返す。その後は、開始にループして戻り、新たなクライアントからの（又は同じクライアントからの可能性もある）新たなコマンドを待つ、等々が続く。
【０２５５】
通信は、ＳＥＮＤ（送信）及びＲＥＣＥＩＶＥ（受信）等の標準的なプリミティブ（基本要素）を使用して特定される。プロトコルは次のようになる。まず、クライアントがサーバに構成コマンドを送信する。サーバは、この構成コマンドを受信し、結果を計算する。この結果は、クライアントに返信される。クライアントは結果を受信し、ユーザに情報を提供してユーザにユーザコマンド（選択、終了など）について質問する。このユーザコマンドを受信すると、新しい構成コマンドがサーバに送信される、等々が続く。
【０２５６】
クライアントには、単一の引数、即ち平坦化されたパブリック変数にてなるセットが提供される。アルゴリズムは、以下のように実行される。
【０２５７】
１．まず、“空の選択リストに関する情報を私にください”という構成コマンドがサーバに送信される。
２．その後で、サーバから下記のものを含む情報が受信される。
Ｓａｃｔｕａｌ  ユーザによって既に行われた選択にてなるリスト。
Ｓｒｅｊｅｃｔｅｄ  強制（Force）演算（詳細は後述する）を行うことにより得られる非互換性に起因して拒絶された選択にてなるリスト。
Ｎ  既に行われた選択に関する整合された構成の個数。
＜Ｄ１，…，Ｄｎ＞  各平坦化されたパブリック変数ｖｉに関する、整合性のない構成に至ることなく選択されることが可能な値にてなるセット。
３．この情報が、ユーザに提示される。
４．ユーザからのコマンドが受信されるＩ。可能なユーザコマンドは、以下のものである。
【０２５８】
・Ｓｅｌｅｃｔ（ｖ，ｄ）．平坦化されたパブリック変数の選択ｖに値ｄを加える（即ち、対（ｖ，ｄ））。ユーザインターフェースは、ｖが変数ｖｉであればｄ∈Ｄｉである（ゆえに、この選択は整合された構成をもたらす）ことを保証する必要がある。
・Ｆｏｒｃｅ（ｖ，ｄ）．平坦化されたパブリック変数の選択ｖに値ｄを加える。この選択が先の選択ｓ’に整合しなければ、ユーザはｓ’が拒絶されることを希望する。
・Ｄｅｓｅｌｅｃｔ（ｖ）．平坦化されたパブリック変数の選択ｖを除去する。
・Ｒｅｓｅｔ．全ての選択を除去する。
・ＰｒｅＣｏｎｆｉｇｕｒｅ（Ｓ）．全ての選択を除去し、代わりに標準的な選択にてなるリストＳ（例えば、標準的なワークステーション）を選ぶ。
・ＣｏｎｆｉｇＩｔ．値が選択されていない全ての平坦化されたパブリック変数に関して、構成プログラムに任意の整合された選択を選ばせる。
・Ｓｔｏｐ．対話式構成を終了する。サーバに、例えば発注システムである呼び出しプログラムに実際の選択を返させる。ユーザインターフェースは、現在の選択が完全な選択を含んでいることを保証する必要がある（即ち、Ｎは１でなければならない）。
【０２５９】
５．ここで、ユーザコマンドがＳｔｏｐであれば、アルゴリズムは終了し、取得された選択を返す。
６．そうでなければ、構成コマンドが構成されてサーバに送られる。可能な構成コマンドは、以下のものがある。
【０２６０】
・Ｃｏｎｆｉｇ（Ｓ）．（おそらくは整合されていない）選択Ｓに関する情報を計算するコマンドをサーバに送る。選択Ｓは、次のように構成される。
−ユーザコマンドがＳｅｌｅｃｔであれば、新しい選択が単に選択リストの終わりに追加される。
−ユーザコマンドがＦｏｒｃｅであれば、新しい選択が、代わって、選択リストの前に追加される。非整合性が存在すれば、強制された選択が受け入れられ、他の選択（後に選択のリストに配置される）は拒絶される。
−ユーザコマンドがＤｅｓｅｌｅｃｔであれば、関連した平坦化された変数が選択リストから単に除去される。
−Ｒｅｓｅｔであれば、新しい選択は空である。
−ＰｒｅＣｏｎｆｉｇｕｒｅであれば、新しい選択は標準的なリストに基づいて行われる。
・ＣｏｎｆｉｇＩｔ．整合された選択Ｓに関する情報を計算する。値が選択されていない全ての平坦化されたパブリック変数に関して、任意の整合された選択を行う。
【０２６１】
７．その後で、再度サーバから情報が受信される、等々が続く。ステップ２を参照。
【０２６２】
サーバアルゴリズムの目的は、クライアントアルゴリズムのための計算上の必要性を満たすことにあり、かつ、クライアントと上述した主要な構成アルゴリズムとの間のグルー（glue）コードとして捉えることができる。サーバアルゴリズムには、次のような引数が提供される。
Ｃｂａｓｉｃ  仮想テーブルを表すＢＤＤであるＣｐｕｂ。
＜ｖ１，…，ｖｎ＞  平坦化されたパブリック変数にてなるリスト。
Ｙ  シンボルテーブル。
【０２６３】
計算の間において、変数Ｓａｃｔｕａｌは、ユーザが行った選択の（順序付けされた）リストである。これらの選択の各々は対（ｖ，ｄ）を含んでいる。ここで、ｖは平坦化されたパブリック変数であり、ｄはｖの領域からの値である。ＢＤＤであるＣａｃｔｕａｌは、実際の選択Ｓａｃｔｕａｌに関する全ての整合された構成を表している。
【０２６４】
本アルゴリズムは、次のように実行される。
【０２６５】
・サーバは、構成コマンドと、選択の順序付けされたリストＳｎｅｗとを受信する。
・コマンドがＣｏｎｆｉｇであれば、Ｓｎｅｗは整合されていない可能性もある。従って、アルゴリズムＣＯＮＦＩＧＣＨＥＣＫを使用して、整合された構成にてなるセットを構築し、かつ受け入れられた選択及び拒絶された選択のリストを構築する。
・代替として、コマンドがＣｏｎｆｉｇＩｔであれば、Ｓｎｅｗは整合されているが、残りの選択が実行される必要がある。これは、ＣＯＮＦＩＧＩＴコマンドを使用して行われる。
・その後に、整合された構成の実際の個数が決定される。
・また、各変数に関して、実際の可能な値が決定される。
・計算された情報はサーバに返信され、アルゴリズムはループして新しいコマンドを待機する。
【０２６６】
最後に、インターネット上に構成アシスタントを配備する好適な方法について記述する。上記方法は、下記の通りである。
【０２６７】
・構成を実行することを希望するユーザは、まずウェブサーバに接続する。
・ウェブサーバは、ユーザのブラウザにおいて実行されるＣＯＮＦＩＧＣＬＩＥＮＴの実装を返す（好適には、ジャバ・スクリプト（Java Script）で実装される）。
・クライアントのウェブブラウザにおいてＣＯＮＦＩＧＣＬＩＥＮＴが開始されると、これは、仮想テーブルを保持しかつＣＯＮＦＩＧＳＥＲＶＥＲアルゴリズムを実行する仮想テーブルサーバ（必ずしもウェブサーバである必要はない）に接続する。
・クライアント及びサーバスレッドは前述したように通信する。
【０２６８】
付録Ａでは、“製品説明”の好適な実施形態（ＸＭＬ文書タイプの宣言）が示されている。
【０２６９】
付録Ａ：製品説明のＸＭＬ文書型宣言
［製品モデル８］
2004523026.tif 000042
2004523026.tif 000043
2004523026.tif 000044
2004523026.tif 000045
【０２７０】
付録Ｂでは、下記の多数のアルゴリズムの好適な実施形態が示されている。
アルゴリズム１：基本的なＢＤＤ演算。
アルゴリズム２：ＭＵＬＴＩＡＰＰＬＹ．頂点にてなるセットに演算子を適用する。
アルゴリズム３：ＭＵＬＴＩＥＸＩＳＴＳ．変数にてなるセットの存在記号化。
アルゴリズム４：ＯＲＤＥＲＲＵＬＥＳ．プライベート変数により複数のルールを順序付ける。
アルゴリズム５：ＣＯＮＪＯＩＮＥＸＩＳＴＳ．複数のＢＤＤを結合し、変数を存在記号化する。
アルゴリズム６：ＶＩＲＴＵＡＬＩＺＥＴＡＢＬＥ．テーブルを表現するＢＤＤを構築する。
アルゴリズム７：ＣＯＮＦＩＧ１．選択に関連して仮想テーブルを制限する。
アルゴリズム８：ＣＯＮＦＩＧＣＯＮＳＩＳＴＥＮＴ．複数の選択にてなるリストに関連して仮想テーブルを制限する。
アルゴリズム９：ＣＯＮＦＩＧＣＨＥＣＫ．複数の選択にてなるリストに関連して仮想テーブルを制限し、空でないことを保証する。
アルゴリズム１０：ＣＯＮＦＩＧＩＴ．互換性のある複数の選択にてなるリストに関連して仮想テーブルを制限し、残りの製品変数に対して互換値を選択する。
アルゴリズム１１：ＣＯＮＦＩＧＣＯＵＮＴ．仮想テーブルにおける整合された構成の個数を計数する。
アルゴリズム１２：ＤＥＴＥＲＭＩＮＥＤＯＭＡＩＮ．仮想テーブルにおける平坦化された変数の可能な値を決定する。
アルゴリズム１３：ＣＯＮＦＩＧＣＬＩＥＮＴ．対話式の構成、クライアント。
アルゴリズム１４：ＣＯＮＦＩＧＳＥＲＶＥＲ．対話式の構成、サーバ。
【０２７１】
【表６】
2004523026.tif 000046
【０２７２】
【表７】
2004523026.tif 000047
【０２７３】
【表８】
2004523026.tif 000048
【０２７４】
【表９】
2004523026.tif 000049
【０２７５】
【表１０】
2004523026.tif 000050
【０２７６】
【表１１】
2004523026.tif 000051
【０２７７】
【表１２】
2004523026.tif 000052
【０２７８】
【表１３】
2004523026.tif 000053
【０２７９】
【表１４】
2004523026.tif 000054
【０２８０】
【表１５】
2004523026.tif 000055
【０２８１】
【表１６】
2004523026.tif 000056
【０２８２】
【表１７】
2004523026.tif 000057
【０２８３】
【表１８】
2004523026.tif 000058
【０２８４】
【表１９】
2004523026.tif 000059
【図面の簡単な説明】
【０２８５】
【図１】構成処理の概観を示す図である。
【図２】コンフィジットスタジオを用いた製品モデルの生成を示す図である。
【図３】ＰＣの対話的な構成を示す図である。
【図４】ＰＣの例を示し、第３のルールを表現するＢＤＤを例示する図である。
【図５】もう１つのＰＣの例を示し、領域拘束条件を表現するＢＤＤを例示する図である。
【図６】もう１つのＰＣの例を示し、ルールを表現するＢＤＤを例示する図である。
【図７】もう１つのＰＣの例を示し、パブリック変数及びプライベート変数の両方が含まれた、ルール及び領域拘束条件を表現するＢＤＤを例示する図である。
【図８】もう１つのＰＣの例を示し、パブリック変数のみが含まれた、ルール及び領域拘束条件を表現するＢＤＤを有する仮想テーブルを例示する図である。
【図９】もう１つのＰＣの例を示し、シーゲート−バラクーダ−９−９（Seagate-Barracuda-9-9），１ＧＢハードディスクを選択した場合の整合された構成を表現するＢＤＤを例示する図である。
【図１０】もう１つのＰＣの例を示し、Ｘ０及びＸ１を除く全ての変数の存在記号化されている仮想テーブルを例示する図である。
【符号の説明】
【０２８６】
Ｘ０，Ｘ１…ブール変数。
【図１】
2004523026.tif 000060
【図２】
2004523026.tif 000061
【図３】
2004523026.tif 000062
【国際公開パンフレット】
2004523026.tif 000063
2004523026.tif 000064
2004523026.tif 000065
2004523026.tif 000066
2004523026.tif 000067
2004523026.tif 000068
2004523026.tif 000069
2004523026.tif 000070
2004523026.tif 000071
2004523026.tif 000072
2004523026.tif 000073
2004523026.tif 000074
2004523026.tif 000075
2004523026.tif 000076
2004523026.tif 000077
2004523026.tif 000078
2004523026.tif 000079
2004523026.tif 000080
2004523026.tif 000081
2004523026.tif 000082
2004523026.tif 000083
2004523026.tif 000084
2004523026.tif 000085
2004523026.tif 000086
2004523026.tif 000087
2004523026.tif 000088
2004523026.tif 000089
2004523026.tif 000090
2004523026.tif 000091
2004523026.tif 000092
2004523026.tif 000093
2004523026.tif 000094
2004523026.tif 000095
2004523026.tif 000096
2004523026.tif 000097
2004523026.tif 000098
2004523026.tif 000099
2004523026.tif 000100
2004523026.tif 000101
2004523026.tif 000102
2004523026.tif 000103
2004523026.tif 000104
2004523026.tif 000105
2004523026.tif 000106
2004523026.tif 000107
2004523026.tif 000108
2004523026.tif 000109
2004523026.tif 000110
2004523026.tif 000111
2004523026.tif 000112
2004523026.tif 000113
2004523026.tif 000114
2004523026.tif 000115
2004523026.tif 000116
2004523026.tif 000117
2004523026.tif 000118
2004523026.tif 000119
2004523026.tif 000120
2004523026.tif 000121
2004523026.tif 000122
2004523026.tif 000123
2004523026.tif 000124
2004523026.tif 000125
2004523026.tif 000126
2004523026.tif 000127
2004523026.tif 000128
2004523026.tif 000129
2004523026.tif 000130
2004523026.tif 000131
2004523026.tif 000132
【国際公開パンフレット（コレクトバージョン）】
2004523026.tif 000133
2004523026.tif 000134
【国際調査報告】
2004523026.tif 000135
2004523026.tif 000136
2004523026.tif 000137