亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

利用有向無環(huán)圖配置產(chǎn)品的方法

文檔序號:6475585閱讀:385來源:國知局

專利名稱::利用有向無環(huán)圖配置產(chǎn)品的方法
技術(shù)領(lǐng)域
:本發(fā)明涉及配置多個部件組成的產(chǎn)品的方法。這些部件之間具有相互關(guān)聯(lián)性,因此需要對各個部件進行合理的選擇以提供一個能運行的產(chǎn)品。一般而言,確定一個共同運行的部件集是一項復雜的任務,通常需要計算機程序的參與輔助。這種計算機程序必須采用有效、準確的方法來處理部件之間的相互關(guān)聯(lián)性。本發(fā)明涉及如何實現(xiàn)該計算機程序。一個復雜的產(chǎn)品由多個部件組成。一般,通過將一個產(chǎn)品看成是由幾類部件組成來形成一個復雜產(chǎn)品的產(chǎn)品型號。對于每一類部件來說,都有一組特定的替換件。這里舉出一個自行車產(chǎn)品型號的例子。一個自行車是由以下幾個部件組成一個車架、一個前輪、一個后輪和一組齒輪。對于車架,存在幾種替換件男式碳素型、女式標準型、男式標準型、越野型。對于前輪部件,有光滑型和越野型。對于后輪部件也存在光滑型和越野型。最后,對于齒輪組也有內(nèi)部三倍速型和外部十倍速型。在配置的語境中,“部件”不應僅被理解為一個物理部件的一般描述。部件也可以是諸如顏色、形狀等的屬性,或者齒輪數(shù)、馬力等參數(shù)。一個部件也可以理解為表達用戶需要、而非產(chǎn)品特征的“需求屬性”,如自行車的類型(越野型、都市型、重載型等)、用戶的品味(時髦型、經(jīng)典型、童真型)、價格、重量或是產(chǎn)品用戶的興趣所在的類似屬性。為了生產(chǎn)一個復雜的產(chǎn)品,必須為每一部件選擇一個特定的替換件。若干選擇被稱為產(chǎn)品的部分配置。對每一部件都選定替換件的完整選擇被稱作為產(chǎn)品的一個完全配置(或一個配置)。隨著產(chǎn)品部件數(shù)量的增加,產(chǎn)品的可選性配置方案數(shù)目迅速增加。例如,在自行車例子里,一個人必須在四種框架,兩種前輪,兩種后輪以及兩種齒輪組中進行選擇。因此,存在4×2×2×2=32種不同的配置。在現(xiàn)實生活中,這類的選擇配置方案可以快速增加到百萬以上。由于不兼容等原因,不是所有的配置方案都能夠正常工作。如果還是以自行車為例,可能前輪和后輪必須是同種型號。另一個需求是,只有男式炭素型車架才能允許配置外部十倍速齒輪組。這些替換件中不兼容性的描述,被稱作是產(chǎn)品要求。產(chǎn)品要求通常由定義部件之間兼容性的規(guī)則表示。當滿足所有要求時,這個配置是相容的。對自行車的例子,在32種可能的配置中有10種不同的相容性配置(8種帶內(nèi)部三倍速齒輪組的配置和2種帶外部10倍速齒輪組的配置)。一般來說,這些要求都很復雜,難以由人來全面檢驗。確定一個相容性配置是一項復雜的任務。一個計算機程序在配置過程中可以起很大的作用。通常,計算機程序通過用規(guī)則檢驗用戶的選擇來工作。這種檢驗一般很難執(zhí)行或者檢驗耗費的時間過長,或者檢驗結(jié)果的的不準確。至少有兩種方法可以用來處理這些規(guī)則顯式列舉法這種方法通常用位向量來表示所有可能的相容性配置。所有的可能配置都通過規(guī)則來校驗,校驗出來的相容性配置列舉在一個列表里,通常使用位向量哈希表。這種方法的一個關(guān)鍵缺陷是,配置的數(shù)目隨著可用部件數(shù)量增加而迅速增加(典型的是,配置數(shù)目隨著部件數(shù)量的增加而指數(shù)級增加)。這意味著需要極大的存儲容量,且該方法也不適用于大型產(chǎn)品型號。這種方法的另一個問題是,即使配置數(shù)量足夠小到可以保存在內(nèi)存中,用來遍歷和處理每種可能配置的算法的運行時間也隨配置數(shù)目而線性增長。規(guī)則/約束傳播法在作出一個配置選擇時,需要檢索規(guī)則數(shù)據(jù)庫以校驗該配置的相容性。檢索的時間難以預期,而為了保證對用戶的及時響應,通常對消耗的時間有限制。為了滿足時間限制,檢索經(jīng)常會在沒有找到完全、準確結(jié)果的情況下,提前結(jié)束。通過重復運用規(guī)則庫中的規(guī)則到作出的選擇上,該檢索建立在信息積累的基礎(chǔ)上。這通常都很費時,費力。而且,檢索時間以及檢索的質(zhì)量,都很大程度上依賴于如何形成規(guī)則。現(xiàn)有技術(shù)的工具應用上述兩種方法。它們被開發(fā)為銷售助理工具,現(xiàn)已應用于互聯(lián)網(wǎng)。在互聯(lián)網(wǎng)上,沒有一個人類銷售助理可解決信息的誤差和缺失。用戶必須自己來完成整個銷售過程,因而也加重了對銷售系統(tǒng)質(zhì)量的需求。銷售系統(tǒng)必須對用戶的需求有快速反應,并保證結(jié)果的準確性。例如,不允許出現(xiàn)和用戶之前選擇不一致的替換件(即,破壞了一些規(guī)則)?,F(xiàn)有技術(shù)的工具很難在保證需要的響應時間的同時獲得準確的結(jié)果(在系統(tǒng)處理多個并發(fā)用戶及復雜產(chǎn)品的同時)。一些專利涉及產(chǎn)品配置US6,115,547披露了一種通過緩存早先配置的特定方法來增加配置程序性能的產(chǎn)品配置法。US5,675,784披露了一種包括用于模型化產(chǎn)品的數(shù)據(jù)結(jié)構(gòu)(三層分級數(shù)據(jù)結(jié)構(gòu))的產(chǎn)品配置法。EP0770239B1披露了一種包括專家系統(tǒng)的產(chǎn)品配置法。該配置法涉及規(guī)則/約束傳播法。US5,206,949披露了一種包括數(shù)據(jù)庫搜索和檢索系統(tǒng)的產(chǎn)品配置法。US5,844,554披露了一種包括用于設(shè)計產(chǎn)品型號的用戶圖形界面的產(chǎn)品配置法。US5,987,473披露了一種包括通過網(wǎng)絡(luò)進行的交互式配置的產(chǎn)品配置法。US5,995,979披露了一種包括允許用戶通過網(wǎng)絡(luò)在數(shù)據(jù)庫中選擇條目的方法的產(chǎn)品配置法。US5,745,765披露了一種包括允許用戶選擇相容性配置的方法的產(chǎn)品配置法。本申請描述的發(fā)明應用在一種在硬件電路形式驗證中已知的符號模型校驗(symbolicmodelchecking)來解決在開發(fā)計算機輔助配置中的計算問題。符號模型校驗參見[K.LMcMillanSymbolicModelCheckingAnApproachtotheStateExplosionProblem]?!裢ㄟ^重復以下步驟反復地配置產(chǎn)品—選擇一個部件—從該部件的替換件組中選擇一個替換件—校驗所述DAG以判斷選定的替換件是否和其它部件的選定替換件兼容。在這里的語境中,部件不應僅被理解為一個物理部件的一般描述。部件也可以是諸如顏色、形狀等的屬性,或者齒輪數(shù)、馬力等參數(shù)。一個部件也可以理解為表達用戶需要、而非產(chǎn)品特征的“需求屬性”,如自行車的類型(越野型、都市型、重載型等)、用戶的品味(時髦型、經(jīng)典型、童真型)、價格、重量或是產(chǎn)品用戶的興趣所在的類似屬性。一個規(guī)則可能涉及到來自,如一個產(chǎn)品中兩個不同部件中的一個替換件的兼容性。但是,規(guī)則最好涉及到更多數(shù)量部件中替換件的兼容性。在一個極端的情況下,當然也不是不可能發(fā)生的,一個規(guī)則涉及到包括每一部件的替換件的產(chǎn)品。自然,涉及到一個或是一組替換件的信息可能是有關(guān)相似性和區(qū)別性的信息。通常,這些信息與另一部件和/或另一部件的替換件相關(guān)。當在DAG中表示了規(guī)則時,不再需要對規(guī)則(通常是大量的規(guī)則)進行校驗。相反,根據(jù)與選擇/選定替換件有關(guān)的信息來遍歷、分析,甚至是修正DAG。這種方法比逐個校驗若干規(guī)則快很多。在這里的語境中,一個替換件被“選定(chosen)”是指它被“選擇(selected)”為需要進行配置的組合起來的產(chǎn)品的一部分。通常,是當這個替換件至少和一個選定的替換件相兼容時。當每個部件都選定好替換件,或者優(yōu)選的是,當這些部件的選定替換件之間互相兼容時,可以結(jié)束這種反復配置。在選擇一個替換件前,需要利用DAG為至少一個部件來確定一組替換件子集,以便該子集中的每一替換件可以和其他部件的選定替換件相兼容,并將這些信息提供給用戶。在這種情況下,用戶需要關(guān)于一個給定部件與一組替換件的兼容性信息——和已選定的替換件相兼容性的信息——以便從該組里確定一個兼容的選擇。該子集可以和用戶的偏好有關(guān),如尺寸、顏色、制造商、生產(chǎn)地等。如果計算機用語音把這些信息提供給用戶時,與系統(tǒng)進行交互將更容易。這是通過向系統(tǒng)提供一個語音合成器并向用戶提供信息來實現(xiàn)的,給用戶提供信息還包括·提供通過語音合成器產(chǎn)生的語音信息?;蛘?,選擇一個部件以及為每個部件選擇一個替換件的步驟還包括·利用DAG來校驗一個部件的哪一個替換件與其他每一部件(即已經(jīng)選定替換件的那些部件)的選定替換件中的至少一種相兼容,·提供該信息給用戶,·允許用戶在至少與每個其他部件的選定替換件之一相兼容的替換件中選擇一個替換件。因此,在該方法里,提供涉及該部件的所有替換件與已選定的替換件的兼容性信息,使得用戶很快就能進行產(chǎn)品配置。但是,相反地或附加地,選擇一個替換件與校驗DAG的步驟最好還包括·選擇或定義選定部件的一個替換件子集,·校驗DAG以確定該子集中何種替換件與其他部件的選定替換件相兼容,及·提供有關(guān)該子集中何種替換件與其他部件的選定替換件相兼容的信息。這尤其適用于用戶還沒有確定一個特定替換件,但他提供一個已被校驗過與其他部件的選定替換件兼容性的替換件子集的情況。這些信息可以用于在配置中進一步引導用戶。另一種好的辦法是·至少定義一次有關(guān)限制至少一個部件的替換件的信息,及·校驗DAG以確定這些部件的何種替換件與限制信息相兼容。這種限制信息可以由用戶提供,關(guān)于部件的替換件中何種替換件與限制信息相兼容的信息也可以提供給用戶。這種限制信息可以是有關(guān)用戶所需的不同組的替換件之間兼容性的信息。這種反復的配置也可以基于用戶的指令而終止,通常是在還沒為每個部件選定/選擇一個替換件,或是選擇/選定的替換件不能完全兼容的時候。然后,有關(guān)包括為每個產(chǎn)品都至少選定一個替換件的所有可能的兼容性產(chǎn)品的信息被提供給用戶。因而,用戶可以終止配置,得到包括已選定替換件的可用相容產(chǎn)品總數(shù)目的信息。反復配置可以包括如下步驟,即獲得所有可能兼容的產(chǎn)品的數(shù)目,其中可能兼容的產(chǎn)品對每個已為其選定一個替換件的產(chǎn)品都包括至少一個選定替換件,并提供該信息給用戶。這種方式,用戶可以被不斷被告知包括已選定替換件的產(chǎn)品的數(shù)目。應注意,用戶能夠為一個指定的部件實際上選擇或選定多個替換件。在這種情況下,相容性的校驗將是對每一替換件的相容性校驗,潛在最終產(chǎn)品的總數(shù)與包含這些替換件之一的潛在最終產(chǎn)品數(shù)目有關(guān)。通常,在一個DAG中表示規(guī)則的步驟可以包括在一個包括下列項的圖中的表示規(guī)則·至少一個終端節(jié)點·多個節(jié)點,包括—一個存在多個可能不相交結(jié)果的數(shù)學表達式及—多個與該表達式可能結(jié)果數(shù)目相對應的指針,其中·至少一個節(jié)點的指針指向另一個節(jié)點,·至少一個節(jié)點的一個指針指向至少一個終端節(jié)點中的一個節(jié)點,及·至少一個節(jié)點是最頂端節(jié)點,從該最頂端節(jié)點定義了一條或多條經(jīng)一個或多個節(jié)點和指針、從一個最頂端節(jié)點到所述至少一個終端節(jié)點中的一個的路徑,每個節(jié)點都至少是一條路徑的一部分。這是一個在DAG中表示規(guī)則的標準方法。因此,這些規(guī)則被表示成數(shù)學公式,并引入一個或多個節(jié)點。每個規(guī)則都包含一個或多個結(jié)果——并且每個節(jié)點的指針都與一個上述結(jié)果相關(guān)。因此,規(guī)則的不同結(jié)果能提供通過圖/DAG的不同路徑的遍歷。因此,在DAG中表示規(guī)則的步驟可以包括向一個或多個節(jié)點提供數(shù)學表達式,每個數(shù)學表達式包含一個數(shù)學操作符,每個操作符描述被相關(guān)節(jié)點指針指向的節(jié)點表示的規(guī)則是如何組合的,以便代表組合的規(guī)則集。在DAG中表示規(guī)則的步驟可以包含在一個包括多個節(jié)點的圖中表示規(guī)則,該圖的數(shù)學表達式是一個布爾表達式和/或一個變量。而且,在DAG中表示規(guī)則的步驟中,也可以包括在一個包括節(jié)點的圖中表示規(guī)則,該圖的數(shù)學表達式根據(jù)指定次序排序,使得對每個節(jié)點,一個實際節(jié)點的表達式在次序上低于該節(jié)點的指針所指的任何節(jié)點的表達式。提供一個順序有助于DAG中的若干操作,如在一個DAG中搜索和合并兩個DAG。為了維護一個適合的DAG,在DAG中表示規(guī)則還包括以下步驟·識別具有相同表達式、且指針都指向相同節(jié)點的第一和第二節(jié)點,·使指向第一節(jié)點的指針指向第二節(jié)點。在那種情況下,兩個代表同樣內(nèi)容的節(jié)點可以簡化成一個節(jié)點。提供DAG的一個優(yōu)選方法,其中在DAG中表示規(guī)則的步驟包括·用邏輯表達式表示每個規(guī)則,·從每個邏輯公式構(gòu)建一個代表該公式的可能解集的部分DAG,·由表示每個邏輯公式的部分DAG來構(gòu)建表示所有規(guī)則的DAG。該方法相當簡單,在于從一個規(guī)則里構(gòu)建一個部分DAG通常是一個容易的工作,且合并DAG也是一項公知的技術(shù),實際上如果利用上述的表達式次序是便利的。優(yōu)選地,提供有關(guān)各個部件替換件信息的步驟包括·選擇用于表示該部件的各個替換件的布爾變量,·為該部件的每個替換件提供一個編碼,作為布爾變量的布爾值組合。將每個規(guī)則表示為一個邏輯公式/表達式的步驟包括提供涉及規(guī)則相關(guān)的替換件的布爾變量,并根據(jù)規(guī)則使這些變量關(guān)聯(lián)。一般,在DAG中表示規(guī)則的步驟優(yōu)選包括提供至少一種類型的終端節(jié)點,并且對包含這種終端節(jié)點的每條路徑,所有表達式與所有涉及該路徑的的指針的相關(guān)結(jié)果的組合涉及一個相兼容產(chǎn)品或不相兼容產(chǎn)品。由以上內(nèi)容看出,一條路徑上節(jié)點的數(shù)學表達式的變量和部件的多個替換件有關(guān)。很清楚,路徑由連接節(jié)點的指針所定義,其中每個指針都關(guān)聯(lián)這一個數(shù)學表達式的結(jié)果,以及給定的變量之間的關(guān)系。因此,路徑的信息——包括終端節(jié)點的信息——優(yōu)選提供關(guān)于產(chǎn)品、替換件以及替換件之間兼容性的信息。優(yōu)選地,在DAG中表示規(guī)則的步驟包括提供一個第一類型和一個第二類型的終端節(jié)點,其中·對每條包括第一類型終端節(jié)點的路徑,所有表達式與所有涉及該路徑指針的相關(guān)結(jié)果的組合涉及一個相兼容產(chǎn)品,并且·對每條包括第二類型終端節(jié)點的路徑,所有表達式與所有涉及該路徑指針的相關(guān)結(jié)果的組合涉及一個不兼容產(chǎn)品。此時,終端節(jié)點的第一類型可用于表示“真”,“一”或者“1”,終端節(jié)點的第二類型可以用來表示“假”,“零”或“0”。一般來說,選擇一個替換件的步驟可包括識別關(guān)于該部件其他任何替換件的布爾變量和包括涉及其他替換件的表達式的節(jié)點,以及在DAG中識別包含上述節(jié)點的路徑并將其中任何一個第一類型終端節(jié)點改變?yōu)榈诙愋?。因此,所述路徑可直接關(guān)聯(lián)一個“不兼容產(chǎn)品”,由于這些產(chǎn)品已不令人感興趣——選定的替換件通常與同部件的其他替換件不相兼容。如果用戶為該部件選擇了一個替換件子集,那么對于不在該子集中的其他部件替換件,自然也是接著同樣的過程。此時,計算不同選擇的可能情況的數(shù)目可以通過如下應用于DAG的步驟執(zhí)行.,對每個最頂端節(jié)點·從最頂端節(jié)點出發(fā),通過執(zhí)行以下步驟反復地查找實際節(jié)點表示的可能情況的數(shù)目—如果該節(jié)點是終端節(jié)點,若它是第一類型,就提供“1”,若它是第二類型,就提供“0”,—否則查找由該實際節(jié)點的指針指向的每個節(jié)點所表示的可能情況的數(shù)目,并從中計算出該節(jié)點所表示的可能情況的數(shù)目。通常,一個具有例如由一個指針表示的可能情況數(shù)目和另一個指針表示的第二數(shù)目的可能情況數(shù)目的節(jié)點來表示的可能情況數(shù)目,可以計算為第一數(shù)目的可能情況和第二數(shù)目的可能情況之和。但是,如果因為DAG的尺寸減小(諸如“本地減小localreduction”),隱節(jié)點(隱藏地)位于實際節(jié)點和第一和/或第二節(jié)點所指的節(jié)點之間,這些隱節(jié)點在查找實際節(jié)點表示的可能情況數(shù)目時也要考慮在內(nèi)。如果,在配置中,一個選擇的替換件和其他選定替換件不相兼容,校驗DAG的步驟還可以包括·提供涉及與該選擇的替換件不相兼容的其他選定替換件的信息,及·將該信息提供給一個用戶。此時,用戶可能會實際輸入或選定/選擇該選擇的替換件,然后撤銷與該替換件不相兼容的其他替換件?,F(xiàn)有很多方法可以提供涉及兼容性的規(guī)則。一個優(yōu)選的方法,其中至少有一個規(guī)則通過如下方式來定義·通過查詢一個數(shù)據(jù)庫,獲得涉及一個或多個部件的替換件的信息,和/或涉及不同部件的兩個或多個替換件之間的兼容性信息,及·利用從數(shù)據(jù)庫中獲得的信息創(chuàng)建一個或多個規(guī)則。一個簡單的實現(xiàn)方法是,該數(shù)據(jù)庫包括一個兩維表,在該兩維表每一行里包括關(guān)于一個每個部件都有一個替換件的產(chǎn)品的信息,這些替換件都相互兼容,其中提供一個規(guī)則的步驟包括提供一個涉及每一行信息的規(guī)則,在DAG中表示規(guī)則的步驟包括提供規(guī)則的邏輯和(disjunction)。因此,該表的每一行包含涉及為每個部件都選定替換件的一個完整產(chǎn)品的信息,其中每個產(chǎn)品的所有替換件都相容。一個單獨的行里的信息可以提供為一個隨后要導入DAG的規(guī)則。從提供產(chǎn)品配置的實體的角度來看,這種方法的優(yōu)點在于,由于規(guī)則僅僅和已識別產(chǎn)品預先確定的范圍有關(guān),只對這些產(chǎn)品進行配置。因此,盡管從進行配置的用戶角度來看,配置除了兼容性外,沒有任何限制,但是這些配置最后都會產(chǎn)生一個供應商已經(jīng)識別的產(chǎn)品。優(yōu)選地,校驗DAG以判斷一個選擇的替換件是否和選定替換件兼容的步驟包括,在該DAG中搜索一條從最頂端節(jié)點到終端節(jié)點的路徑,該查找包括·從作為一個實際節(jié)點的最頂端節(jié)點開始,·重復以下步驟,直到實際節(jié)點是一個終端節(jié)點—估算實際節(jié)點中的數(shù)學表達式并根據(jù)其他部件的選定替換件確定該結(jié)果,—選擇表示該結(jié)果的節(jié)點的指針,—選擇一個被選定指針所指的節(jié)點作為實際節(jié)點?!ぬ峁┖瓦x定替換件相關(guān)的信息·有關(guān)路徑的信息表示該選擇是相兼容的。一個從該DAG中的一條路徑里提供信息的簡單方法是,從該路徑的節(jié)點的表達式中,提供有關(guān)一個給定部件的哪個替換件已被選定的信息,并且包括這些替換件的產(chǎn)品的兼容性信息由該路徑的終端節(jié)點的表示來給定。因此,有關(guān)單個替換件的信息來自節(jié)點的表達式以及連接節(jié)點的指針,通過路徑的終端節(jié)點可以得到兼容性信息。優(yōu)選的方式是,涉及DAG中節(jié)點的表達式是布爾變量,該終端節(jié)點表示“真”或“假”,一條路徑包含一個或多個有一個數(shù)學表達式和一個指向路徑中另一個節(jié)點或終端節(jié)點的指針的節(jié)點,涉及該路徑中節(jié)點數(shù)學表達式中變量的身份(identities)的路徑信息,及其中的值或相關(guān)性,所述特性、值/相關(guān)性涉及部件的選定替換件,如果該路徑的終端節(jié)點表示“真”,則選定部件是兼容的,如果該路徑終端節(jié)點表示“假”則該選定部件是非兼容的。在配置中,要考慮一種一個部件是一個類型的特殊情況,但這種情況可能不提供信息,或者不與如執(zhí)行配置的用戶相關(guān)。因此,需要在配置中“隱藏”這種部件。一個可以隱藏的部件的例子是自行車輪中輪轂的寬度。這種寬度很重要,因為它描述了車架和車輪的兼容性,但一個配置自行車的用戶不需要注意這點。系統(tǒng)可以簡單地隱藏這個部件并確保用戶不能執(zhí)行與隱含地選定的輪轂寬度不兼容的配置(如已選定車架或車輪所定義的)。在那種情況下,在DAG中表示規(guī)則的步驟可以包括·在一個實際DAG中表示規(guī)則,·選擇至少一個要隱藏的部件,·通過以下方式改變所述實際DAG—在包括與選擇的部件的表達式有關(guān)的實際DAG中識別節(jié)點,—從該實際DAG中去掉這些節(jié)點,—增加不包括涉及選擇的部件的表達式的節(jié)點至實際DAG中,以便這些部件隱含的兼容性可被實際DAG反映出來,·將該實際DAG作為表示規(guī)則的實際DAG。因此,在一個方法中簡單地改變該DAG,使得一個為其他部件隱含地選擇替換件的隱藏部件的一個替換件隱含地為其他部件選擇替換件,所以,盡管用戶不能校驗,但隨后的兼容性校驗也會涉及到“隱藏”部件。在修改DAG中,優(yōu)選方式是盡快去掉這些“隱藏部件”。這可通過如下方式實現(xiàn)·對每一規(guī)則,創(chuàng)建一個表示該規(guī)則的部分DAG,·識別至少一個需隱藏的部件,·選定被識別部件的一個次序·初始化創(chuàng)建一個未表示規(guī)則的實際DAG,然后重復—選擇一個次序最低的未選擇部件,—重復如下步驟,直到包含涉及選擇的部件表達式的所有部分DAG都被選定*選定一個包含涉及所選擇的部件表達式的部分DAG,*將實際DAG和選定的部分DAG合并成一個新的實際DAG,—通過下列步驟改變實際DAG*在包含涉及已識別部件的表達式的實際DAG中識別節(jié)點,*從實DAG中去掉這些節(jié)點,*增加不包含涉及已識別部件的表達式的節(jié)點至實際DAG中,使得該實際DAG反映已識別部件之間隱含的兼容性,·通過將實DAG和所有未選定的部分DAG合并成一個DAG來提供DAG。通常,這種方法還可包括·識別一個用戶,·用戶通過由其控制的設(shè)備和執(zhí)行重復配置的另一設(shè)備之間的通訊,來執(zhí)行選擇一個部件替換件的步驟,·發(fā)送有關(guān)DAG校驗的信息給該用戶。因此,計算的主要負荷(派生于規(guī)則與DAG,及DAG的反復校驗)是在遠離用戶的地方執(zhí)行,并僅僅是將結(jié)果發(fā)送給用戶。這就節(jié)約了用于執(zhí)行配置各種類型產(chǎn)品的帶寬,如互聯(lián)網(wǎng)的帶寬。這種方法還可包括·識別一個用戶,·在反復配置前—發(fā)送DAG到該用戶操作的一個設(shè)備里,—在該用戶的設(shè)備里執(zhí)行反復配置。在這種方法里,DAG被發(fā)送給用戶,然后在客戶端的DAG上執(zhí)行配置——這可以是在一個該用戶控制或擁有的計算機上執(zhí)行。一個特別優(yōu)選的實施例是,在反復配置過程中,包含以下步驟·獲取有關(guān)沒有選定替換件的部件的一個或多個替換件信息,該一個或多個替換件中的每個替換件都和已選定的替換件相兼容,及·提供這一信息給用戶。因此,由于只有合理的替換件才被顯示,則大大的加快了該配置的執(zhí)行且沒有用戶由于試圖結(jié)合不兼容的替換件所帶來的錯誤。使用戶和產(chǎn)品配置進行交互的一個較好方法是,提供一個語音合成器給系統(tǒng),其中,反復配置產(chǎn)品的步驟還包括·從語音合成器識別的文本里選擇一個部件,及·在語音合成器識別的文本里,從該部件的替換件組中選擇一個替換件。在這種方法里,通過語音來選擇替換件,通過電話來進行諸如產(chǎn)品配置的應用是優(yōu)選的。在被配置的產(chǎn)品是一個設(shè)備的應用中,優(yōu)選的方式是,這個方法還包括識別一個可配置設(shè)備和一個接口設(shè)備,及·將表示規(guī)則的DAG存儲在該可配置設(shè)備上,·從可配置設(shè)備里上載DAG至接口設(shè)備,及·在反復配置產(chǎn)品的步驟中,在接口設(shè)備上執(zhí)行校驗該DAG以判斷選擇的替換件是否與其他部件的其他選定替換件相兼容。在這種方法里,涉及配置設(shè)備的所有信息都可以存儲在該設(shè)備里,并且從其他的任何接口設(shè)備里進行存取,而這些接口設(shè)備不需要特別具備配置設(shè)備的知識。當可配置設(shè)備自己就能確定一些替換件時,該方法還包括下面步驟是有益處的,即,識別可配置設(shè)備里的一列預定部件并識別可配置設(shè)備里的這些部件的一列預定替換件,其中反復配置產(chǎn)品的步驟還包括·在接口設(shè)備上執(zhí)行對DAG的校驗以判斷選擇的替換件是否與其他部件的其他選定替換件相互兼容以及是否與預定的替換件相互兼容。預定替換件使得用戶更容易進行配置,因為需要作的替換件選擇少了。在許多產(chǎn)品的產(chǎn)品配置里,一些部件是觀測者部件(observercomponent),即用戶并不會選擇這個部件的替換件,而僅僅是對它的兼容性的值有興趣,這樣是有益處的。這能夠加以利用,如果該方法還包括識別一列觀測者部件和一列非觀測者部件,及·在DAG中表示觀測者部件的規(guī)則,·為每個觀測者部件確定所述規(guī)則的一個子集,從這些規(guī)則里,可能為觀測者部件確定和其他非觀測者部件的替換件相兼容的替換件,·為每個觀測者部件,將所述規(guī)則子集表示成一個觀測者DAG,及·在反復配置產(chǎn)品的步驟中—校驗DAG以判斷選擇的替換件是否和其他部件的其他選定替換件兼容,—通過為每個部件確定是否只有一個替換件與其他所有選定替換件相兼容,來確定一個系統(tǒng)確定的替換件的集?!獙χ辽僖粋€觀測者部件,為該觀測者部件校驗觀測者DAG以確定是否只有一個替換件同其他選定替換件及所述系統(tǒng)確定的替換件集相兼容,及—提供該信息給用戶在不同的DAG中表示規(guī)則是有利的,因為這種方法減少了DAG的整個規(guī)模,從而減少存儲要求和增加性能。如果反復配置產(chǎn)品還包括以下步驟,更多有用的信息可以提供給用戶·為每一對部件和替換件提供分該對狀態(tài)的分類,·將該分類歸于包括封鎖類,可選擇類,用戶選擇類,系統(tǒng)選擇類與強制類幾種結(jié)果的列表里的一類,·當即使是不考慮其他部件替換件的選擇的情況下,也不能為該部件選定一個替換件時,該狀態(tài)規(guī)定為封鎖類型,·當該部件的替換件與其他部件的選定替換件都相兼容時,該狀態(tài)規(guī)定為可選擇類型,·當為該部件已經(jīng)選定替換件時,該狀態(tài)規(guī)定為用戶選擇類型,·當替換件是該部件里與其他部件選定替換件相兼容的唯一替換件,該狀態(tài)規(guī)定為系統(tǒng)選擇的類型,·當該部件的可選替換件與其他部件替換件的一些選擇不相兼容時,該狀態(tài)規(guī)定為強制類型,·將分類信息提供給一個用戶。通過向用戶提供關(guān)于替換件的可能選擇的效果的信息,這種分類可以在用戶界面里使用。一些替換件是不可能實現(xiàn)的,一些可以直接選擇,還有一些已經(jīng)被用戶或系統(tǒng)選擇,最后還有一些強制類的,意味著當用戶愿意取消一些之前的選擇時,可以選擇這些替換件。本發(fā)明的第二部分涉及到一個包含計算機程序代碼裝置的計算機程序,當所述程序運行在一個計算機上時,可以執(zhí)行上述方法中的所有步驟。本發(fā)明還涉及在計算機可讀介質(zhì)上實現(xiàn)的該計算機程序以及包括該計算機程序的計算機可讀介質(zhì)。下面,聯(lián)系附錄和以下圖形對本發(fā)明的一個優(yōu)選實施方式進行詳細說明圖1示意了配置過程概覽,圖2示意利用ConfigItStudio創(chuàng)建產(chǎn)品型號,圖3示意一個PC的交互式配置,圖4示意一個PC實例,顯示表示第三規(guī)則的一個BDD,圖5示意另一個PC實例,顯示表示域約束的一個BDD,圖6示意另一個PC實例,顯示表示規(guī)則的一個BDD,圖7示意另一個PC實例,顯示代表包含公有和私有變量的所有規(guī)則和域約束的一個BDD,圖8示意另一個PC實例,顯示僅包括全局變量的、帶一個表示規(guī)則和域約束的BDD的虛擬表,圖9示意另一個PC實例,顯示一個表示基于選擇Seagate-Barracuda-9-9,1GB硬盤的相容性配置的BDD,及圖10示意另一個PC實例,顯示一個除X0和X1外,所有變量都作存在數(shù)量詞操作(existentiallyquantifiedout)的虛擬表。附件A里給出了“產(chǎn)品說明”的一個優(yōu)選實施例(一個XML文檔類型聲明)在附件B里給出了多個算法的優(yōu)選實施例算法1基本BDD操作算法2MULTIAPPLY,在一組頂點上應用一個操作算法3MULTIEXIST,一組變量的存在數(shù)量詞算法4ORDERRULES,根據(jù)私有變量對規(guī)則排序算法5CONJOINEXISTS,將BDDs和作存在數(shù)量詞操作的變量結(jié)合算法6VIRTUALIZETABLE,創(chuàng)建表示一個表的一個BDD算法7CONFIG1,限制一個選擇的一個虛擬表算法8CONFIGCONSISTENT,限制一個選擇列表的一個虛擬表算法9CONFIGCHECK,限制一個選擇列表的一個虛擬表,確保非空算法10CONFIGIT,限制一列兼容的選擇的一個虛擬表,為剩余的產(chǎn)品變量選擇相兼容的值算法11CONFIGOUNT,統(tǒng)計一個虛擬表中兼容配置的數(shù)目算法12DETERMINEDOMAIN,為一個虛擬表中的被展平(flattened)的變量確定可能值算法13CONFIGCLIENT,交互配置,客戶算法14CONFIGSERVER,交互配置,服務器。本發(fā)明包含一種用于配置產(chǎn)品的方法。由于本發(fā)明沒有約束,因此一個產(chǎn)品型號可以用來對該產(chǎn)品的相關(guān)方面定型。在產(chǎn)品型號中,產(chǎn)品包括多個部件,且每個部件都有一組替換件。每個部件通常都有描述部件相關(guān)方面的屬性,如顏色,行為,重量,界面等。對每個屬性而言,都有一組具體數(shù)值。例如,顏色屬性里可以有紅色,藍色和綠色。而且,還有涉及到不同部件的替換件之間兼容性的規(guī)則。用于配置產(chǎn)品的方法包括·指定產(chǎn)品的相關(guān)方面作為產(chǎn)品型號。產(chǎn)品型號描述部件,部件屬性,以及每個部件的替換件和每一屬性的值。而且,產(chǎn)品型號還包括一組涉及到部件和屬性之間兼容性的規(guī)則?!⑦@一產(chǎn)品型號編碼成一個表示產(chǎn)品型號兼容配置的虛擬表?!だ迷撎摂M表配置產(chǎn)品產(chǎn)生一個兼容配置。典型的情況是,這些過程是一個在一個用戶和一個配置程序之間交互的對話中完成的。圖1大致描述了這些步驟。該圖示意了一個特殊產(chǎn)品(一輛自行車),一個用于產(chǎn)品型號的特定表(一個文本化描述),一個特定的虛擬表(一個布爾決策圖),一個特定交互配置過程。本領(lǐng)域的技術(shù)人員應明白本發(fā)明并不僅僅約束于這些特定的選擇?!な紫龋a(chǎn)生一個具體產(chǎn)品的產(chǎn)品型號,現(xiàn)以自行車為例。這個具體產(chǎn)品型號捕捉到存在兩種不同的框架,還有兩種不同的齒輪。而且,該產(chǎn)品型號利用一個規(guī)則捕捉到如果選定外部齒輪組,那么框架一定是碳素框架?!ぴ摦a(chǎn)品型號被編碼為一個虛擬表。該表是一個表示所有兼容性配置的有向無環(huán)圖。這個具體的有向無環(huán)圖是一個帶兩個變量—external(表示選定外部齒輪組)和carbon(表示選定碳素框架)的布爾決策圖(BDD)(在符號模型檢測領(lǐng)域中技術(shù)人員所知的)。通俗的說,BDD和產(chǎn)品型號的聯(lián)系是當且僅當external和carbon的布爾值分配導向終端1時,相應的配置是兼容的。·現(xiàn)執(zhí)行該自行車的一個計算機輔助配置。計算機程序顯示每個部件可能的替換件。該計算機程序的用戶選擇一個部件,并為這個部件選定一個可能的替換件。例如,該用戶可以選擇齒輪組部件,且該齒輪組部件是外部的?;谟脩舻倪x擇,計算機程序使用虛擬表用于尋找可以導向兼容配置的下一個選擇。例如,計算機程序可以利用虛擬表來確定一個外部齒輪組的選擇是否意味著框架必須要是碳素的。繼續(xù)該交互式過程,直到為每個部件選定一個替換件。這一配置過程的結(jié)果是一個兼容產(chǎn)品配置。下面三個部分中將對產(chǎn)品型號、編碼過程、和最終配置過程進行深入的描述。在每個部分中,都給出了優(yōu)選實施例。產(chǎn)品型號一般,產(chǎn)品型號用于描述產(chǎn)品是由哪些部件組成以及這些部件之間的相互關(guān)聯(lián)性。本發(fā)明沒有在產(chǎn)品型號上設(shè)定特定的約束。但是,不作為對本發(fā)明的限制,產(chǎn)品型號通常會定義一組產(chǎn)品變量,每個變量所屬的域,以及一組規(guī)則。每個產(chǎn)品變量表示一個部件或一個屬性。對一個表示部件的產(chǎn)品變量,產(chǎn)品變量的域和該部件的可能替換件相應。對一個表示屬性的產(chǎn)品變量,產(chǎn)品變量的域和該屬性的可能值相應。產(chǎn)品變量可能包括分散域,也包括連續(xù)域。部件和屬性之間相互關(guān)聯(lián)性表示為規(guī)則,并通常制定為產(chǎn)品變量的公式。一個產(chǎn)品型號的例子是一個計算機產(chǎn)品型號,包括一個主板(三種不同替換件),一個CPU(兩種替換件)和一個硬盤(兩種替換件)。由于CPU是通過插槽同主板相連,因此插槽的類型是CPU和主板的一個重要屬性。由于硬盤是通過一個特定類型的控制器和主板相連,所以控制器的類型也是一個重要的屬性。下面是一個計算機產(chǎn)品型號的文本化實例<prelisting-type="program-listing"><![CDATA[typescpu-slot-t=[SLOT-1|SLOT-A],  controller-t=[IDE|SCSI]  variables  publicmotherboard{  publicname[Abit-BX6-ATX|Aopen-AX6BP-ATX|Aopen-AK-72-KX133-ATX],  privateslotcpu-slot-t,  privatecontrollercontroller-t  }  publicharddisk{  publicname  [IBM-DeskStar-25GP-10,1GB|Seagate-Barracuda-9-9,1GB]  privatecontrollercontroller-t}  publiccpu{  publicname[Intel-Celeron-A-366MHz|Athlon-AMD-500],  privateslotcpu-slot-t  }  rulesmotherboard.slot=cpu.slot,motherboard.controller=harddisk.controller,motherboard.name=Abit-BX6-ATX=>  motherboard.slot=SLOT-1∧motherboard.controller=IDE,  motherboard.name=Aopen-AX6BP-ATX=>  motherboard.slot=SLOT-1∧motherboard.controller=SCSI,  motherboard.name=Aopen-AK-72-KX133-ATX=>  motherboard.slot=SLOT-A^motherboard.controller=IDE,harddisk.name=IBM-DeskStar-25GP-10,1GB=>harddisk.controller=IDE,  harddisk.name=Seagate-Barracuda-9-9,1GB=>harddisk.controller=SCSI,  cpu.name=Intel-Celeron-A-366MHz=>cpu.slot=SLOT-1,  cpu.name=AMD-Athlon-500=>cpu.slot=SLOT-A]]></pre>第一部分是聲明將用來定義產(chǎn)品變量類型的類型。接下來的部分是聲明產(chǎn)品變量。每個變量都有一個標志符和一個類型。這個例子的類型系統(tǒng)包括原子結(jié)構(gòu)、記錄結(jié)構(gòu)({。。。})和枚舉類型(。。。|。。。|。。。)。例如,cpu就是一個包括由name和slot組成的記錄的產(chǎn)品變量,且該slot是cpu-slot-t.類型。cpu-slot-t被聲明為一個包括SLOT-1和SLOT-A兩種替換件的枚舉類型。public和private指示符是用于控制在配置中,哪些部件或?qū)傩钥梢燥@示給最終用戶(后面會給出具體描述)。第三部分聲明規(guī)則。這些規(guī)則通常是產(chǎn)品變量的布爾公式,并且所有的規(guī)則必須滿足兼容配置。通常,這些規(guī)則可以表示產(chǎn)品變量之間的任何關(guān)系,但在這個例子具體表示的規(guī)則可以分成兩個不同的種類屬性規(guī)則為一個特定替換件的指定一個特定屬性的值。例如,指定Aopen-AX6BP-ATX主板的slot的類型為SLOT-1。兼容性規(guī)則指定不同部件的替換件/屬性之間的一般相互關(guān)聯(lián)性。例如,指定硬盤的控制器類型必須和主板的控制器類型相同。在這個方法中,一個配置包括為產(chǎn)品變量的所有公有部分選定一個具體的值。在計算機的例子里,這包括選擇選擇主板的name,CPU的name和硬盤的name。計算機的一個兼容配置是滿足計算機產(chǎn)品型號規(guī)則的一個配置。一個兼容配置的例子是,選定motherboard.name為Abit-BX6-ATX,cpu.name為Intel-Celeron-A-366MHz和harddisk.name為IBM-Deskstar-25GP-10,1GB。在上述例子中,產(chǎn)品型號被文本化表示。但是,本發(fā)明并不局限于那樣的表示。實際上,一個產(chǎn)品型號的完整描述劃分為多個描述。本發(fā)明的一方面,將產(chǎn)品說明和產(chǎn)品表結(jié)合起來,以獲得完整的產(chǎn)品型號。產(chǎn)品說明通常用于通過定義部件及其屬性的方法來獲得產(chǎn)品的結(jié)構(gòu)信息,產(chǎn)品表通常用來獲得部件的具體替換件與屬性的具體值。這種方法允許有大量的產(chǎn)品數(shù)據(jù)表,這些表通常也很難轉(zhuǎn)成產(chǎn)品型號用于計算機輔助配置。這種應用包括構(gòu)建一個房地產(chǎn)銷售商店,其中房子的潛在購買者看起來是在“配置”他自己房子的?,F(xiàn)實中,他是利用表示所有兼容配置的下拉菜單來在如10,000所房子里選擇。在這個例子里,屬性包括價格范圍,位置,車庫,游泳池,房間數(shù)量,面積等。舉例的計算機產(chǎn)品型號可分為一個產(chǎn)品說明和三個產(chǎn)品表。該產(chǎn)品說明與最初的計算機產(chǎn)品型號包含有相同的部分,但去掉了屬性規(guī)則<prelisting-type="program-listing"><![CDATA[types  cpu-slot-t=[SLOT-1|SLOT-A],  controller-t=[IDE|SCSI]  variables  publicmotherboard{  publicname  [Abit-BX6-ATX|Aopen-AX6BP-ATX|Aopen-AK-72-KX133-ATX],  privateslotcpu-slot-t,  privatecontrollercontroller-t  }  publicharddisk{publicname  [IBM-DeskStar-25GP-10,1GB|Seagate-Barracuda-9-9,1GB]  privatecontrollercontroller-t  }  publiccpu{  publicname[Intel-Celeron-A-366MHz|Athlon-AMD-500],  privateslotcpu-slot-t  }  rules  motherboard.slot=cpu.slot,  motherboard.controller=harddisk.controller,]]></pre>第一個表定義主板部件的屬性第二個表定義硬盤部件的屬性第三個也是最后一個表定義CPU部件的屬性通過以下方法,可以從一個產(chǎn)品說明和一組產(chǎn)品表中獲得一個文本化產(chǎn)品型號·對每個表,將表轉(zhuǎn)換為一個規(guī)則,·把前步驟獲得的規(guī)則增加到產(chǎn)品說明里。該表利用將一個表看成是分散的正常形式的表達式的關(guān)鍵觀測轉(zhuǎn)化為一個規(guī)則。一個n行m列的表可以按如下方式轉(zhuǎn)換·在標注為yi的列里的、內(nèi)容為xji、i行j列的單元被轉(zhuǎn)換為一個原子規(guī)則yj=xij]]>·對在n行中的行i,從本行單元里獲得的所有原子規(guī)則組合在一起,形成一個次規(guī)則·所有的n個次規(guī)則通過拆分這些次規(guī)則來合并成一個大的規(guī)則·該大規(guī)則就是轉(zhuǎn)換為一個規(guī)則的表。例如,計算機產(chǎn)品模式的最后一個表轉(zhuǎn)換成rules(cpu.name=Intel-Celeron-A-366MHz∧cpu.slot=SLOT-1)∨(cpu.name=Athlon-AMD-500∧cpu.slot=SLOT-A)一個方便的擴展是增加表過濾器來將產(chǎn)品表中的值映射到產(chǎn)品說明中的值。一個上述過濾器的例子是,將產(chǎn)品表中的特定價格(如$100,$223,$817)映射到產(chǎn)品說明中的價格水平里(如便宜,合理,昂貴)。這種映射,通常是將一個范圍里的所有價格映射到同樣的價格水平。向規(guī)則的轉(zhuǎn)換不需要顯式地執(zhí)行。本發(fā)明的一個方面是,轉(zhuǎn)換可以在構(gòu)建虛擬表的時候順便完成。產(chǎn)品型號的優(yōu)選實施例產(chǎn)品型號的優(yōu)選實施例包括一個產(chǎn)品說明和一組產(chǎn)品表。產(chǎn)品說明是一個XML1.0文檔。產(chǎn)品表是ODBC數(shù)據(jù)源和SQL查詢的組合。如附件A.10所示,XML文檔是利用文檔類型聲明(DTD)來定義。一個產(chǎn)品說明基本包括常量聲明一個常量可以被顯式指定(constant),或者指定為一個SQL查詢,其在被估算時,返回一個單元dbconstant。類型聲明一個類型聲明(type)聲明一個類型標識符作為一個特定類型(參見如下)的簡寫。產(chǎn)品變量一個產(chǎn)品變量(productvariable)可以聲明為一個公有或私有的給定類型(參見如下)。規(guī)則一個規(guī)則是滿足配置兼容要求的產(chǎn)品變量上的布爾表達式。這個表達式可以顯式指定(rule),或是利用一個在估算時應返回一個可轉(zhuǎn)換為一個規(guī)則(dbrule)的表的SQL查詢來指定。數(shù)據(jù)庫細節(jié)最后,可以提供這樣幾個額外部分的信息別名定義(Alias)定義一個ODBC數(shù)據(jù)源,SQL查詢定義(sqlqueries)和可用來在數(shù)據(jù)庫中的值和產(chǎn)品說明的值之間映射的過濾器(filter)。規(guī)則包括結(jié)構(gòu)化表達式諸如布爾表達式(真,假)的原子表達式,來自有界子范圍(0,1,......n)的值,由數(shù)組、記錄表達式、和枚舉(sum)表達式創(chuàng)建的復合表達式。而且,提供了算術(shù)操作符和布爾操作符。在該優(yōu)選實施例中,允許的算術(shù)操作包括加法、減法、乘法,其中乘法操作只有在至少有一個操作數(shù)是常數(shù)的情況下,才能使用。一開始,算術(shù)操作允許的類型看起來奇怪,以后將看到,這個方法和虛擬表的優(yōu)選實施例一起很好地工作。選擇XML作為產(chǎn)品說明的語言為了說明,允許直接轉(zhuǎn)換成文本化格式和在計算機上表示的樹形數(shù)據(jù)結(jié)構(gòu)。開發(fā)產(chǎn)品說明的一個優(yōu)選方法是利用圖形用戶界面。ConfigItStudio就是這樣的一個圖形用戶界面,參看圖2中的屏幕圖。該屏幕圖顯示在編輯一個PC產(chǎn)品型號時的ConfigItStudio產(chǎn)品型號編輯器。在該屏幕圖左邊的樹形視圖是產(chǎn)品說明的樹形視圖,它和XML文檔類型聲明密切相關(guān)。(在屏幕圖中,術(shù)語“template”是用于類型說明,術(shù)語“constraint”是用于規(guī)則。)右邊的區(qū)域顯示樹中選定頂點的細節(jié)并可用于操作該頂點。在屏幕圖頂端的菜單(“Complie”菜單)可構(gòu)建一個產(chǎn)品型號的虛擬表并為在互聯(lián)網(wǎng)上的交互式配置運行一個虛擬表服務器(“Run”菜單)(見下文)。將產(chǎn)品型號編碼為一個虛擬表本發(fā)明的一個重要方面是將產(chǎn)品型號轉(zhuǎn)換為一個簡潔、有效的表示。這個過程被成為虛擬制表,這個結(jié)果的表現(xiàn)形式被稱為一個虛擬表。很多種方式可以用來完成這種轉(zhuǎn)化。該轉(zhuǎn)化的目的是首先查找一種編碼的方法并找到配置問題中所有解決方案,然后將它們虛擬制成一個虛擬表,以便通過對虛擬表的有效查詢就能獲得涉及配置問題的信息。編碼包括查找產(chǎn)品型號部件的編碼和規(guī)則的相應編碼。一個DAG將表示所有的規(guī)則,因此,可以有效地執(zhí)行對規(guī)則的有效解決方案的查找。虛擬表包括這種DAG和涉及產(chǎn)品型號與DAG之間關(guān)系的信息。本發(fā)明較之現(xiàn)有技術(shù)的好處來自利用一個DAG以下面的方式來表示所有規(guī)則的步驟,即查詢可以有效進行,好像實際上存在一個所有解決方案的表一樣。一個完全表通常都太大了而無法實用,然而適當挑選的編碼可以在保證將所有解決方案歸入表格又保持準確性的同時產(chǎn)生小的DAG。虛擬表最重要的部分是表示每個兼容的配置的DAG。由于一個真實生活中的產(chǎn)品型號難以置信的有很多配置,因此DAG必須以某種方式隱式的捕捉到這些配置。而且,DAG必須準確的表示這些配置(即是沒有“喪失準確性”)。對DAG的需求分為以下兩類功能需求DAG須能夠表示一個配置集,其中的每個配置都為每個產(chǎn)品變量定義一個值。DAG中的基本算法須模擬上述配置集中的操作和功能·構(gòu)建集聯(lián)合和構(gòu)建一群配置集的交集,創(chuàng)建建兩個配置集之間的集差,以及改變、約束或擴展一個配置集中一個變量的可能值,等,·檢測集空,集包含和集等價。確定一個變量的可能值和確定在一個配置集中配置的數(shù)量。效率需求產(chǎn)品型號中規(guī)則的性質(zhì)/結(jié)構(gòu)意味著所介紹的算法中的許多算法都有一個隨著產(chǎn)品變量數(shù)量而(至少)指數(shù)級增長的、典型的最壞情況下的運行時間。DAG的大小也在最壞情況下(至少)隨著產(chǎn)品變量數(shù)量而指數(shù)級增加。然而,對于真實生活中的產(chǎn)品,算法應有效運行,DAG表示應簡潔。這些需求一開始看起來好像很難實現(xiàn),但是對于一個現(xiàn)實生活中的產(chǎn)品型號,這種DAGs是的確存在的。一個布爾決策圖(BDD)是一個其中每個節(jié)點都包含布爾變量的DAG。在硬件電路形式驗證的領(lǐng)域里公知,BDDs可為下面的類型(其中n是布爾變量的數(shù)量)的任意布爾函數(shù)編碼Bn→B。這些函數(shù)應和“布爾產(chǎn)品型號”的配置集同構(gòu)。(“布爾產(chǎn)品型號”是產(chǎn)品變量的值都限定為真與假的產(chǎn)品型號)。因此,如果能對如布爾產(chǎn)品型號之類的一般產(chǎn)品型號編碼,而且,如果根據(jù)基本BDD操作可以表達需求配置算法,那么可以1)利用BDDs可以表示一般產(chǎn)品型號的虛擬表,及2)利用該虛擬表執(zhí)行對一般產(chǎn)品的實際配置。BDDs可以滿足所有這些需求,并且,對于大多數(shù)真實生活的產(chǎn)品型號,這些算法有效且DAGs簡潔。事實上,BDDs是DAG的優(yōu)選但是,本發(fā)明并不限于所述DAGs。很多其他的DAGs都有可被分別看作為集與集上的操作的表示和算法。必須根據(jù)表示產(chǎn)品型號規(guī)則的語言來仔細選擇DAG。例如,差額決策圖(參見MolleretalDifferenceDecisionDiagrams,InproceedingsAnnualConferenceoftheEuropeanAssociationforComputerScienceLogic(CSL),September20-251999,Madrid,Spain)可表示typeR→B的函數(shù)(的子集),并同時提供所需算法。一個直接的好處是,有了產(chǎn)品型號的編碼方法,在該產(chǎn)品型號中,規(guī)則包括連續(xù)域的變量之上的定量表達式(的有限子集)。另一方面,該算法的缺點是不夠有效(可編碼規(guī)則的滿足性是pspace-hard問題)。另一個有關(guān)方法是在產(chǎn)品型號規(guī)則包括很多一般算術(shù)操作時,利用解釋布爾變量上的BDDs(參見W.Chan,R.J.Anderson,P.Beame和D..NotkinCombiningconstraintsolvingandsymbolicmodelcheckingforaclassofsystemswithnon-linearconstraints,InO.grumberg,editor,ComputerAidedVerification,9thInternationalconference,CAV’97Proceeding,Volum1254ofLectureNotesinComputerScience,pages316-327,Haifa,Israel,June1997,Springer-Verlag.)。每個布爾變量表示一個公式,DAG中的一條路徑表示這些公式的結(jié)合和該路徑可滿足性的聯(lián)合,利用如線性程序設(shè)計等方法可以確定一條路徑。下面將在一個優(yōu)選實施例中說明如何(利用BDDs)將產(chǎn)品型號編碼為一個虛擬表。但是,該領(lǐng)域內(nèi)的技術(shù)人員能利用不同的潛在結(jié)構(gòu)數(shù)據(jù)應用該算法,例如以上提到的兩種數(shù)據(jù)結(jié)構(gòu)中的一種。將產(chǎn)品型號編碼為虛擬表的優(yōu)選實施例將產(chǎn)品型號編碼為虛擬表的優(yōu)選實施例包括以下步驟靜態(tài)擴展產(chǎn)品型號通過展平(flattening)類型層次結(jié)構(gòu)來擴展。結(jié)果是一個展平的產(chǎn)品型號和一個將該產(chǎn)品型號與展平的產(chǎn)品型號相關(guān)聯(lián)的符號表。BDD編碼為每個規(guī)則都構(gòu)建一個BDD,創(chuàng)建的一個大BDD表示所有兼容配置。下面,我們首先說明如何執(zhí)行靜態(tài)擴展。展平的產(chǎn)品型號是這種靜態(tài)擴展的結(jié)果,這種模型的創(chuàng)建使得它適合利用BDDs編碼。靜態(tài)擴展靜態(tài)擴展是通過展平類型層次結(jié)構(gòu)來完成。結(jié)果是一個展平的產(chǎn)品型號和一個將該產(chǎn)品型號與展平的產(chǎn)品型號相關(guān)聯(lián)的符號表。展平的產(chǎn)品型號通過下列方式獲得1)除去記錄表達式,2)簡化域,及3)以布爾形式編碼。對于包含記錄類型的每個產(chǎn)品變量,利用一個展平變量的列表代替產(chǎn)品變量來去掉記錄類型。而且,這種產(chǎn)品變量的表達式都要被展平變量的表達式代替。替換后,所有的記錄都從產(chǎn)品型號中去除。對計算機的產(chǎn)品型號而言,這一步驟產(chǎn)生下列產(chǎn)品型號(回憶上文,motherboard是一個包括name,slot和controller記錄類型的產(chǎn)品變量)<prelisting-type="program-listing"><![CDATA[types  cpu-slot-t=[SLOT-1|SLOT-A],controller-t=[IDE|SCSI]variables  publicmotherboard_name  [Abit-BX6-ATX|Aopen-AX6BP-ATX|Aopen-AK-72-KX133-ATX],  privatemotherboard_slotcpu-slot-t,  privatemotherboard_controllercontroller-t,  publieharddisk_name  [IBM-DeskStar-25GP-10,1GB|Seagate-Barracuda-9-9,1GB],  privateharddisk_controllercontroller-t  publiccpu_name[Intell-Celeron-A-366MHz|Athlon-AMD-500],  privatecpu_slotcpu-slot-t,rules  motherboard_slot=cpu_slot,  motherboard_controller=harddisk_controller,  motherboard_name=Abix-BX6-ATX=>  motherboard_slot=SLOT-1^motherboard_controller=IDE,  motherboard_name=Aopen-AX6BP-ATX=>  motherboard_slot=SLOT-1^motherboard_controller=SCSI,  motherboard=Aopen-AK-72-KX133-ATX=>  motherboard_slot=SLOT-A^motherboard_controller=IDE,harddisk_name=IBM-DeskStar-25GP-10,1GB=>harddisk_controller=IDE,  harddisk_name=Seagate-Barracuda-9-9,1GB=>harddisk_controller=SCSI,  cpu_name=Intel-Celeron-A-366MHz=>cpu_slot=SLOT-1,  cpu_name=AMD-Athlon-500=>cpu_slot=SLOT-A]]></pre>展平產(chǎn)品型號的第二步包括簡化展平的變量的域。所有展平值都轉(zhuǎn)換為數(shù)字,每個展平的變量的域都轉(zhuǎn)換為一個區(qū)間。例如,在cpu_slot中,值0代替SLOT-1(這是cpuslot的第一種替換件),值1代替SLOT-A(第二種替換件)。在計算機產(chǎn)品型號里,最后得到的產(chǎn)品型號是<prelisting-type="program-listing"><![CDATA[variables  publicmotherboard_name0..2,  publicharddisk_name0..1,  publiccpu_name0..1,  privatemotherboard_slot0..1,  privatecpu_slot0..1,  privatemotherboard_controller0..1,  privateharddisk_controller0..1rules  motherboard_slot=cpu_slot,motherboard_controller=harddisk_controller,motherboard=0=>motherboard_slot=0∧motherboard_controller=0motherboard=1=>motherboard_slot=0∧motherboard_controller=1,motherboard=2=>motherboard_slot=1∧motherboard_controller=0,  harddisk=0=>harddisk_controller=0,  harddisk=1=>harddisk_controller=1,  cpu=0=>cpu_slot=0,  cpu=1=>cpu_slot=1,]]></pre>展平產(chǎn)品型號的最后一步包括用布爾形式對產(chǎn)品型號編碼。每個展平的變量都被一個布爾變量列表替換,每個規(guī)則都被這些布爾變量上的一個新規(guī)則替換。在域為類型0...n中的展平的變量被|log2(n+1)|布爾變量代替。N+1個數(shù)值里每個布爾變量都有一個唯一的賦值。例如,為對展平的變量motherboard_name的3-值域編碼(n=2),需要兩個布爾變量X0和X1。這個域中的每個布爾變量都有唯一賦值對于值0X0=0,X1=0,對于值1X0=0,X1=1,對于值2X0=1,X1=0。現(xiàn)在,每個規(guī)則都被該布爾變量上的新規(guī)則所代替,以獲得展平的產(chǎn)品型號。例如,計算機產(chǎn)品型號的展平產(chǎn)品型號是variablespublicX0,X1,X2,X3privateX4,X5,X6,X7rulesX4=X5,X6=X7(X0=0∧X1=0)=>X4=0^X6=0,(X0=0∧X1=1)=>X4=0^X6=1,(X0=1∧X1=0)=>X4=1^X6=0,X2=0=>X7=0,X2=1=>X7=1,X3=0=>X5=0.X3=1=>X5=1在產(chǎn)品型號的展平過程中構(gòu)建了一個符號表。這個符號表包括兩個表。第一個表包含類型的信息,每個展平的變量的域以及用來為該變量的值編碼的布爾變量。對于計算機產(chǎn)品型號,這個表是第二個表涉及展平值,它們的整數(shù)值和唯一的布爾賦值。對于計算機產(chǎn)品型號,這個表是<p>表1實驗中所用的聚合物代表PE1的聚乙烯包括密歇根州米德蘭市的美國陶氏化學公司所售的ASPUNTM6842A。代表PE2的聚乙烯包括密歇根州米德蘭市的美國陶氏化學公司所售的ASPUNTM6811。代表PE3的聚乙烯包括密歇根州米德蘭市的美國陶氏化學公司所售的ASPUNTM6835A。代表PE4的聚乙烯包括密歇根州米德蘭市的美國陶氏化學公司所售的AFFINITYTMEG8100。代表PP1的聚丙烯包括密歇根州米德蘭市的美國陶氏化學公司所售的H500-35。由這些聚乙烯聚合物配制出四個樣品。三個均聚物和一95百分比/5百分比PE1和PE4的混合物系受到測試。其混合物的復合系如上文所說明。4.75kg的PE1錠丸與0.25kg的PE4相結(jié)合,被放置在上述雙螺絲擠壓機的漏斗內(nèi)。在離開此擠壓機后,該聚合物會被拉經(jīng)一維持在5℃下的冷卻槽。其固體聚合物接著會被饋送至一BerlynClayGroup削片機,在此其被切割成錠丸。此聚合物將會被洗滌15分鐘,以及那些錠丸將會被收集100分鐘。那些纖維系使用表2中表明的紡織條件和上文所說明的程序來產(chǎn)生。表2各種纖維有關(guān)的紡紗條件BDD表示的構(gòu)建是基于展平的產(chǎn)品型號。首先,選定布爾變量的一個合適次序。該次序的選擇對構(gòu)建的BDDs規(guī)模很重要。在優(yōu)選實施例中,通過使表示同種展平的變量的布爾變量相鄰來選定次序。一個用于計算機產(chǎn)品型號的合適次序是X0≤X1≤X2≤X3≤X4≤X5≤X6≤X7。選定一個次序后,將每個規(guī)則編碼為一個BDD。例如,第三規(guī)則(X0=0∧X1=0)=>(X4=0∧X6=0)的BDD通過對下面表達式編碼(如圖4所示)來創(chuàng)建(-X0∧-X1)→(-X4∧-X6)編碼是利用公知的MK和APPLY算法實現(xiàn)。下面,集合R涉及到一組規(guī)則,其中每個規(guī)則被編碼為一個BDD。然后,對每個展平的變量設(shè)定一個表示可能布爾變量賦值的域約束。例如,對展平的變量motherbroard.name而言,三種可能的值存在于(0,1和2)中。因此,兩個布爾變量利用賦值(X0=0,X1=0),(X0=0,X1=1)和(X0=1,X1=0)來對域編碼。在圖5中,顯示了motherboard.name域約束的BDD。注意余下的(未利用的)賦值(X0=1,X1=1)導向終端0。由于所有其他展平的變量的域大小為2(與單個布爾變量相對應),所有的其他域約束BDDs被終端BDD1表示。創(chuàng)建這些BDDs的優(yōu)選方法也是利用MK和APPLY算法。下面,集合D是指域約束集,其中每個域約束被編碼為一個BDD。在這個階段構(gòu)建的BDDs將為產(chǎn)生一個表示所有規(guī)則R和所有域約束D的大BDD塊而構(gòu)建塊。創(chuàng)建這個BDD,首先將BDDs結(jié)合,使單個規(guī)則整合為一個BDDRall此處,表示將R的所有元素r結(jié)合的結(jié)果。圖6顯示了計算機產(chǎn)品的該BDD。注意在該BDD中可能選擇X0=1和X1=1且仍然達到1終端。這是因為未考慮域約束。因此建立包含所有域約束Dall的BDD一個表示所有可能的相容性配置的BDD通過合并所有規(guī)則與所有域約束的所有BDDs來獲得。圖7顯示了計算機產(chǎn)品型號的這個BDD??捎^察到其中有三條包含所有導向終端1的變量的路徑。因此,這個計算機產(chǎn)品型號恰好有三個兼容的產(chǎn)品配置(每個配置都基于不同的主板)。構(gòu)建Rall,Dall和Call的優(yōu)選方法是利用算法2中顯示的算法MULTIAPPLY。給定一個結(jié)合的且可換的操作符和一組頂點U={u1,......,un},該算法返回一個BDD表示u1...un。如前所述,在配置中,最終用戶只能利用公有展平的變量。可以僅在這些變量上構(gòu)建一個更小的BDD而不丟失必要的信息。通過對私有展平的變量集(稱為Vpriv集)作存在數(shù)量詞操作來構(gòu)建該BDD,優(yōu)選利用算法3中的MULTIEXSTS算法(VprivB指表示Vpriv的布爾變量集)Cpub=def&Exists;VBpriv&CenterDot;Call]]>其中在變量W={x1...,xm}有限集上,利用作為m個量詞&Exists;x1,...&Exists;xm]]>的簡寫。對于計算機產(chǎn)品型號,結(jié)果是圖8中所示的BDD。在該圖中,從頂端頂點到終端頂點1的任何路徑都表示一個或多個滿足該計算機兼容性配置的一個或多個布爾變量賦值。如果一些變量沒有出現(xiàn)在一條路徑上,就需要表示更多的賦值這些值可以是0或1,且該結(jié)果仍能滿足兼容性配置。利用符號表,可以將這些信息和原始的展平的變量關(guān)聯(lián)起來。早期量詞操作(EarlyQuantification)對于大的產(chǎn)品型號,為整個兼容性配置集初次構(gòu)建BDD和之后的對私有變量作量詞操作在構(gòu)建過程中會產(chǎn)生很大的BDDs。將已知的早期量詞技術(shù)應用到編碼過程中可以有更多的優(yōu)勢(參見[J.R.Burch,E.M.Clarke,D.E.LongSymbolicModelCheckingwithPartitionedTransitionRelations,Proceedingofthe1991InternationalConferenceonVLSI])。要注意的關(guān)鍵是,如果一個變量在一個規(guī)則中不是自由的,可以在規(guī)則的邏輯乘組合中“移動”存在數(shù)量詞到邏輯乘運算之后適用該技術(shù)的優(yōu)選實施例如下所述構(gòu)建一個graph(V,E),包括頂點V和邊E,其中每個頂點標有一個展平的變量,每條邊標有一個規(guī)則。該圖是無向的,但是多條邊可以連接兩個頂點(一個復圖)。該圖包括·每個私有展平的變量v的標有v的頂點。(該頂點被稱為頂點v)·如果展平的變量v和w在規(guī)則r中都是自由的,對每對頂點v,w和規(guī)則r,對應有一條邊在v和w之間。(該邊被稱為edge(v,r,w))一個強連通部件圖基于這個結(jié)構(gòu)圖被建立(如參見[Cormen,Leiserson,RivestIntroductiontoAlgorithms,p.488-490])。S表示該強連通部件集。每個強連通部件包括一個子圖。Gi=(Vi,Ei)表示這些子圖中的第i個(l≤i≤|S|)。Vi是該子圖中的私有展平的變量,Ri=def{r|(v,r,w)&Element;Ei}]]>是該子圖中的規(guī)則?,F(xiàn)在,圖Gi一個私有展平的變量在非Gi圖中的所有規(guī)則里,都不是自由的。利用等式1中顯示的內(nèi)容,這意味著(ViB是表示Vi的布爾變量)通過執(zhí)行下列步驟來獲得規(guī)則和展平的變量的次序·為每個子圖Gi選定一個該子圖固有的展平的變量Vi的次序。Oi表示這些展平的變量的有序列表?!ざx一個所有展平的變量的有序列表·基于次序O來對規(guī)則排序。最后一個步驟優(yōu)選由如算法4中顯示的算法ORDERRULES執(zhí)行。該算法作為輸入1)有序展平的變量O的列表和2)邊E。調(diào)用ORDERRULES(O,E)返回一列規(guī)則集F=&lt;F1,...F|v|&gt;,其中i,j∈{1,...,|V|}(i<j(vi∩freevars(Fj)=Φ))(2)現(xiàn)將公式1和公式2結(jié)合起來,可以確定兼容配置集Cpub,通過1)對域約束Dall,從一個BDD開始,2)反復地,隨著增加i(l≤i≤|V|),在該BDD上,首先將Fi中的規(guī)則結(jié)合,然后對表示Vi的布爾變量作量詞操作。這是通過在算法5中顯示的優(yōu)選執(zhí)行算法CONJOINEXISTS來執(zhí)行的。該兼容配置集是(其中,OB是用于O,&lt;V1B,...,V|V|B&gt;編碼的布爾變量向量列表)Cpub=CONJOINEXSITS(OB,F(xiàn),Dall)在多數(shù)的BDD組件中,初始化時就給定了聲明變量的數(shù)量,比如n。然后變量利用在0到n-1之間的索引來引用。利用聲明變量的數(shù)量用于例如SATCOUNT算法中。盡管Cpub的自由變量只在公有布爾變量里,也不能僅僅利用SATCOUNT來計算兼容配置的數(shù)量。給定一個因數(shù)2j,其中j是私有布爾變量的數(shù)量。為了得到兼容狀態(tài)的正確數(shù)量,可以將上述結(jié)果除以該因數(shù),或重新初始化一個變量聲明數(shù)量和公有布爾變量相同的BDD組件(然后需要根據(jù)新的變量索引來對BDDs重新編碼)。這里選擇后一種方法。算術(shù)表達式編碼計算機產(chǎn)品型號不包括任何算術(shù)表達式。但是,如前描述的,產(chǎn)品型號的優(yōu)選實施例確實允許某些小心選擇的算術(shù)表達式兩個表達式的加法,兩個表達式的減法和表達式和常量的乘法。這些算術(shù)操作被允許,因為1)它們在產(chǎn)品定型的過程中是有用的,和2)同時,存在這些表達式的有效BDD操作。關(guān)鍵要注意的是,在靜態(tài)擴展過程中,產(chǎn)品型號用布爾形式編碼前,在所有規(guī)則里的所有表達式是這些基本算法操作的布爾組合,以及展平的變量的(不)等式。利用標準布爾等式,所有的規(guī)則可以按下列語法產(chǎn)生的格式寫(按BNF格式寫)bexpr∷=bexpr∧bexpr(邏輯乘)|-bexpr(取否)|aexprbopaexpr(算術(shù)操作符)bop∷=<|≤|=|≥|>|≠(布爾操作符)aexpr∷=aexpraopaexpr(算術(shù)操作符)|constant|variable(原子算法表達式)aop∷=+|-|*,(算術(shù)操作符)其中,constant表示一個常量,variable表示一個展平的變量。如何對BDDs中的算法操作編碼是已經(jīng)公知的。兩份參考是[AlanJohnHuTechniquesforEfficientFormalVerificationUsingBinaryDecisionDiagrams,Ph.Dthesis,StanfordUniversity,DepartmentofComputerScience,TechnicalReportNumberCS-TR-95-156]和[JornBoLind-NielsenVerificationofLargeSate/EventSystems.Ph.DThesis,DepartmentofInformationTechnology,TechnicalUniversityofCopenhagen,IT-TR2000-032.]產(chǎn)品表編碼如前所述,一個產(chǎn)品表(典型的是在一個數(shù)據(jù)庫里表示)能用來充分地表示一條規(guī)則。不需要一開始就清楚的將產(chǎn)品表轉(zhuǎn)換為一條文本化規(guī)則,然后再將規(guī)則轉(zhuǎn)換為一個BDD。實際上,可以直接從產(chǎn)品表里創(chuàng)建一個BDD。這個過程的優(yōu)選實施例是算法6中的算法VIRTUALIZETABLE。該算法將每個單元制成表格,為該單元創(chuàng)建一個BDD并在臨時BDD節(jié)點中積累制表的結(jié)果。輔助函數(shù)VIRTUALIZECELL為一個特定的單元創(chuàng)建一個BDD。實現(xiàn)該算法將利用符號表來找出如何將展平的變量映射到布爾變量。通過增加和表過濾器相關(guān)的信息到符號表里和改變輔助功能VIRTUALIZECELL以利用該信息,可以很容易的增加表過濾器。組合類型編碼計算機產(chǎn)品型號包含枚舉類型的值(如[IDE|SCSI])。組合(sum)類型(在許多經(jīng)典的類型體系中已知的)的類型是可以利用BDDs編碼的更通常的類型。這種復合類型允許一個標記(如枚舉類型中)和一個值(可以是任何類型)。一個可有(特定類型)可無的額外硬盤的組合類型例子是variablesextraharddisk[ABSENT|PRESENTof[IDE|SCSI]]extraharddisk的可能值是ABSENT,PRESENT(IDE)和PRESENT(SCSI)。如需要對其中的一個值編碼,必須1)捕獲指明是選擇ABSENT還是PRESENT的標記和2)在后種情況下,選定了哪種子值(IDE或SCSI)。優(yōu)選的實施例是對這兩部分各自編碼。在這個特定的例子中,一個布爾值(P)指明額外硬盤是PRESENT,一個布爾變量(T)指明該類型是SCSI。在P=false的情況下,對值T進行編碼沒有意義。(在P=false時,有兩種不同的值分配P=false,T=false和P=false,T=true)。為了限制表示的大小并能夠統(tǒng)計有意義的賦值數(shù)量,需要對每個子值選定一個默認值。然后,定義一個規(guī)格化的約束表示當沒有選定子值時,子值有默認值。在extraharddisk例子中,選定T的默認值為false,規(guī)格化約束是(P=false)->(T=false)出現(xiàn)這種組合類型,所有規(guī)格化約束必須在BDDCpub中結(jié)合,以獲得表示兼容配置集的最終BDD。利用虛擬表的交互式配置現(xiàn)利用虛擬表來執(zhí)行一個配置。不作為對本發(fā)明的限制,用戶通常參與該過程。用戶同一個與虛擬表相連的計算機程序——即配置助理——交互。一般,用戶執(zhí)行的配置會話(session)和計算機程序可以被看作是一個交互式的反復配置,其中配置助理在配置過程中引導用戶·配置助理利用虛擬表尋找提供給用戶的信息,及·用戶提供涉及他/她想法的信息。有多種方法創(chuàng)建可以應用于該配置對話的“協(xié)議”。不作為對本發(fā)明的限制,一個對話可以典型的是一個包括下列步驟的反復過程(從配置助理角度看)1.檢查虛擬表。虛擬表中的信息量巨大。因此,配置助理必須能從虛擬表中抽取有限的信息。在給定的情況下(通常是在先選擇),提供的信息必須仍是充分和相關(guān)的。2.將該信息提供給用戶。必須以一種方式提供這種信息,以便用戶能分辨在給定的時間里他/她有哪些可選項,以及這些選擇如何影響配置產(chǎn)品的相容性。3.允許用戶選定/取消選擇。在本階段,配置助理已提供信息給用戶,使得用戶能容易的完成兼容的選擇,但是在這種情況下,仍有可能用戶做出和之前選擇不兼容的選擇。配置助理必須以一種合理的方式來處理所有這種類型的情形。怎樣算合理取決于具體的應用。但是,通常配置助理需要犧牲一些之前的選擇,然后達到一個兼容的選擇集(將這些犧牲告知用戶)。4.利用虛擬表計算用戶作出選擇的后果。這種反復過程一直持續(xù)到用戶確定終止會話。如果此時找到了一個相容、完整的配置,那么可以將該配置提供給一個次序安排系統(tǒng)等。用戶和配置助理之間的通訊通過用戶界面來執(zhí)行。圖3是一個用于pc產(chǎn)品型號用戶界面的屏幕圖。該用戶界面允許用戶查看已完成的選擇(如,用戶已為部件Harddisk1選擇了替換件IBMDeskStar25GP10,1GB),查看可用的替換件(這里,通過”popup”窗口,當前顯示cpu的替換件)和這些替換件中的哪個替換件同其他之前選擇相互兼容(這里,使用黑色的背景顏色)。用戶可以為一個部件選擇替換件,取消選擇之前作出的配置,等。兩個附加功能使用戶更易操作·一個按鈕(ConfigIT!),用于當用戶執(zhí)行完他/她想要的選擇時,讓配置助理來完成配置(通過執(zhí)行所有未選擇部件的兼容性選擇)·允許用戶選擇預配置選擇的其他按鈕,例如pc商店里的標準工作站。用戶仍然可以自由的修改這個工作站,并能從配置助理處得到幫助。一個通常的情形是在web瀏覽器里顯示這樣的一個用戶界面,顯然允許用戶通過互聯(lián)網(wǎng)通訊。虛擬表可以放在虛擬表服務器端或是運行web瀏覽器的客戶端。在前一種情況下,配置助理包括一個服務器和一個客戶線程(并發(fā)運行,通過互聯(lián)網(wǎng)通訊)。在第二種情況下,配置助理典型地單獨運行在web瀏覽器里。兩種方法都是可行的,部署方法必須基于給定的配置會話對哪些屬性有要求。但是,第一種方法是優(yōu)選實施例。在本結(jié)構(gòu)框架里,部件和展平的產(chǎn)品變量對應,替換件和值對應。不作為對本發(fā)明的限制,下面的偽代碼描述了配置助理通常是如何工作的(顯然,細節(jié)可以用多種方法處理用戶可用的具體指令可以不同,來自系統(tǒng)的反饋可以不同,許多包括的步驟次序可以改變)<prelisting-type="program-listing"><![CDATA[S←<>  repeat  SHOWSTATUS(S)  C←READFROMUSER(S)ifC=exitthen  returnS  end  S←UPDATESELECTION(S,C)  end]]></pre>變量S是有序的選擇列表,每個選擇包括一對(v,d),其中v是一個展平的變量,d是一個展平的值。該選擇通常表示虛擬表中可用兼容配置的非空集。一開始,一個選擇也沒有作,因此S是一個在虛擬表中表示完全兼容配置集的空列表??梢詮腟中獲得的信息和虛擬表被呈現(xiàn)給用戶。典型的情況是,對每個展平的變量,只有和S兼容的可能選擇才呈現(xiàn)給用戶。現(xiàn)在,向用戶詢問指令C。該指令可以是一個同S相兼容的選擇之一,取消S中已有的一個選擇,強制選擇,或當一個選擇是為所有公有展平變量做的選擇時,退出配置?;谥噶頒和之前的選擇S,按照如下的方式,產(chǎn)生一個新的選擇列表·對于選擇的情形,新的選擇和S相兼容。新的選擇僅僅是增加至S的末端。S現(xiàn)在表示一個更小(或同等的)配置集?!τ谌∠粋€之前選擇的情形,是從列表S中簡單的去掉該選擇。S現(xiàn)在表示一個更大(或同等的)配置集?!ひ粋€選擇的強制情形有一些復雜。強制意味者“盡管該選擇同其他的選擇不兼容,還是強制執(zhí)行這個選擇,犧牲S里的其他選擇。”通過下列步驟找出一個新S’1.在S的前端增加該新選擇。(S是一個有序列表)2.將S’初始化為一個空列表&lt;&gt;。3.從S的前端開始,對S中的每個選擇s—如s與S’中的選擇相兼容,則將s增加至S’的末端?!鐂與S’中的選擇不兼容,則丟棄s。4.新的選擇就是S’?!ぴ谕顺銮闆r下,結(jié)束操作并返回相容、完整的配置S,并且例如傳遞到一個次序安排系統(tǒng)。即使在用戶和配置助理之間有關(guān)通訊的細節(jié)發(fā)生變化,在虛擬表上,實現(xiàn)偽代碼的基本算法都大致相同。以下是通常所需的關(guān)鍵算法·用于將虛擬表和一個或多個選擇相結(jié)合以及檢測這個結(jié)合是否相兼容的算法。·作用于一個虛擬表和一個可能不兼容配置的有序列表上的一個算法,它可以確定允許哪些選擇,“犧牲”哪些選擇來保證選擇的兼容性。·作用于一個虛擬表和一些兼容性選擇,為所有未選擇部件確定兼容選擇的算法。·一個用于計算給定選擇集的兼容配置數(shù)量的算法?!ぷ饔糜谝粋€變量,確定和之前選擇相兼容的可能選擇的算法。這些算法一般利用虛擬表中DAG的基本算法來實現(xiàn)(對于BDD,算法1顯示了該算法)。交互式配置的優(yōu)選實施例交互式配置系統(tǒng)的優(yōu)選實施例是一個包含分別運行在虛擬表服務器和web瀏覽器中的服務器和客戶端線程的配置助理。首先,提供虛擬表上關(guān)鍵算法的優(yōu)選實施例。然后,提供服務器和客戶端算法?;綛DD算法利用已知的一種稱為動態(tài)編程的編程技術(shù)。因此,緩存BDDs的計算結(jié)果(取決于可用存儲量,等)。這意味著可以在一個恒定的時間里,運行帶同樣參數(shù)的再計算。許多算法利用不是用臨時BDDs來維護表,而是調(diào)用帶同樣參數(shù)的潛在的操作,并在一個恒定的時間里通??梢垣@得該結(jié)果。這種方法還可以在一個性能差一點(state-less)的服務器上實現(xiàn)。最初的四個關(guān)鍵算法涉及到虛擬表和選擇的結(jié)合。在算法7中顯示的第一個算法CONFIG1用于將一個選擇和虛擬表Cactual)合并。該選擇包括一個展平的變量v和一個值d。首先創(chuàng)建一個表示這個選擇的BDD。創(chuàng)建該BDD通過1)確定表示v的布爾變量&lt;v1,...,vn&gt;和表示d的布爾值&lt;d1...,dn&gt;(通過查詢符號表),2)對包括布爾變量和布爾值的每對(vi,di)為(vi=di)創(chuàng)建一個BDD,3)利用MULTIAPPLY(→,.)將這些BDD結(jié)合獲得一個BDD。然后,u和表示虛擬表的BDD結(jié)合產(chǎn)生一個新的BDD。該BDD是有關(guān)原始虛擬表(例如,表示產(chǎn)品型號規(guī)則)和選擇(v=d)的兼容配置集。應注意,空配置集由BDD0表示。因此,如果結(jié)果BDD是0,則該選擇不與虛擬表兼容?;叵朐谇安糠钟懻摰挠嬎銠C產(chǎn)品型號的例子。在圖8中顯示了表示規(guī)則和域約束的BDD。可以利用CONFIG1來確定表示硬盤為Seagate-Barracuda-9-9,1GB的相容性配置集的BDD。該結(jié)果顯示在圖9中。注意,只有一條路徑導向1。這意味著通過選擇硬盤,其他所有的部件都可以暗含的被選定。通過觀察36頁的系統(tǒng)表,很容易發(fā)覺,這和Aopen-AX6BP-ATX主板、Seagate-Barracuda-9-9,1GB硬盤,及Intel-Celeron-A-366MHzCpu相符合。算法8中顯示的算法CONFIGCONSISTENT構(gòu)建一個表示幾個選擇Snew的BDD。該算法簡單的反復應用CONFIG1,產(chǎn)生一個表示配置集越來越小的BDD。注意,如果該選擇是不相容的,則BDD返回0,且不可能觀察到“何時”發(fā)生問題。算法9中顯示的算法CONFIGCHECK用來處理這個問題。在Snew中的選擇的次序可用來區(qū)分選擇的優(yōu)先順序。如之前的算法CONFIG1被應用到各個選擇。只要這些選擇是兼容的,就能把它們增加到兼容選擇列表中。但是,如一個選擇和之前的選擇不相兼容,則“拒絕”該選擇,保留之前的配置集。這些被拒絕的選擇也被收集在一個列表里。當算法結(jié)束時,它返回一個表示非空配置集的BDD。在(合理的)假設(shè)下,當初始虛擬表非空時,該算法同樣返回一個表示非空配置集的BDD。還返回相容的和被拒絕選擇的列表。在算法10中顯示的下一個算法CONFIGIT用于1)基于一個相容性選擇集限制配置集,和2)為剩余產(chǎn)品變量自動選擇一個兼容的值。該算法從產(chǎn)生一個表示非空解集Cactual的BDD的算法CONFIGCONSISTENT開始。然后,利用已知的BDD算法FULLONESAT。該算法創(chuàng)建一個包含來自Cactual的單個路徑的BDD。該BDD只表示一個配置。然后,利用已知的BDD算法ANYSAT來獲得由該路徑表示的布爾選擇。通過“反向”利用符號表,確定一個產(chǎn)品選擇。下面兩個算法用來查詢一個虛擬表。算法11中顯示的算法CONFIGCOUNT計算一個虛擬表中兼容配置的數(shù)量。算法SATCOUNT用來確定這個數(shù)量。但是,用于返回該數(shù)字的三個重要細節(jié)方面是1.在虛擬表編碼的優(yōu)選實施例中,域約束和虛擬表相結(jié)合。沒有域約束,將會有產(chǎn)生一個獲得錯誤配置數(shù)量的“非法”路徑。2.在虛擬表編碼的優(yōu)選實施例中,規(guī)格化所有的組合類型。沒有規(guī)格化,值A(chǔ)BSENT的變量將會有多于一個的布爾選擇(見第44頁的例子),獲得錯誤的配置數(shù)量。3.在虛擬表編碼的優(yōu)選實施例中,在創(chuàng)建虛擬表后,BDD組件重新初始化,從而去掉私有布爾變量。在BDD組件沒有重新初始化的情況,需要將從SATCOUNT中獲得的數(shù)量除以2n,其中n是私有布爾變量的個數(shù)(通過檢查符號表獲得)。在表示計算產(chǎn)品型號虛擬表的BDD上使用CONFIGCOUNT將返回計算機兼容配置的數(shù)量,3。也可以通過計算導向1的路徑數(shù)量得到這個數(shù)字。在算法12中顯示的算法DETERMINEDOMAIN為一個指定的展平的變量vi和一個虛擬表Cacutal確定能選擇哪個可能值。該算法對除表示vi的布爾變量viB外所有布爾變量X進行存在數(shù)量詞操作。這種存在數(shù)量詞操作的結(jié)果是一個從配置角度看來表示一個虛擬表的BDD。該虛擬表具有只包括一列的優(yōu)點(具有vi的可能值的列)。由于依靠虛擬表形態(tài)的產(chǎn)品變量和其他的變量(僅一列)不能有內(nèi)部關(guān)聯(lián)性,因此可以通過簡單地在一個虛擬表中列出各個元素來確定域。這是通過1)找出虛擬表中布爾變量vib的賦值集,2)將這些值每一個都轉(zhuǎn)換為展平的值。一個解釋實例是為計算機產(chǎn)品型號的初始虛擬表確定motherboard_name展平的變量的域。表示motherboard_name的布爾變量是X0和X1。對所有其他布爾變量進行存在數(shù)量詞操作產(chǎn)生一個圖10所顯示的BDD(和圖5結(jié)構(gòu)等同)。這個BBD有三個布爾變量X0和X1的賦值(0,0),(0,1),(1,0)。利用符號表,可以確定相應的展平的值。上述算法可以實現(xiàn)多種不同的配置系統(tǒng)?,F(xiàn)在說明這些算法如何在一個包括通過網(wǎng)絡(luò)(如互聯(lián)網(wǎng))通訊的服務器和客戶線程的配置助理上使用。虛擬表位于在配置中執(zhí)行所需計算的虛擬表服務器上。一個客戶端程序用于向用戶呈現(xiàn)有關(guān)配置過程的信息及關(guān)于選擇的查詢等。優(yōu)選的實現(xiàn)包括兩個線程CONFIGCLIENT(位于客戶端)和算法CONFIGSERVER(位于服務器端)。在算法13和算法14中分別顯示了這兩個算法。CONFIGCLIENT線程運行在一個配置會話期間。當用戶找到一個合適的配置,希望結(jié)束配置會話時,該算法返回獲得的配置(“返回”在實現(xiàn)中,被發(fā)送結(jié)果到一個次序安排模塊等代替)。CONFIGSERVER算法是永不終止的。一開始,它就進入一個循環(huán)等待客戶服務。當從客戶那里接收到一個配置指令時,它計算出一個結(jié)果并立即返回該結(jié)果給客戶。然后它又循環(huán)到開始狀態(tài),等待從一個新客戶(或可能是同一個客戶)傳來的一個新指令,等等。通訊利用如SEND和RECEIVE的標準原語來指定。該協(xié)議是一開始,客戶端程序發(fā)送一個配置指令到服務器。該服務器接收到該配置指令并計算出結(jié)果。該結(jié)果返回給客戶??蛻舳顺绦蚪邮盏浇Y(jié)果,并提供信息給用戶及向用戶詢問用戶命令(一個選擇,退出等)。接收到用戶指令一個新的配置命令,客戶端程序發(fā)送到服務器,等等。一個參數(shù)提供給該客戶端程序公有展平的變量集。該算法如下所述運行1.首先,一個配置命令被發(fā)送到該服務器,表示“提供有關(guān)空的選擇列表的信息給我”。2.然后,從服務器接收信息,包括Sactual用戶已作出的一個選擇列表,Srejeted利用一個FORCE操作,獲得的由于不兼容性而被拒絕的選擇列表(細節(jié)如下)。N表示已作出選擇的兼容配置數(shù)量&lt;D1,...,Dn&gt;每個公有展平的變量vi的,不會導致不兼容配置的可選擇值集3.該信息提供給用戶4.接收到用戶的指令??赡艿挠脩糁噶钍恰elect(v,d)增加一個值為d的公有展平的變量v的選擇(即,一對(v,d))。用戶界面必須保證ifvisthevariablevi,thend∈Di(因而,該選擇導向一個兼容配置)?!orce(v,d)增加一個值為d的公有展平的變量v的選擇。如果該選擇和一個之前的選擇s’不相兼容,用戶希望拒絕s’?!eselect(v)去掉公有展平的變量v的選擇?!eset.去掉所有的選擇。·PreConfigure(S)去掉所有的選擇,并以一個選擇S的標準列表代替(例如,一個標準的工組站)。·ConfigIt對于所有的公有展平的變量,如果一個值沒有選定,則讓配置程序挑選任何兼容的選擇?!top退出交互配置。服務器返回實際選擇給調(diào)用程序,如一個次序安排程序。用戶界面必須保證當前的選擇包括一個完全的選擇(即N必須為1)。5.現(xiàn)在如果用戶指令是Stop,那么該算法終止并返回所獲得的選擇。6.其他情形,創(chuàng)建一個配置指令并發(fā)送到服務器??赡艿呐渲弥噶钣小onfig(S)命令服務器計算有關(guān)選擇S(可能是不兼容的)的信息。通過以下步驟創(chuàng)建選擇S—對一個Select用戶指令,新選擇僅被簡單地加到選擇列表的末端?!獙σ粋€Force用戶指令,新選擇被加入到選擇列表的前端如果存在不兼容,則將接受一個強制選擇,并拒絕其他的選擇(這些選擇以后會放到選擇列表里)?!獙σ粋€Deselect用戶指令,從選擇列表中去掉相關(guān)的展平的變量。—對一個Reset用戶指令,新選擇為空。—對一個PreConfigure用戶指令,新選擇基于標準列表?!onfigIT計算關(guān)于兼容性選擇S的信息。對有一個變量沒有選定值的所有的公有展平的變量,選定任何兼容性選擇。7.然后,又從服務器中接收到信息等,參見步驟2。服務器算法的目的是為了滿足客戶算法的計算需要,并被看成是客戶端和先前說明的關(guān)鍵配置算法之間的連接代碼。如下參數(shù)被提供給服務器算法Cbasic表示虛擬表的BDDCpub。&lt;v1,...,vn&gt;公有展平的變量列表Y符號表在計算過程中,變量Sactual是一個用戶作出的選擇的有序列表。每個選擇包括一對(v,d),其中v是一個公有展平的變量,d是來自v的域的值。BDDCactual表示關(guān)于實際選擇Sactual的所有兼容配置。該算法運行如下·服務器接收一個配置指令和一個選擇Snew的有序列表。·如果指令是Config,則Snew可能是不兼容的。因此,算法CONFIGCHECK用于創(chuàng)建一個兼容性配置集,以及創(chuàng)建接受的選擇和拒絕的選擇的列表?!せ蛘?,如果指令是ConfigIt,則Snew是兼容的,但是也必須作出剩余的選擇。這通過利用ConfigIt指令來實現(xiàn)。·然后,確定兼容性配置的實際數(shù)量?!槊總€變量,確定實際可能的值。·計算的信息被返回至服務器,算法循環(huán)等待新的指令。最后,配置助理在互聯(lián)網(wǎng)上部署的優(yōu)選方法如下所述·首先,一個希望執(zhí)行配置的用戶和web服務器相連?!eb服務器返回要在用戶瀏覽器中執(zhí)行的CONFIGCLIENT的實現(xiàn)(優(yōu)選用JavaScript實現(xiàn))?!ぎ擟ONFIGCLIENT在客戶端web瀏覽器初始化時,它和一個帶虛擬表,運行CONFIGSERVER算法的虛擬表服務器(不必是web服務器)相連。·客戶端和服務器端線程按如前所述方式通訊。附錄產(chǎn)品說明的XML文檔類型聲明&lt;!--DTDforConfigItprojects-Copyright(C)2000ConfigIt--&gt;&lt;!ELEMENTproject(head,entities)&gt;&lt;!ELEMENThead(name,description)&gt;&lt;!ELEMENTentities((constant|dbconstant)*,type*,productvariable*,(rule|dbrule)*,database?)&gt;&lt;!ELEMENTconstant(name,description,expression)&gt;&lt;!ELEMENTdbconstant(name,description,sglalias,filteralias,expression)&gt;&lt;!ELEMENTtype(name,description,typeconstructor)&gt;&lt;!ELEMENTtypeconstructor((boolean|subrange|array|product|sumtype|sumdb|idtype|label),optional?)&gt;&lt;!ELEMENTbooleanEMPTY&gt;&lt;!ELEMENTsubrange(expression)&gt;&lt;!ELEMENTarray(expression,typeconstructor)&gt;&lt;!ELEMENTproduct(prodvar*,(rule|dbrule)*)&gt;&lt;!ELEMENTprodvar((private|public),name,description,typeconstructor)&gt;&lt;!ELEMENTprivateEMPTY&gt;&lt;!ELEMENTpublicEMPTY&gt;&lt;!ELEMENTsumtype(sumvar*)&gt;&lt;!ELEMENTsumvar(name,description,typeconstructor)&gt;&lt;!ELEMENTsumdb(sglalias,filteralias)&gt;&lt;!ELEMENTidtype(#PCDATA)&gt;&lt;!ELEMENTlabelEMPTY&gt;&lt;!ELEMENToptionalEMPTY&gt;&lt;!ELEMENTproductvariable(name,description,(private|public),typeconstructor)&gt;&lt;!ELEMENTrule(name,description,expression)&gt;&lt;!ELEMENTdatabase(alias|sglguery|filter)*&gt;&lt;!ELEMENTalias(name,description,dsn,username,password)&gt;&lt;!ELEMENTdsn(#PCDATA)&gt;&lt;!ELEMENTusername(#PCDATA)&gt;&lt;!ELEMENTpassword(#PCDATA)&gt;&lt;!ELEMENTsqlquery(name,description,query,dbalias)&gt;&lt;!ELEMENTquery(#PCDATA)&gt;&lt;!ELEMENTdbalias(#PCDATA)&gt;&lt;!ELEMENTdbrule(name,description,sqlalias,mapping*)&gt;&lt;!ELEMENTsglalias(#PCDATA)&gt;&lt;!ELEMENTmapping(variable,lambdaexpr,lambdavar,column,filteralias)&gt;&lt;!ELEMENTvariable(expression)&gt;&lt;!ELEMENTlambdaexpr(expression)&gt;&lt;!ELEMENTlambdavar(#PCDATA)&gt;&lt;!ELBMEMENTcolumm|#PCDATA)&gt;&lt;!ELEMENTfilteralias(#PCDATA)&gt;&lt;!ELEMENTfilter(name,description,filterfunction,settings)&gt;&lt;!ELEMENTfilterfunction(#PCDATA)&gt;&lt;!ELEMENTsettings(number|true|false|string|numbers|booleans|strings)*&gt;&lt;!ELEMENTstring(#PCDATA)&gt;&lt;!ELEMENTnumbers(number)*&gt;&lt;!ELEMENTbooleans(true|false)*&gt;&lt;!ELEMENTstrings(string)*&gt;&lt;!ELEMENTname(#PCDATA)&gt;&lt;!ELEMENTdescription(#PCDATA)&gt;&lt;!ELEMENTexpression(idconstructor|number|true|false|and|or|xor|imp|biimp|plus|minus|mult|lt|lteq|gr|greq|eq|neq|shftl|shftr|not|forall|exist|sum|prod|case|sumvalue|if)&gt;&lt;!ELEMENTidconstructor((idname,indexlist?)|(idconstructor,idconstructor))&gt;&lt;!ELEMENTidname(#PCDATA)&gt;&lt;!ELEMENTindexlist(expression+)&gt;&lt;!ELEMENTnumber(#PCDATA)&gt;&lt;!ELEMENTtrueEMPTY&gt;&lt;!ELEMENTfalseEMPTY&gt;&lt;!ELEMENTand(expression,expression)&gt;&lt;!ELEMENTor(expression,expression)&gt;&lt;!ELEMENTxor(expression,expression)&gt;&lt;!ELEMENTimp(expression,expression)&gt;&lt;!ELEMENTbiimp(expression,expression)&gt;&lt;!ELEMENTplus(expression,expression)&gt;&lt;!ELEMENTminus(expression,expression)&gt;&lt;!ELEMENTmult(expression,expression)&gt;&lt;!ELEMENTlt(expression,expression)&gt;&lt;!ELEMENTlteq(expression,expression)&gt;&lt;!ELEMENTgr(expression,expression)&gt;&lt;!ELEMENTgreq(expression,expression)&gt;&lt;!ELEMENTeq(expression,expression)&gt;&lt;!ELEMENTneq(expression,expression)&gt;&lt;!ELEMENTshftl(expression|(expression,expression))&gt;&lt;!ELEMENTshftr(expression|(expression,expression))&gt;&lt;!ELEMENTnot(expression)&gt;&lt;!ELEMENTforall(idname,range,expression)&gt;&lt;!ELEMENTrange(expression,expression)&gt;&lt;!ELEMENTexist(idname,range,expression)&gt;&lt;!ELEMENTsum(idname,range,expression)&gt;&lt;!ELEMENTprod(idname,range,expression)&gt;&lt;!ELEMENTsumvalue(name,expression)&gt;&lt;!ELEMENTif(test,then,else)&gt;&lt;!ELEMENTtest(expression)&gt;&lt;!ELEMENTthen(expression)&gt;&lt;!ELEMENTelse(expression)&gt;&lt;!ELEMENTcase(idconstructor,pattern+,expression)&gt;&lt;!ELEMENTpattern(expression,eression)&gt;附錄B算法算法1functionMK(x,h,l)Var×V×V→Vreturn(Avertexrepresenting(x→h,l).)functionVAR(u)V→Varreturn(Ifurepresents(v→h,l),returnv.)functionLow(u)V→Vreturn(Ifurepresents(v→h,l),returnl.)functionHIGH(u)V→Vreturn(Ifurepresents(v→h,l),returnh.)functionAPPLY(,u1,u2)Operator×V×V→Vreturrn(Avertexrepresenting(u1u2).)functionEXISTS(x,u)Var×V→Vreturn(Avertexrepresenting)functionFULLONESAT(u)V→Vu≠0return(ABDDv(fullfillingv→u)withexactlyonesatisfyingassignment.)functionANYSAT(u)V→(Var×B)-setu≠0return(Anassignmentssatisfyingu.)functionSATCOUNT(u)V→Zreturn(ThenumberofvalueassignmentsfortheBDDu.)functionMIN(V)Var-set→Varreturn(ThevariablevinVwithlowestordering(v′∈(V-{v})).)functionMAX(V)Var-set→Varreturn(ThevariablevinVwithhighestordering(v′∈(V-{v})).)算法2functionMULTIAPPLY(,U)Operator×V-set→VassociativeandcommutativeifU={0}thenreturn0elsifU={1}thenreturn1elsifU={0,1}thenreturn01elsei=MIN({VAR(v)|v∈U})V={u∈U|VAR(u)=i}U′=U-VL={Low(v)|v∈V}H={HIGH(v)|v∈V}returnMK(i,MULTIAPPLY(,H∪U′),MULTIAPPLY(,L∪U′))fi算法3<prelisting-type="program-listing"><![CDATA[functionMULTIEXISTS(X,u)Var-set×V→Vifu∈{0,1}then  returnuelsifVAR(u)>MAX(X)then  returnuelse  h=MULTIEXISTS(X,HIGH(u))  l=MULTIEXISTS(X,Low(u))  ifVAR(u)∈.Xthen  returnAPPLY(V,h,l)  else  returnMK(VAR(u),h,l)  fifi]]></pre>算法4<prelisting-type="program-listing"><![CDATA[functionORDERRULES(<v1,...,vn>,E)  FlatVar-list×(FlatVar×Rule×FlatVar)-set→(Rule)-set-listfori←1tondo  Ei={(w1,r,w2)∈E|(w1=viVw2=vi)}  E=E-Ei  Fi={r|(W1,r,W2)∈Ei}endreturn<F1...,F(xiàn)n>]]></pre>算法5functionCONJOINEXISTS((v1B...,vnB&gt;,(F1,...,F(xiàn)n&gt;,u)(Var-set)-list×(V-set)-list×V→Vi,j∈{1,...,n}(i<j(vi∩freevars(Fj)=0))fori←1tondou=MULTIAPPLY(∧,{u}∪Fi)u=MULTIEXISTS(viB,u)endreturnu算法6<prelisting-type="program-listing"><![CDATA[functionVIRTUALIZETABLE(T,Y)Table×SymbolTable→Vu←0foreachrowiinTv←1  foreachcolumnjinT  w←VIRTUALIZECELL(T,i,j,Y)  v←APPLY(∧,v,w)  end  u←APPLY(V,u,v)endreturnufunctionVIRTUALIZECELL(T,i,j,Y)Table×Row×Column×SymbolTable→Vreturn(aBDDrepresentingxji=y(tǒng)j,xjiisthecellat(rowi,Columnj),yiisthelabelofcolumnj.)]]></pre>算法7<prelisting-type="program-listing"><![CDATA[functionCONFIG1(Cactual,(v,d),Y)V×(FlatVar×FlatVal)×SymbolTable→Vu←(ABDDrepresentingtheselection(v=d).)returnAPPLY(∧,Cactual,u)]]></pre>算法8<prelisting-type="program-listing"><![CDATA[functionCONFIGCONSISTENT(Cbasic,Snew,Y)  V×(FlatVar×FlatVal)list×SymbolTable→VCactual←Cbasicforeachs∈Snew  Cactual←CONFIGI(Cactual,s,Y)endreturnCactual]]></pre>算法9functionCONFIGCHECK(Cbasic,Snew,Y)V×(FlatVar×FlatVal)-list×SymbolTable→(V×(FlatVar×FlatVal)-list×(FlatVar×FlatVal)-list)Cactual←CbasicSactual←&lt;&gt;Srejected←&lt;&gt;foreachs∈SnewMustbe“in-order”traversal.ifCONFIG1(Sactual,s,Y)≠0thenCactual←CONFIGI(Sactual,s,Y)Sactual←Sactual^selseSrejected←Srejected^sfiendreturn(Cactual,Sactual,Srejected)算法10functionCONFIGIT(Cbasic,Snew,Y)V×(FlatVar×FlatVal)-list×SymbolTable→(V×(FlatVar×FlatVal)-list)Snewmustbeconsistentwrt.toCactual←CONFIGCONSISTENT(Cbasic,Snew,Y)Cactual≠0Cactual←FULLONESAT(Cactual)SactualB←ANYSAT(Cactual)Sactual←(SactualBtranslatedtoflattenedvariableselectionsby“backwards”useofY.)return(Cactual,Sactual)算法11functionCONFIGCOUNT(u)V×Symboltable→ZreturnSATCOUNT(u)算法12<prelisting-type="program-listing"><![CDATA[functionDETERMINEDOMAIN(Cactual,vi,{v1,...vn},Y)  V×FlatVar×FlatVar-set×SymbolTable→FlatVal-setX←v1B∪...∪vnBX←X-viBu←MULTIEXISTS(X,Cactual)DB←(ThesetofassignmentsoftheBooleanvariablesvibintheBDDu.)D←(DBtranslatedtoflattenedvaluesby“backwards”useofthesymboltableY.)returnD]]></pre>算法13functionCONFIGCLIENT({v1,...vn})FlatVar-set→(FlatVar×FlatVal)-setSEND(Config,&lt;&gt;)repeatRECEIVE(Sactual,Srejected,N,(D1,...,Dn&gt;)I←SHOWSTATUSANDREADFROMUSER(Sactual,Srejected,N,&lt;v1,...vn&gt;,&lt;D1,...,Dn&gt;)ifI=Select(v,d)theni∈{1,...,n}.((v=vi)→(d∈Di))SEND(Config,STRIPSELECTION(Sactual,v)^(v,d))elsifI=Force(v,d)thenSEND(Config,(v,d)^STRIPSELECTION(Sactual,v))elsifI=Deselect(v)thenSEND(Config,STRIPSELECTION(Sactual,v))elsifI=ResetthenSEND(Config,&lt;&gt;)elsifI=PreConfigure(Snew)thenSEND(Config,Snew)elsifI=ConfigItthenSEND(ConfigIt,Sactual)elseTheselectionmustbecomplete.returnSactualIfwegethereI=Stop.fiend(UnspecifiedfunctionsSHOWSTATUSANDREADFROMUSER,SEND,RECEIVE)functionSTRIPSELECTION(S,v)(FlatVar×FlatVal)-list×FlatVar→(FlatVar×FlatVal)-listreturn(Smodifiedsothatapossibleselectionrelatingtothevariablevisremoved.)算法14functionCONFIGSERVER(Cbasic,{v1,...vn},Y)V×FlatVar-set×SymbolTable→?repeatRECEIVE(C,Snew)ifC=Configthen(Cactual,Sactual,Srejected)←CONFIGCHECK(Cbasic,Snew,Y)else(Cactual,Sactual)←CONFIGIT(Cbasic,Snew,Y)IfwegethereC=ConfigIt.Srejected←&lt;&gt;endN←CONFIGCOUNT(Cactual)fori←1tondoDi←DETERMINEDOMAIN(Cactual,vi,[u1,...vn},Y)endSEND(Sactual,Srejected,N,&lt;D1,...,Dn&gt;)end(UnspecifiedfunctionsSEND,RECEIVE)權(quán)利要求1.一種配置包含若干部件的產(chǎn)品的方法,該方法包括·為每個部件提供涉及該部件的一組替換件的信息,·定義涉及不同部件的替換件之間的兼容性的規(guī)則,·在一個有向無環(huán)圖(DAG)中表示規(guī)則,及·通過重復下列步驟反復地配置產(chǎn)品—選定一個部件,—從該部件的所述替換件組中選出一個替換件,—校驗所述DGA以判斷所選的替換件是否和其他部件的選定替換件相兼容。2.一種如權(quán)利要求1所述的產(chǎn)品配置方法,其特征在于當每個部件的替換件被選定且部件的選定替換件相兼容時,停止反復配置。3.一種如權(quán)利要求1-2之一所述的產(chǎn)品配置方法,其特征在于選擇替換件的步驟,并且在選擇替換件之前,包括·利用DAG至少為一個部件確定該部件的一個替換件子集,使得該子集中的每個替換件都和其他部件的選定替換件相兼容,及·將該信息提供給一個用戶。4.一種如權(quán)利要求3所述的產(chǎn)品配置方法,其特征在于該方法還包括向系統(tǒng)提供一個語音合成器,而向用戶提供信息還包括·提供語音合成器生成的語音信息5.一種如權(quán)利要求1-4之一所述的產(chǎn)品配置方法,其特征在于選定一個部件和替換件的步驟還包括,對每個部件·利用DAG校驗部件的哪些替換件與其他每個部件的選定替換件中的至少一個相兼容·將該信息提供給用戶·允許用戶從與其他每個部件的選定替換件中的至少一個相兼容的替換件中選擇一個。6.一種如權(quán)利要求1-5的方法,其特征在于選擇替換件和校驗DAG的步驟還包括以下步驟·選擇或定義選定部件的一個替換件子集,·校驗DAG以確定該子集中的哪個替換件與其他部件的選定替換件兼容,及·提供涉及子集中那個替換件和其他部件的選定替換件兼容的信息。7.一種如權(quán)利要求1-6之一所述的產(chǎn)品配置方法,其特征在于反復配置還包括·至少一次,定義涉及限制至少一個部件的替換件的信息,以及·校驗DAG以確定部件的哪個替換件與限制信息相兼容。8.一種如權(quán)利要求1-7所述的產(chǎn)品配置方法,其中反復配置是在一個用戶的請求下停止的,并提供涉及所有可能兼容產(chǎn)品的信息,所述所有可能兼容產(chǎn)品對每個已選定一個替換件的產(chǎn)品都包括至少一個選定替換件,同時將該信息提供給該用戶。9.一種如權(quán)利要求1-8所述的產(chǎn)品配置方法,其中反復配置包括這樣的步驟獲得若干所有可能兼容產(chǎn)品,所述所有可能兼容產(chǎn)品對每個已選定一個替換件的產(chǎn)品都包括至少一個選定替換件,并提供該信息給用戶。10.一種如前述權(quán)利要求之一所述的方法,其特征在于在DAG中表示規(guī)則的步驟包括在一個包括下列成分的圖中表示規(guī)則·至少一個終端節(jié)點,·多個節(jié)點,包括—有多個可能不相交的結(jié)果的數(shù)學表達式,及—若干與該表達式可能結(jié)果數(shù)目相對應的指針,其中·至少一個節(jié)點的指針指向另一個節(jié)點,·至少一個節(jié)點的指針指向所述至少一個終端節(jié)點中的一個節(jié)點,及·至少一個節(jié)點是最頂端節(jié)點,從該最頂端節(jié)點定義了一條或多條從一個最頂端節(jié)點到所述至少一個終端節(jié)點中的一個終端節(jié)點的路徑,所述路徑通過一個或多個節(jié)點及其指針,每個節(jié)點都至少是一條路徑的一部分。11.一種如權(quán)利要求10所述的產(chǎn)品配置方法,其特征在于在該DAG中表示規(guī)則的步驟包括向一個或多個節(jié)點提供數(shù)學表達式,其中每個數(shù)學表達式包含一個數(shù)學操作符,每個操作符描述被相關(guān)節(jié)點的指針所指的節(jié)點表示的規(guī)則如何組合的,以表示組合規(guī)則集。12.一種如權(quán)利要求10-11所述的產(chǎn)品配置方法,其特征在于在DAG中表示規(guī)則的步驟包括在一個包括多個節(jié)點的DAG中表示規(guī)則,其中數(shù)學表達式是一個布爾表達式。13.一種如權(quán)利要求10-12所述的產(chǎn)品配置方法,其特征是在DAG中表示規(guī)則的步驟包括在一個包括多個節(jié)點的DAG中表示規(guī)則,其中每個節(jié)點包括一個是變量的數(shù)學表達式。14.一種如權(quán)利要求10-13所述的產(chǎn)品配置方法,其特征在于在DAG中表示規(guī)則的步驟包括在一個包括節(jié)點的DAG中表示規(guī)則,這些節(jié)點的數(shù)學表達式根據(jù)給定次序排序,使得對于每個節(jié)點實際節(jié)點的表達式次序低于被該實際節(jié)點的指針所指的任何節(jié)點的表達式。15.一種如權(quán)利要求10-14之一所述的配置產(chǎn)品方法,其特征在于在DAG中表示規(guī)則還包括以下步驟·識別具有相同表達式,且指針指向相同節(jié)點的第一和第二節(jié)點,及·將指向第一節(jié)點的指針指向第二節(jié)點。16.一種如權(quán)利要求10-15之一所述的產(chǎn)品配置方法,其特征在于在DAG中表示規(guī)則的步驟包括·將每個規(guī)則表示為一個邏輯表達式,·根據(jù)每個邏輯公式創(chuàng)建一個部分DAG來表示該公式的可能解集,·根據(jù)表示每個邏輯公式的部分DAGs來創(chuàng)建表示所有規(guī)則的DAG。17.一種如權(quán)利要求16所述的配置產(chǎn)品方法,其特征在于為每個部件提供涉及替換件的信息的步驟包括·選擇用于表示該部件的各個替換件的布爾變量,·為該部件的每個替換件提供一個編碼,作為布爾變量的布爾值的組合。18.一個如權(quán)利要求17所述的方法,其特征在于將每個規(guī)則表示為一個邏輯公式/表達式的步驟包括提供涉及與規(guī)則相關(guān)的替換件的布爾變量,并且根據(jù)規(guī)則使這些變量相互關(guān)聯(lián)。19.一種如權(quán)利要求10所述的方法,其特征在于在DAG中表示規(guī)則的步驟包括提供至少一種類型的終端節(jié)點,并且對于每條包括該終端節(jié)點的路徑,所有表達式與涉及該路徑的指針的所有相關(guān)結(jié)果的組合涉及一個兼容產(chǎn)品或一個不兼容產(chǎn)品。20.一種如權(quán)利要求19所述的產(chǎn)品配置方法,其特征在于在DAG中表示規(guī)則的步驟包括提供一個第一類型和一個第二類型的終端節(jié)點,其中·對于每條包括一個第一類型的終端節(jié)點的路徑,所有表達式的與所有涉及該路徑指針的相關(guān)結(jié)果的組合涉及一個兼容產(chǎn)品,及·對于每條包括一個第二類型的終端節(jié)點的路徑,所有表達式與所有涉及該路徑指針的相關(guān)結(jié)果的組合涉及一個不兼容產(chǎn)品。21.一個如權(quán)利要求20所述的方法,其特征在于終端節(jié)點的第一類型用來表示“真”,“一”或“1”,及終端節(jié)點的第二類型用來表示“假”,“零”或“0”。22.一種如權(quán)利要求17和權(quán)利要求20-21中任一項所述的方法,其特征在于選擇一個替換件的步驟包括識別涉及該部件其他替換件的布爾變量和包含涉及上述其他替換件的表達式的節(jié)點,及在該DAG中,識別包含上述節(jié)點的路徑并將其中任何一個第一類型終端節(jié)點改變?yōu)榈诙愋汀?3.一種如權(quán)利要求9和權(quán)利要求20所述的方法,其特征在于通過下列施加到DAG的步驟來執(zhí)行對不同選擇的可能情況的數(shù)目的計算,對于每個最頂端節(jié)點·從最頂端節(jié)點開始,通過執(zhí)行如下步驟來反復地查找實際節(jié)點所表示的可能情況的數(shù)目—如果該節(jié)點是一個終端節(jié)點,當終端節(jié)點是第一類型時,提供“1”;當終端節(jié)點是第二類型時,提供“0”,—否則查找由該實際節(jié)點指針指向的每個節(jié)點表示的可能情況的數(shù)目,并從中計算該節(jié)點表示的可能情況的數(shù)目。24.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于如果選擇的替換件與其他選定替換件不兼容,校驗DAG的步驟還包括·提供涉及與該選擇的替換件不兼容的其它選定替換件的信息,及·提供該信息給一個用戶。25.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于定義規(guī)則的步驟包括·通過查詢一個數(shù)據(jù)庫,獲得涉及與一個或多個部件的替換件相關(guān)的信息,和/或涉及不同部件的兩個或多個替換件之間兼容性的信息,及·根據(jù)從該數(shù)據(jù)庫中獲得的信息創(chuàng)建一個或多個規(guī)則。26.一種如權(quán)利要求25所述的產(chǎn)品配置方法,其特征在于該數(shù)據(jù)庫包括一個二維表,該二維表的多個行中每一行都包含涉及包括每個部件的替換件的產(chǎn)品的信息,這些替換件都是兼容的,其中提供一個規(guī)則的步驟包括提供一個涉及每一行信息的規(guī)則,其中在DAG中表示規(guī)則的步驟包括提供規(guī)則的邏輯和。27.一種如權(quán)利要求10所述的產(chǎn)品配置方法,其特征在于校驗DAG以確定一個替換件是否兼容的步驟包括在該DAG中搜索一條從一個最頂端節(jié)點到一個終端節(jié)點的路徑,該搜索包括·從作為一個實際節(jié)點的最頂端節(jié)點開始,·重復下列步驟,直到實際節(jié)點實一個終端節(jié)點—計算實際節(jié)點中的數(shù)學表達式,并根據(jù)其他部件選定的替換件決定輸出結(jié)果,—選擇表示該結(jié)果的節(jié)點指針,—選擇被該選定指針指向的節(jié)點作為實際節(jié)點?!ぬ峁┥婕斑x定替換件的信息,及·涉及該路徑的信息表示這些選擇是兼容的。28.一種如權(quán)利要求20所述的產(chǎn)品配置方法,其特征在于通過下面的方法從DAG中的一條路徑提供信息,即,從該路徑的節(jié)點的表達式來提供關(guān)于一個指定部件的哪個替換件已被選定的信息,并且包括這些替換件的產(chǎn)品的兼容性信息由該路徑的終端節(jié)點的表示來提供。29.一種如權(quán)利要求28所述的產(chǎn)品配置方法,其特征在于該DAG的節(jié)點表達式是布爾變量,該終端節(jié)點表示或“真”或“假”,路徑的信息涉及該路徑節(jié)點數(shù)學表達式中的變量的身份及其中的值或相關(guān)性,所述身份和值/相關(guān)性涉及部件的選定替換件,其中當該路徑的終端節(jié)點表示“真”時,選定的部件兼容,當該路徑的終端節(jié)點表示“假”時,該選定部件不兼容。30.一種如權(quán)利要求10所述的產(chǎn)品配置方法,其特征在于在DAG中表示規(guī)則的步驟包括·在一個實際DAG中表示該規(guī)則,·選擇至少一個要隱藏的部件,·通過如下步驟改變所述實際DAG—在包括與所選擇的部件的表達式有關(guān)的實際DAG中識別節(jié)點,—從該實際DAG中去掉這些節(jié)點,—增加不包括涉及該選擇的部件表達式的節(jié)點至實際DAG,使得這些部件所隱含的兼容性被該實際DAG所反映,·提供該實際DAG作為表示該規(guī)則的DAG。31.一種如權(quán)利要求10所述的產(chǎn)品配置方法,其特征在于在DAG中表示規(guī)則的步驟包括·對于每個規(guī)則,創(chuàng)建一個表示該規(guī)則的部分DAG,·識別至少一個要隱藏的部件,·選擇被識別部件的一個次序,·初始化創(chuàng)建一個未表示規(guī)則的實際DAG,然后重復下列步驟—選擇一個次序最低的未選擇部件,—重復如下步驟,直到包括涉及所選擇部件的表達式的所有的部分DAGs都被選定*選定一個包括涉及所選擇的部件表達式的部分DAG,*將該實際DAG和選定部分DAG組合成一個信的實際DAG,—通過如下步驟改變該實際DAG*在包括涉及已識別部件的表達式的實際DAG中識別節(jié)點,*從該實際DAG中去掉這些節(jié)點,*增加不包括涉及識別部件表達式的節(jié)點至該實際DAG,以便識別部件所隱含的兼容性可以通過該實際DAG反映,·通過將該實際DAG和所有未選定部分DAGs合并來提供DAG。32.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,該方法還包括·識別一個用戶·用戶通過由其控制的設(shè)備和執(zhí)行反復配置的設(shè)備之間的通訊來執(zhí)行選擇一個部件替換件的步驟,·發(fā)送有關(guān)校驗該DAG的信息給該用戶。33.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于該方法還包括·識別一個用戶,·在反復配置前—發(fā)送該DAG到由用戶控制的設(shè)備里,—在用戶設(shè)備里執(zhí)行反復配置。34.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,在反復配置中,還包括如下步驟·獲取有關(guān)沒有選定替換件的部件的一個或多個替換件信息,該一個或多個替換件中的每個替換件都和已選定的替換件相兼容及·提供該信息給用戶。35.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于該方法還包括向系統(tǒng)提供一個語音識別器,其中反復配置產(chǎn)品的步驟還包括·從一個語音合成器識別的文本中選擇一個部件,及·在該語音識別器識別的文本中,從該部件的替換件組中選擇一個替換件。36.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于該方法還包括識別一個可配置設(shè)備和一個接口設(shè)備,及·將表示規(guī)則的DAG存儲在所述可配置設(shè)備里,·將DAG從該配置設(shè)備上傳到該接口設(shè)備,及·在反復配置產(chǎn)品的步驟里,在該接口設(shè)備上執(zhí)行校驗DAG以判斷選擇的替換件是否和其它部件的其它選定替換件兼容。37.一種如權(quán)利要求36所述的產(chǎn)品配置方法,其特征在于該方法還包括識別所述可配置設(shè)備中的一列預定部件,以及識別所述可配置設(shè)備中這些部件的一列預定替換件,其中反復配置產(chǎn)品的步驟還包括·在接口設(shè)備上執(zhí)行對DAG的校驗以判斷選擇替換件是否與其他部件的其他選定替換件兼容以及是否與預定替換件兼容。38.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于該方法還包括識別一列觀測者部件和一列非觀測者部件,及·在一個DAG中,表示非觀測者部件的規(guī)則,·為每個觀測者部件確定所述規(guī)則的一個子集,以便從這些規(guī)則里,可能為與非觀測者部件的替換件兼容的觀測者部件確定替換件,·為每個觀測者部件,將所述規(guī)則子集表示為一個觀測者DAG,及·在反復配置產(chǎn)品的步驟里—校驗DAG以判斷選擇的替換件是否和其他部件的其它選定替換件兼容,—通過為每個部件確定是否只有一個替換件與所有選定替換件兼容,來來確定一個系統(tǒng)確定的替換件的集—對至少一個觀測者部件,為該觀測者部件校驗觀測者DAG以確定是否只有一個替換件同其他選定替換件及所述系統(tǒng)確定的替換件集相兼容,及—提供該信息給用戶。39.一種如前權(quán)利要求之一所述的產(chǎn)品配置方法,其特征在于反復配置產(chǎn)品的步驟還包括·對于每對部件與替換件,提供該對狀態(tài)的分類,·將該分類歸入到包括封鎖類,可選擇類,用戶選擇類,系統(tǒng)選擇類與強制類的一個結(jié)果列表中的一種,·當即使是不考慮其他部件替換件的選擇的情況下,也不能為該部件選定一個替換件時,該狀態(tài)規(guī)定為封鎖類型,·當該部件的替換件與其他部件的選定替換件都相兼容時,該狀態(tài)規(guī)定為可選擇類型,·當為該部件已經(jīng)選定替換件時,該狀態(tài)規(guī)定為用戶選擇類型,·當替換件是該部件里與其他部件選定替換件相兼容的唯一替換件,且用戶還沒有選定該替換件時,該狀態(tài)規(guī)定為系統(tǒng)選擇類型,·當該部件的可選替換件與其他部件替換件的一些選擇不相兼容時,該狀態(tài)規(guī)定為強制類型,·將分類信息提供給一個用戶。40.一種包含計算機程序代碼裝置的計算機程序,當該程序在一臺計算機上運行時,適用于執(zhí)行前述任何權(quán)利要求的方法的所有步驟。41.如權(quán)利要求40所述的,包含在計算機可讀介質(zhì)上的一個計算機程序。42.一種包括如權(quán)利要求40所述的計算機程序的計算機可讀介質(zhì)。全文摘要一個復雜的產(chǎn)品包括多個部件,其中每個部件都和其他部件相互關(guān)聯(lián)。這種相互關(guān)聯(lián)性的一個后果是,一個部件的選擇可能和產(chǎn)品中包括的其他部件相排斥。一個相容的配置是一個滿足所有內(nèi)部關(guān)聯(lián)性的部件選擇。用于計算機輔助配置的一個計算機程序可以幫助終端用戶作出導向相兼容產(chǎn)品的選擇。本發(fā)明的優(yōu)選實施例,虛擬制表,是一個用于跟蹤大量部件的內(nèi)部關(guān)聯(lián)性,可以創(chuàng)建一個有效,準確的配置程序的方法。這種程序允許利用網(wǎng)絡(luò)(如互聯(lián)網(wǎng))實現(xiàn)交互式配置。本發(fā)明的另一個方面,智能搜索,可以從一個產(chǎn)品數(shù)據(jù)庫里計算出部件之間的一組內(nèi)部關(guān)聯(lián)性。文檔編號G06Q10/00GK1479904SQ01820158公開日2004年3月3日申請日期2001年11月30日優(yōu)先權(quán)日2000年12月8日發(fā)明者雅各布·利希騰貝格,雅各布利希騰貝格,雷爾夫安德森,亨里克·雷爾夫·安德森,許爾加德,亨里克·許爾加德,葉斯佩爾·穆勒,爾穆勒,斯騰拉斯穆森,安諾斯·斯騰·拉斯穆森申請人:產(chǎn)品配置軟件股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1