專利名稱:一種基于生成-驗證的認知描述程序的求解方法
技術領域:
本發明涉及一種基于生成-驗證的認知描述程序的求解方法,該方法基于非單調邏輯推理理論,采用程序謂詞依賴圖以及啟發式搜索技術,包括實例化,程序簡化,生成可能解、通過測試確定最終解四個步驟。屬于邏輯程序設計、知識表示和推理領域。
背景技術:
回答集程序(answer set program)具有較強的非單調推理能力,并且接近自然語言,因此成為規劃、診斷、知識管理、基于知識的問答、約束求解等領域一種重要的知識表示和推理的工具。隨著Smodels、DLV、Clasp等高效的回答集程序推理機的出現,回答集程序的應用前景越來越廣泛。但是人們發現回答集程序在不完整信息的表示及推理方面存 在缺陷,因此Michael Gelfond于1991年提出了一種擴展的回答集程序-認知描述程序
(Epistemic Specifications)。認知描述程序作為回答集程序的一種擴展,由一些規則組成,其中規則的形式如下I1Or. . . or Ik — gk+1, ,gm,not lm+1,, not In 通過添加認知運算符 K,能夠在信念集不唯一的情況下,直觀簡潔地表示基于不完全信息的認知推理知識,而這種情況下,采用傳統回答集程序無法正確表示和推理,M. Gelfond用下例直觀地表達了提出認知描述程序的動機。例某學校使用下面四條規則去決定學生是否有資格獲取獎學金。a)學分高的學生可以獲取獎學金、b)學分中等的但是是少數民族的學生可以獲取獎學金、c)學分低的學生不可以獲取獎學金、d)根據上面三條規則不可以決定是否有資格獲取獎學金的同學,學院需要進行面試來確定其是否有資格獲取獎學金。如果給定這樣一個不完整信息“Mike的學分可能為高也可能為中”。顯然,依據上述四條規則,Mike是需要去面試的,因為不能確定Mike —定有資格獲取獎學金和一定沒有資格獲取獎學金。而這個問題使用回答集程序構建一個查詢系統來查詢Mike是否要去面試,將不能得出正確的結論,但是使用認知描述程序卻可以得到正確的結論。M. Truszczynski于2010年進一步完善了認知描述程序,他提出了一種認知描述程序的新形式,并且證明了這種新的形式與M. Gelfond于1991年所定義的語法與語義吻合。通過新的形式,M. Truszczynski分析了該語言實現的復雜度以及使用有向圖的方法去構建認知描述程序推理機。然而,該語言的語義在某些特殊程序中,存在得到不正確解的缺陷。M. Gelfond于2011年修正了認知描述程序的語義,進一步完善了認知描述程序。語義的定義如下假定S為認知描述程序中客觀字的集合的集合,根據S約去認知描述程序中的K和-K,使得認知描述程序變為普通的邏輯程序,如果普通邏輯程序的解和S相等,則S為該認知描述程序的解。由于語義的修改,從而更好地符合自然語言,并且確保了認知描述程序的正確性。至此認識描述程序的語義更加完善,為進一步應用于多Agent,軟件測試,基于知識的問答系統等領域打下了理論基礎。此外,鑒于認識邏輯的廣泛應用和需求,作為認識邏輯語言子集的認知描述程序被認為將會有效地應用于基于多Agent推理系統,問答系統,軟件測試及決策系統等領域。然而,迄今為止,還未出現該程序的推理機,認知描述程序推理機的設計與實現能夠使得該語言得到實際應用,認知描述程序求解是:復雜度的問題,但是此求解方法效率較低且復雜。
發明內容
發明目的針對現有技術中存在的問題與不足,本發明提供一種基于生成一驗證的認知描述程序的求解方法,設計求解方法并提出和采用高效的優化方法是該發明的關鍵。本發明采用程序謂詞依賴圖以及啟發式生成一驗證技術實現認知描述程序的求解,包括實例化,程序簡化,生成可能解、通過測試確定最終解四個步驟。通過程序依賴圖減少實例化過程中的迭代次數,利用求解恒真恒假字集簡化了輸入程序,通過啟發式搜索方法減少了搜索空間,提高推理機的效率,使得該語言能夠應用到實際問題求解中,這在大規模的問題求解中尤為重要。技術方案一種基于生成一驗證的認知描述程序的求解方法,其步驟包括步驟1:對詞法和語法正確,規則安全的認知描述程序構建謂詞依賴圖,步驟包括11)通過Lex和Yacc生成推理機的詞法和語法分析模塊,檢查輸入程序是否為語法正確的認知描述程序;12)規則的安全性檢查對于一條規則,如果出現在規則頭部的變量都出現在正主觀字或客觀字中,則該規則是安全的,否則它是不安全的;13)構建謂詞依賴圖i)如果一個謂詞p是程序中某一規則頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中客觀字或正主觀字中,那么就建立P到q的強依賴邊;ii)如果一個謂詞謂詞p是程序中某一規則頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中弱否定字或負主觀字中,那么就建立P到q的弱依賴邊;步驟2 :利用步驟I生成的謂詞謂詞依賴圖,對程序進行實例化,步驟包括21)程序分塊根據步驟I生成的謂詞謂詞依賴圖,依次找出圖中的所有強連通子圖,每個強連通子圖確定程序的一個分塊;22)拓撲排序根據以下規則確定程序塊之間的拓撲排序;i)如果強連通子圖A到強連通子圖B存在一條強依賴邊,則強連通子圖A確定的塊先于強連通子圖B確定的塊;ii)如果強連通子圖A與強連通子圖B不存在任何強依賴邊,且強連通子圖A存在一條弱依賴邊到強連通子圖B,則強連通子圖A確定的塊先于強連通子圖B確定的塊;23)分步實例化
基于正向推理技術,依次對各個程序塊進行實例化;步驟3 :簡化程序,在保證解不變的情況下,刪除冗余規則并消去其余規則規則體中的冗余字步驟包括31)求恒真恒假字集求取實例化的認知描述程序的所有恒真恒假字集。這是一個迭代的過程,直至恒真和恒假字集不再增加為止;32)刪除冗余規則和字根據恒真恒假字集,刪除冗余規則并消去其余規則規則體中的冗余字,從而簡化認知描述程,簡化推理復雜性;步驟4 :猜測主觀字的取值,生成程序可能解41)確定主觀字間依賴關系根據步驟I生成的謂詞依賴圖,確定所有主觀字之間的依賴關系。即如果從主觀字A的謂詞到主觀字B的謂詞,存在一條由強依賴邊組成的路徑,則主觀字B依賴于主觀字A;42)生成可能解采用啟發式方法,依據主觀字之間的依賴關系,猜測所有主觀字的取值。從而轉化認知描述程序為回答集邏輯程序,并生成回答集邏輯程序的全部回答集組成的一個認知描述程序的可能解。步驟5 :用可能解檢驗主觀字的猜測值,如果該可能解滿足所有主觀字的猜測值,則該可能解就是認知描述程序的一個解;采用回溯過程猜測所有主觀字的取值,生成程序所有的解。所述的步驟I中,對包含了主觀字的邏輯程序規則,依照規則頭中的變量是否出現在規則體的正主觀字和客觀字中判定規則的安全性,判定條件是對于一條規則,如果出現在規則頭部的變量都出現在正主觀字或客觀字中,則該規則是安全的,否則它是不安全的。一個認知描述程序是安全的當且僅當程序中的所有規則都是安全的。利用恒真恒假字集簡化認知描述程序,簡化規則如下對于一條規則r,i)當規則體中的正主觀字Ka存在于恒真字集中,則從該規則規則體中刪掉Ka ;ii)當規則體中的客觀字I存在于恒真字集中,則從該規則規則體中刪掉I ;iii)當規則體中的負主觀字-Ka存在于恒假字集中,則從該規則規則體中刪掉-Ka ;iv)當規則體中的弱否定字not I存在于恒假字集中,則從該規則規則體中刪掉not I ;v)當規則體中的正主觀字Ka存在于恒假字集中,去除該規則;vi)當規則體中的客觀字I存在于恒假字集中,去除該規則;vii)當規則體中的負主觀字-Ka存在于恒真字集中,去除該規則;viii)當規則體中的弱否定字not I存在于恒真字集中,去除該規則。所述步驟4中,將主觀字之間的依賴關系作為啟發信息,搜索主觀字取值空間,用每一個搜索到的主觀字可能的取值把認知描述程序轉換為一個回答集程序,求取該回答集程序的所有回答集并組成認知描述程序的一個可能解。采用啟發信息猜測主觀字取值的策略具體如下i)依照主觀字依賴關系的先后次序,ii)后續主觀字的值由它所依賴的主觀字的值決定,即如果主觀字A依賴于主觀字B,當主觀字B取值為真,則主觀字A的取值也為真。當主觀字B取值為假,則主觀字A取值也為假。iii)對不依賴于任何其他主觀字的主觀字,賦予一個真值。有益效果本發明主要有以下優點(I)通過定義了認知描述程序的安全規則,使得認知描述程序的語義更加完善,使得用戶使用認知描述程序時可以使用變量,并且含有變量的規則都是有意義及實例化后的規則數目有限;(2)通過定義了認知描述程序的程序謂詞依賴圖,使得對認知描述程序可以分塊及塊之間拓撲排序。再次采用正向推理技術依次實例化各程序塊,從而減少了實例化的迭代次數,提高了認知描述程序的實例化效率。此外分塊還使得認知描述程序并行實例化成為了可能,對于沒有依賴關系的塊之間,可以使用并行技術對其實例化,提高認知描述程序實例化的效率;(3)通過求出程序的恒真恒假字集,刪除冗余規則并消去其余規則規則體中的冗余字,從而簡化了認知描述程序,提高了推理機求解的效率;(4)本發明首先利用恒真和恒假字集去除了部分可以約簡的主觀字,對于余下的主觀字的采用啟發式生成-驗證的方法。然后根據轉換規則將認知描述程序轉換為回答集程序,最后求出認知描述程序的所有解。本發明中,只需猜測余下的主觀字,不需要對所有的主觀字進行猜測,極大地提高了推理機的效率;(5)本發明提出了基于啟發式的搜索的技術,對于所有主觀字,首先利用程序謂詞依賴圖確定其依賴關系,然后依次猜測主觀字。減少了一些不必要的猜測,減少生成測試中生成的次數,極大地提高了生成測試的效率。
圖1為本發明實施例的系統原理圖;圖2為本發明實施例中示例程序I的程序謂詞依賴圖;圖3是本發明實施例中推理機實例化的流程圖;圖4是本發明實施例中推理機求解的流程圖;圖5是本發明實施例中求解恒真恒假字集的過程圖;圖6是本發明實施例中啟發式生成-驗證的過程圖。
具體實施例方式下面結合具體實施例,進一步闡明本發明,應理解這些實施例僅用于說明本發明而不用于限制本發明的范圍,在閱讀了本發明之后,本領域技術人員對本發明的各種等價形式的修改均落于本申請所附權利要求所限定的范圍。下面將從體系結構和方法流程兩個方面來介紹本發明的技術方案。I)體系結構圖1給出了一種認知描述程序推理機的實現的體系結構。下面給出幾個主要部分的具體說明。語法分析器語法分析器檢查輸入認知描述程序的語法的正確性和認知描述程序是否為安全的認知描述程序,當用戶輸入程序語法不正確或者不是安全的認知描述程序,則給出程序的出錯位置。語法分析器模塊的輸入為用戶輸入的認知描述程序,輸出為語法正確且安全的認知描述程序或者為錯誤的認知描述程序和錯誤報告。
構建程序謂詞依賴圖程序P的謂詞依賴圖由頂點和有向邊構成,即D印⑵=(V,E)。其中頂點的集合V由程序P中所有謂詞的名構成。邊的集合E由程序中的規則生成。i)如果一個謂詞p是程序中某一規則的頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中客觀字或正主觀字中,那么就建立P到q的強依賴邊。ii)如果一個謂詞謂詞p是程序中某一規則的頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中弱否定字或負主觀字中,那么就建立P到q的弱依賴邊。圖2下面示例認知描述程序I的程序謂詞依賴圖。學生(張三) 優秀(X)or中等(X)—學生(X),not 老師(X) 獎學金⑴一K優秀⑴.免學費⑴一K獎學金(X)程序I構建程序謂詞依賴圖模塊的輸入為語法正確且安全的認知描述程序,根據謂詞依賴圖的定義構建輸入程序的程序謂詞依賴圖,輸出為程序謂詞依賴圖。程序分塊及排序根據程序謂詞依賴圖,依次找出圖中的所有強連通子圖,根據強連通子圖確定各個程序塊。然后利用謂詞依賴圖,確定各個程序塊的依賴關系。程序分塊及排序模塊的輸入為程序謂詞依賴圖和認知描述程序,輸出為有序的模塊化的認知描述程序。程序實例化程序實例化即使用常量替換程序中的所有變量。基于正向推理技術,首先獲取所有已實例化的謂詞,依據分塊排序模塊的輸出使用已實例化的謂詞集合依次實例化各個程序塊。對于任一程序塊,實例化該程序塊和產生新的謂詞是一個迭代的過程,直至該程序塊不再產生新的謂詞。當所有程序塊全部實例化,程序實例化模塊終止運行,并輸出實例化的認知描述。程序實例化模塊的輸入為有序的模塊化的認知描述程序,輸出則為實例化后的認知描述程序。求解恒真恒假集(如圖4所示),簡化程序恒真和恒假集由兩種字的集合組成,即SM(P) = (LFP,MFS)。其中LFP由一定成立的字構成,MFS由一定不成立的字所構成。根據恒真恒假字集,刪除冗余規則并消去其余規則規則體中的冗余字,從而簡化認知描述程,簡化推理復雜性。
求解恒真恒假模塊輸入為實例化后的認知描述程序,求解當前程序的恒真恒假集,然后根據這兩個集合去簡化程序。該過程是一個迭代的過程,直至恒真恒假集不在增加和程序不能簡化為止。該模塊的輸出為簡化后的認知描述程序和恒真恒假集。啟發式搜索(如圖6所示)生成驗證是人工智能中的一項成熟技術,本發明提出了一種啟發式生成驗證方法,來求解認知描述程序的解。首先根據構建的程序謂詞依賴圖,確定認知描述程序中所有主觀字(Subjective Literal)的依賴關系,其中主觀字即含有認知運算符的字K I或者-KI。依次猜測主觀字的取值,然后根據猜測的主觀字取值將認知描述程序變為普通回答集程序,求出回答集程序的所有回答集,并將所有的回答集作為認知描述程序的一個可能的解,通過驗證主觀字確定是否為程序的解。通過采用回溯過程猜測主觀字的可能取值,直至完成所有的猜測,求解認知描述程序的全部解。啟發式生成驗證模塊的輸入認知描述程序和穩定模型,其輸出為認知描述程序的所有的解。2)方法流程本發明提出了一種基于生成-驗證的認知描述程序推理機實現方法,包括實例化,程序簡化,生成可能解、通過測試確定最終解四個步驟。當輸入一個認知描述程序,首先,在詞法、語法正確性檢查基礎上,構建認知描述程序的謂詞依賴圖,據此對程序分塊并生成塊的拓撲排序,然后,使用前向推理技術,依據拓撲排序,依次對程序進行安全規則檢查并實施實例化,最終生成實例化的認知描述程序。其次,對實例化的認知描述程序求解其恒真和恒假字集,簡化程序。該過程是一個迭代的過程,依據不動點定理保證了迭代可終止。然后,根據謂詞依賴圖確定主觀字之間的依賴關系,依此猜測主觀字的取值,從而轉化認知描述程序為回答集邏輯程序,并求解該程序的全部回答集。至此,所求回答集就是所輸入的認知描述程序的一個可能解。此后,通過驗證主觀字取值是否正確,確定這個可能解是否是認知描述程序的解。通過采用回溯過程猜測主觀字的可能取值,直至完成所有的猜測,求解認知描述程序的全部解。該方法的步驟包括步驟1:對詞法和語法正確,規則安全的認知描述程序構建謂詞依賴圖,步驟包括11)檢查輸入程序是否為語法正確的認知描述程序。這一步中通過Lex和Yacc生成推理機的詞法和語法分析模塊,當語法錯誤時,給出出錯的位置,否則將進入規則的安全性檢查。12)規則的安全性檢查如果一條規則中,出現在規則頭部的變量都出現在正主觀字或客觀字中,則該規則是安全的,否則它是不安全的。該模塊檢查程序中所有含有變量的規則,當出現不安全的規則,程序出錯并給出錯誤位置。13)構建謂詞依賴圖i)如果一個謂詞p是程序中某一規則的頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中客觀字或正主觀字中,那么就建立P到q的強依賴邊。ii)如果一個謂詞謂詞p是程序中某一規則的頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中弱否定字或負主觀字中,那么就建立P到q的弱依賴邊。程序根據上述兩條規則,構建認知描述程序的程序謂詞依賴圖。
步驟2 :利用步驟I中謂詞依賴圖,對程序進行分塊實例化,步驟包括21)程序分塊根據步驟I中的謂詞依賴圖,依次找出圖中的所有強連通子圖,根據強連通子圖將原程序分成各個程序塊。22)拓撲排序依賴關系由下面兩條規則確定i)如果強連通子圖A到強連通子圖B存在一條強依賴邊,則強連通子圖A確定的塊先于強連通子圖B確定的塊。ii)如果強連通子圖A與強連通子圖B不存在任何強依賴邊,且強連通子圖A存在一條弱依賴邊到強連通子圖B,則強連通子圖A確定的塊先于強連通子圖B確定的塊。23)分步實例化基于正向推理技術,依次對各個程序塊進行實例化,并輸出實例化后的認知描述程序。首先獲取程序中所有已實例化的字,加至集合S,即遍歷認知描述程序中的所有規則,將不含變量的規則頭部(head)的字加至集合S。依次實例化所有的程序塊,將S和程序塊中的每條規則體比較,如果該規則可以被S實例化,即該規則體中含有變量的字在S中存在,則用可替換的字生成一條不含變量的規則,并將新規則的頭部中的字加至集合S中。這是一個迭代的過程,直到S中不產生新的已實例化的字為止。程序實例化的算法見算法I。算法I認知描述程序實例化
權利要求
1.一種基于生成-驗證的認知描述程序的求解方法,其特征在于,其步驟包括 步驟1:對詞法和語法正確,規則安全的認知描述程序構建謂詞依賴圖,步驟包括 11)通過Lex和Yacc生成推理機的詞法和語法分析模塊,檢查輸入程序是否為語法正確的認知描述程序; 12)規則的安全性檢查 對于一條規則,如果出現在規則頭部的變量都出現在正主觀字或客觀字中,則該規則是安全的,否則它是不安全的; 13)構建謂詞依賴圖1)如果一個謂詞P是程序中某一規則頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中客觀字或正主觀字中,那么就建立P到q的強依賴邊; )如果一個謂詞謂詞P是程序中某一規則頭部字的謂詞,而另一個謂詞q存在于該規則的規則體中弱否定字或負主觀字中,那么就建立P到q的弱依賴邊; 步驟2 :利用步驟I生成的謂詞謂詞依賴圖,對程序進行實例化,步驟包括 21)程序分塊 根據步驟I生成的謂詞謂詞依賴圖,依次找出圖中的所有強連通子圖,每個強連通子圖確定程序的一個分塊; 22)拓撲排序 根據以下規則確定程序塊之間的拓撲排序; i)如果強連通子圖A到強連通子圖B存在一條強依賴邊,則強連通子圖A確定的塊先于強連通子圖B確定的塊; ii)如果強連通子圖A與強連通子圖B不存在任何強依賴邊,且強連通子圖A存在一條弱依賴邊到強連通子圖B,則強連通子圖A確定的塊先于強連通子圖B確定的塊; 23)分步實例化 基于正向推理技術,依次對各個程序塊進行實例化; 步驟3 :簡化程序,在保證解不變的情況下,刪除冗余規則并消去其余規則規則體中的冗余字步驟包括 31)求恒真恒假字集 求取實例化的認知描述程序的所有恒真恒假字集;這是一個迭代的過程,直至恒真和恒假字集不再增加為止; 32)刪除冗余規則和字 根據恒真恒假字集,刪除冗余規則并消去其余規則規則體中的冗余字,從而簡化認知描述程,簡化推理復雜性; 步驟4 :猜測主觀字的取值,生成程序可能解 41)確定主觀字間依賴關系 根據步驟I生成的謂詞依賴圖,確定所有主觀字之間的依賴關系。即如果從主觀字A的謂詞到主觀字B的謂詞,存在一條由強依賴邊組成的路徑,則主觀字B依賴于主觀字A ; 42)生成可能解 采用啟發式方法,依據主觀字之間的依賴關系,猜測所有主觀字的取值。從而轉化認知描述程序為回答集邏輯程序,并生成回答集邏輯程序的全部回答集組成的一個認知描述程序的可能解; 步驟5 :用可能解檢驗主觀字的猜測值,如果該可能解滿足所有主觀字的猜測值,則該可能解就是認知描述程序的一個解; 采用回溯過程猜測所有主觀字的取值,生成程序所有的解。
2.如權力要求I所述的基于生成-驗證的認知描述程序的求解方法,其特征在于所述的步驟I中,對包含了主觀字的邏輯程序規則,依照規則頭中的變量是否出現在規則體的正主觀字和客觀字中判定規則的安全性,判定條件是對于一條規則,如果出現在規則頭部的變量都出現在正主觀字或客觀字中,則該規則是安全的,否則它是不安全的;一個認知描述程序是安全的當且僅當程序中的所有規則都是安全的。
3.如權力要求I所述的基于生成-驗證的認知描述程序的求解方法,其特征在于利用恒真恒假字集簡化認知描述程序,簡化規則如下對于一條規則r, i)當規則體中的正主觀字Ka存在于恒真字集中,則從該規則規則體中刪掉Ka ; )當規則體中的客觀字I存在于恒真字集中,則從該規則規則體中刪掉I ; iii)當規則體中的負主觀字-Ka存在于恒假字集中,則從該規則規則體中刪掉-Ka; iv)當規則體中的弱否定字notI存在于恒假字集中,則從該規則規則體中刪掉notI ; v)當規則體中的正主觀字Ka存在于恒假字集中,去除該規則; vi)當規則體中的客觀字I存在于恒假字集中,去除該規則; vii)當規則體中的負主觀字-Ka存在于恒真字集中,去除該規則; viii)當規則體中的弱否定字notI存在于恒真字集中,去除該規則。
4.如權力要求I所述的基于生成-驗證的認知描述程序的求解方法,其特征在于所述步驟4中,將主觀字之間的依賴關系作為啟發信息,搜索主觀字取值空間,用每一個搜索到的主觀字可能的取值把認知描述程序轉換為一個回答集程序,求取該回答集程序的所有回答集并組成認知描述程序的一個可能解;采用啟發信息猜測主觀字取值的策略具體如下 i)依照主觀字依賴關系的先后次序, )后續主觀字的值由它所依賴的主觀字的值決定,即如果主觀字A依賴于主觀字B,當主觀字B取值為真,則主觀字A的取值也為真。當主觀字B取值為假,則主觀字A取值也為假; iii)對不依賴于任何其他主觀字的主觀字,賦予一個真值。
全文摘要
本發明公開了一種基于生成-驗證的認知描述程序的求解方法,當輸入一個認知描述程序首先,在詞法、語法正確性分析和安全檢查基礎上,構建認知描述程序的謂詞依賴圖,據此對程序分塊并生成塊的拓撲排序,然后,使用正向推理技術,依據拓撲排序,依次實例化程序塊,最終生成實例化的認知描述程序。其次,對實例化的認知描述程序求其恒真恒假字集,用于刪除冗余規則和冗余字,以簡化程序。然后,根據謂詞依賴圖確定主觀字之間的依賴關系,依據主觀字之間的依賴關系啟發式生成程序的可能解。此后,通過驗證主觀字取值是否正確,確定這個可能解是否是認知描述程序的解。整個求解方法采用回溯過程生成所有可能解,并驗證得到程序所有解。
文檔編號G06N5/04GK103020714SQ20121052909
公開日2013年4月3日 申請日期2012年12月10日 優先權日2012年12月10日
發明者崔榮存, 張志政 申請人:東南大學