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

作為數(shù)據(jù)類型的基于行為的多代理系統(tǒng)的制作方法

文檔序號(hào):6654977閱讀:232來源:國(guó)知局
專利名稱:作為數(shù)據(jù)類型的基于行為的多代理系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明主要涉及計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,更確切地說涉及用于實(shí)現(xiàn)基于行為的多代理計(jì)算系統(tǒng)的系統(tǒng)和方法。


當(dāng)結(jié)合附圖來考慮時(shí),通過來參考以下詳細(xì)說明,將容易獲得對(duì)本發(fā)明實(shí)施例的更完全的理解,其中圖1是說明了根據(jù)本發(fā)明實(shí)施例,RIDL代理的不同部分的總體框圖。
圖2是說明了在根據(jù)本發(fā)明實(shí)施例,在RIDL中接受無效的地方的表格。
具體實(shí)施例方式
本發(fā)明的實(shí)施例包括作為數(shù)據(jù)類型實(shí)現(xiàn)基于行為的多代理系統(tǒng)的幾個(gè)方法的設(shè)備和實(shí)施例。
在此參考稱為RIDL(機(jī)器人智能定義語(yǔ)言)的特定的語(yǔ)言實(shí)施而描述特定的程序設(shè)計(jì)語(yǔ)言概念。然而應(yīng)該理解,在不脫離本發(fā)明的前提下,可以實(shí)現(xiàn)使用在此所描述的不同概念和方面的其它實(shí)施。
RIDL是適用于硬件或軟件(虛擬的)機(jī)器人程序設(shè)計(jì)的機(jī)器人程序設(shè)計(jì)語(yǔ)言,在一個(gè)方面中,其在傳統(tǒng)的語(yǔ)言上添加幾個(gè)關(guān)鍵字。例如,RIDL可以是Java的超集,作為C#的超集的AGENT#,DOTNET和C++,然而應(yīng)當(dāng)明白,也可以使用除了C#、DOTNET、C++和Java之外的其它語(yǔ)言結(jié)構(gòu)。因此,此處所描述的RIDL包括驅(qū)動(dòng)RIDL應(yīng)用程序類的不同概念、原則和方法的摘要說明。
如在此處將要描述的,將參考一個(gè)編譯程序來描述RIDL的語(yǔ)言、方法和實(shí)施,然而,應(yīng)當(dāng)明白,本發(fā)明不局限于編譯,并且本發(fā)明也不局限于此處所述的特殊語(yǔ)法和實(shí)施。例如,本發(fā)明的各方面可以用解釋程序或其它語(yǔ)言讀取引擎來實(shí)現(xiàn)。
編譯器層次方面作為數(shù)據(jù)類型的代理在不同的實(shí)施例中,添加的關(guān)鍵字讓多代理系統(tǒng)的創(chuàng)建變得非常簡(jiǎn)單。例如,在與傳統(tǒng)的“對(duì)象”相同的層次添加關(guān)鍵字“代理”。對(duì)于此處的目的,從語(yǔ)法的觀點(diǎn)來說關(guān)鍵字代理和對(duì)象是可互換的。關(guān)鍵字的作用表示塊定義了代理。本領(lǐng)域的技術(shù)人員將注意到可以使用不同于“代理”的其它單詞。此外還可能的是,用指出這類對(duì)象事實(shí)上是代理的屬性來注釋該對(duì)象。無論采用什么語(yǔ)法,其目的都是指出被封裝的是代理并且如同那樣地運(yùn)行。
根據(jù)本發(fā)明的一個(gè)方面,認(rèn)為代理是與對(duì)象完全類似的本地?cái)?shù)據(jù)類型。所有可以對(duì)對(duì)象做出的動(dòng)作也可以對(duì)代理做出。這類動(dòng)作例如是新代理的創(chuàng)建、代理的消除、將代理作為參數(shù)傳遞、創(chuàng)建到代理的引用(指針)、復(fù)制代理等等。
如同對(duì)象一樣,代理定義實(shí)際上定義了代理的類別。例如,一個(gè)代理實(shí)例由一個(gè)新的語(yǔ)句來創(chuàng)建,或者在定義那個(gè)類型(代理類別)的新變量的時(shí)候創(chuàng)建。
最后,可以定義一個(gè)語(yǔ)言,其中,所有對(duì)象都是通過定義代理,由此將不需要指出對(duì)象是代理。通過確定是否使用下面所描述的特征(傳感器和/或行為),編譯器可以區(qū)分主動(dòng)代理(代理)和被動(dòng)代理(對(duì)象)。因此,只能夠通過考慮下述的不同特征完全理解作為數(shù)據(jù)類型的代理。
傳感器傳感器定義了代理將對(duì)其起作用的外部或內(nèi)部信號(hào)。此處所用的傳感器是注釋為傳感器的傳統(tǒng)類型的變量。通過向該變量添加一個(gè)屬性,或通過用新的關(guān)鍵字來指出定義了特定變量,可以完成這個(gè)注釋。在一個(gè)例子中,屬性“傳感器”可以用來注釋已有的變量。
傳感器是多代理系統(tǒng)的一部分。在一個(gè)實(shí)施例中,傳感器104是特定代理的一部分,然而,也可以將傳感器定義為“全局的”,其中,它不是任何特定代理的一部分,而是可用于所有的代理(由此它不會(huì)像代理那樣“死亡”)。
當(dāng)傳感器被更新或改變時(shí),它引發(fā)一個(gè)事件以便指出發(fā)生了什么。與傳感器相關(guān)聯(lián)的事件有兩個(gè)更新事件和改變事件。傳感器工作如下每當(dāng)它接收新值的時(shí)候都引發(fā)一個(gè)更新事件。如果該新值不同于先前的值,則也引發(fā)一個(gè)改變事件。這些事件能夠由行為接收(如下所述的)。
在這時(shí)候,語(yǔ)言C#和C++已經(jīng)具有注釋,其在變量發(fā)生變化的時(shí)候允許變量來引發(fā)事件。然而,為了接收這個(gè)事件,收聽者必須注冊(cè)到該引發(fā)變量上。相比之下,根據(jù)本發(fā)明一個(gè)方面,收聽者不需要注冊(cè)來接收事件。例如,“行為”104可以監(jiān)聽事件的類型,并且任何符合該類型的事件將由行為106獲得。因此,本發(fā)明與之前的多代理系統(tǒng)形成對(duì)比,其中,代理數(shù)量是動(dòng)態(tài)的并且行為無須知道存在哪些代理。在這類情況下,行為不能注冊(cè)到這些代理上。當(dāng)論述任何(any)運(yùn)算符時(shí),將以進(jìn)一步的細(xì)節(jié)來討論這個(gè)功能。
使用一個(gè)描述性的比喻假定你正在進(jìn)行電話交談。在C#和C++中,用戶可以與在線路另一端的他所認(rèn)識(shí)的任何人交談。然而,如果另一端的某人說了一些話而該用戶預(yù)先不知道其它的個(gè)人會(huì)在場(chǎng),則該用戶將不會(huì)聽到其它的個(gè)人。在RIDL中,即便用戶沒有料到其它人在那兒或者該用戶沒有被預(yù)先通知有其它人存在,用戶也將聽見在另一端說話的每個(gè)人并且可以與他們所有人交談。因此,這個(gè)方面考慮了環(huán)境內(nèi)的不定性,并且以連續(xù)不斷改變的代理數(shù)目以及改變的環(huán)境進(jìn)行考慮。
在C#和C++以及相關(guān)的程序設(shè)計(jì)語(yǔ)言中,一個(gè)程序設(shè)計(jì)員明確地需要引發(fā)一個(gè)事件。程序設(shè)計(jì)員必須寫代碼來調(diào)用關(guān)于該事件的方法,以便通知收聽者(例如“throwEvent(myEvent)”)。然而,在本發(fā)明的各個(gè)方面中,收聽者可以決定是否記錄一個(gè)事件。
行為行為是活動(dòng)的,這意指它具有它自己的執(zhí)行線程。從程序設(shè)計(jì)員的觀點(diǎn)來看行為是并發(fā)運(yùn)行的。在特定事件出現(xiàn)的時(shí)候,行為不是返回值而是定義一些將要采取的行動(dòng)。它定義響應(yīng)于外部或內(nèi)部事件應(yīng)該做什么。行為總是空的并且不可以采用任何自變量。它們通過在明確定義的事件和代理狀態(tài)的結(jié)合上激活來實(shí)現(xiàn)反應(yīng)智能。
雖然目標(biāo)和傳感器在代理外面可見,但是行為總是私有的(private)或受保護(hù)的。只有受保護(hù)的行為可以被無效(overridden),并且它們的可見性(受保護(hù)的或私有的)必須在所有子代理中保持不變。
行為是被注釋為行為的方法(是對(duì)象的一部分、或者在本發(fā)明中,是代理的一部分的程序)。通過向方法添加屬性,或通過用新的關(guān)鍵字來表示定義了特定方法,可以完成這個(gè)注釋。因而,在一個(gè)例子中,用新的關(guān)鍵字“行為”來表示這類特定方法。
行為具有它們自己的事件。例如,每當(dāng)開始一個(gè)行為,它就引發(fā)一個(gè)激活事件,并且只要完成,它就引發(fā)一個(gè)完成事件??梢远x其它的事件,并且此處所指出的事件名稱只為了清楚的目的,確切的語(yǔ)法可能會(huì)不同。其它潛在事件的例子是掛起、出生、死亡、等待等等??梢詫?shí)現(xiàn)任意數(shù)量的事件。在一個(gè)方面,事件可以向其它行為和其它代理提供關(guān)于它的狀態(tài)的信息。在一個(gè)實(shí)施例中,行為將引發(fā)這些事件而不需要開發(fā)者部分上的任何動(dòng)作。
在一個(gè)實(shí)施例中,行為在它們激活的方式上可能不同于傳統(tǒng)的方法。例如,如同在面向?qū)ο蟮姆椒ㄖ卸x的傳統(tǒng)方法由一些別的方法調(diào)用。一個(gè)方法可能潛在地作為一個(gè)新的執(zhí)行線程的創(chuàng)建部分而被調(diào)用,然而即使在這種情況下,確定什么時(shí)候調(diào)用該方法的是某些外部邏輯。相比之下,行為可以在它們激活的時(shí)候被完全控制。在一個(gè)實(shí)施例中,行為不能由外部邏輯調(diào)用并且只有它們自己可以決定什么時(shí)候激活。因而,這些行為106不需要外部代碼來激活。
行為可以具有指出應(yīng)該什么時(shí)候?qū)⑺せ畹膮^(qū)段。例如,這個(gè)區(qū)段可以包括一個(gè)觸發(fā)條件。盡管它不是必須那樣,該觸發(fā)條件典型情況下與要執(zhí)行的代碼分離。然而,在不同的實(shí)施例中,觸發(fā)條件是行為的規(guī)格的一部分。
如上所述,注意到觸發(fā)條件對(duì)于行為是本地的是重要的。將要執(zhí)行的代碼以及導(dǎo)致它執(zhí)行的那些條件集合在同一處。這使得能夠推論隔離中的系統(tǒng)的行為。當(dāng)描述代理的動(dòng)作時(shí),可以基于它對(duì)于世界的本地感知來描述它的行為,而不用知道什么導(dǎo)致這些感知以及是由誰(shuí)引起的。代理僅僅響應(yīng)于它周圍的外因,這,例如,是用于經(jīng)濟(jì)學(xué)、計(jì)算機(jī)科學(xué)、金融、商業(yè)、社會(huì)科學(xué)以及許多其它領(lǐng)域中許多大型問題的自然模型。
在一個(gè)實(shí)施例中,觸發(fā)條件使用由傳感器和行為引發(fā)的事件來推動(dòng)其激活。觸發(fā)條件在概念上包括兩個(gè)部分指出它所響應(yīng)的事件的“時(shí)間(when)”部分,和基于用于過濾該事件的值和其它參數(shù)的“條件(if)”部分。諸如VisualBasic,C#和C++以及Java之類的其它語(yǔ)言允許引發(fā)并捕獲單一的事件。然而在RIDL中,例如,可能使用多事件和復(fù)雜條件來選擇行為希望捕獲的那個(gè)事件。本質(zhì)上,行為向事件應(yīng)用一些實(shí)時(shí)形式的詢問。
基于已知的代理來定義觸發(fā)條件是可能的。因?yàn)橹T如對(duì)象之類的代理是數(shù)據(jù)類型,所以能夠通過持有它們的變量(如果被保存在一個(gè)變量中)的名稱,或者通過引用(指針)來引用它們。因此,可以靜態(tài)地定義觸發(fā)條件。
可以通過等待特定事件來表征不同的實(shí)施例。首先,那意味著需要在代理內(nèi)指定想要的是哪個(gè)傳感器或行為。接下來需要定義它們正在等待發(fā)生的事件的類型。例如,自然模型將指出正在等待的代理,接一個(gè)點(diǎn),然后命名傳感器,接一個(gè)點(diǎn),然后命名該事件。例如“MyAgent.MySensor.updates”應(yīng)該是一個(gè)自然模型。然而,該語(yǔ)法可以采取任何形狀或形式。關(guān)鍵在于指出代理,然后指出傳感器/行為,最終指出事件。
在觸發(fā)條件的“時(shí)間”部分中,可以用“或者(or)”關(guān)鍵字或者通過具有類似含義的東西將事件連接起來。這允許人們創(chuàng)建他們想要行為對(duì)其敏感的事件的列表。
在觸發(fā)條件的“條件”部分中,可以使用包括布爾操作符在內(nèi)的所有常規(guī)的編程運(yùn)算符。在“條件”部分中,所有可以在行為/方法的主體中使用的變量和運(yùn)算符都是可用的。例如,可以使用一個(gè)范圍之內(nèi)的每個(gè)變量,其中,該范圍如同諸如Java和C#以及C++之類的傳統(tǒng)語(yǔ)言中那樣來定義。
目標(biāo)目標(biāo)執(zhí)行對(duì)代理做出的請(qǐng)求。目標(biāo)不是活動(dòng)的對(duì)象并且它不包含數(shù)據(jù)。作為直接后果,目標(biāo)沒有與它們相關(guān)聯(lián)的事件。目標(biāo)可以用多個(gè)參數(shù)來調(diào)用并且這些參數(shù)可以是復(fù)雜數(shù)據(jù)類型。當(dāng)它們被調(diào)用時(shí),它們把它們的數(shù)據(jù)傳遞給(被動(dòng)的)數(shù)據(jù)成員和成員傳感器。因此,可以認(rèn)為它們是代理的接口或通信信道。因?yàn)槟繕?biāo)表示對(duì)代理的請(qǐng)求(代理可以決定對(duì)其做出或不做出反應(yīng)),所以它們不同于常規(guī)的方法(像在對(duì)象上那樣)。
像任何其它的常規(guī)方法那樣,目標(biāo)也具有返回類型。因?yàn)閭鞲衅髦荒軓哪繕?biāo)里面進(jìn)行設(shè)置而不能從常規(guī)方法里面來設(shè)置,所以認(rèn)為方法是目標(biāo)執(zhí)行請(qǐng)求時(shí)的某種保證執(zhí)行,它的結(jié)果可能對(duì)每個(gè)調(diào)用有所不同。不保證要考慮請(qǐng)求,而是取決于推論和代理的狀態(tài),它們可能導(dǎo)致不同的代理動(dòng)作。畢竟,代理可能有重要的多的工作要做,例如在邊緣上保持平衡的機(jī)器人決不會(huì)去注意它的聲音傳感器捕捉到的鳥叫聲。
目標(biāo)是其中允許改變傳感器值的唯一的地方。因?yàn)樗鼈儽硎緦?duì)代理的請(qǐng)求,所以它們將它們的請(qǐng)求轉(zhuǎn)化成傳感器變化,而代理的活動(dòng)部分可以對(duì)其產(chǎn)生反應(yīng)。可以用方法來讀取代理的狀態(tài),或者直接地、主動(dòng)地完成某些事情。目標(biāo)只具有“副作用(side-effect)”,它們概念化代理可能對(duì)其反應(yīng)的對(duì)代理的請(qǐng)求。因而,目標(biāo)只在代理上可用,而在總是被動(dòng)的對(duì)象上不可用。如果調(diào)用方法,則你還知道該代理決不會(huì)‘知道’它。
在句法上以如同常規(guī)方法一樣的方式宣告目標(biāo)。然而,它們接收“目標(biāo)”限定詞以指出有人在處理代理請(qǐng)求。
圖1闡明了不同的RIDL代理100構(gòu)造、它們引發(fā)的事件以及處理它們的地方之間的關(guān)系。目標(biāo)102具有對(duì)(僅僅同一代理中的)傳感器104的寫訪問,傳感器104通過引發(fā)變化或更新事件對(duì)新值反應(yīng),其由行為106處理,行為106在它們的輪次上引發(fā)激活和完成事件。這些事件最終由其它行為(未示出)捕獲。所有的行為106都設(shè)法通過調(diào)用它們自己的代理目標(biāo)102或其它代理中的目標(biāo)來引起變化。
任何事件運(yùn)算符我們所等待的事件的明確指示經(jīng)常都不夠靈活。例如,在開發(fā)者想等待多個(gè)事件的時(shí)候。一個(gè)解決方案將無遺漏地確定所有的可能性,但是要與諸如下面定義的其它(other)運(yùn)算符結(jié)合。這可能是很冗長(zhǎng)的(并且有時(shí)甚至由于缺乏信息而不可能)。因而,在一個(gè)實(shí)施例中,本發(fā)明包括通有的事件。這個(gè)主意是可以等待來自于指定的代理的傳感器104或行為106的任何事件。例如,書寫這個(gè)的一個(gè)方式是省略事件名或?qū)⒚Q“事件”用于通有的事件。替換地,可以構(gòu)思許多其它的注釋。例如,注釋“MyAgent.MySensor”或“MyAgent.MySensor.event”將對(duì)改變以及更新事件兩者都做出響應(yīng)。
任何傳感器/行為運(yùn)算符在一個(gè)模式中,代理的結(jié)構(gòu)是完全未知的,并且不知道哪個(gè)行為106或傳感器104在該代理之內(nèi)。仍然可能是某人希望被通知該代理的任何行為106或傳感器104內(nèi)的任何活動(dòng)。到此,在一個(gè)實(shí)施例中,諸如“傳感器”和“行為”之類的關(guān)鍵字替換了特定的傳感器104或行為106的表示。再次,也可以使用其它的語(yǔ)法,但是關(guān)鍵在于使用存根而不是傳感器104或行為106的明確名稱。例如,書寫這個(gè)的可能的方式是”MyAgent.sensor.changes”。這個(gè)代理將一直等到代理MyAgent中的任何傳感器改變它的值(它將忽略不改變?cè)撝档母?。本領(lǐng)域的技術(shù)人員將注意到,開發(fā)者再次具有指定事件,或者使用通有事件指示(如前一段落中定義的)的選擇。在相同的傾向(vein)中,代理可以用指出正在等待任何行為的存根來替換明確行為的名稱。例如,“MyAgent.behavior.activates”將意味著某一個(gè)正在等待代理MyAgent內(nèi)的任何行為激活,這將有效地允許監(jiān)視該代理是否活動(dòng)而無須知道定義了哪些行為。
留下傳感器104和行為106的名稱的存根的能力可以允許可以處理在書寫第一代理的時(shí)候沒有定義的其它代理的代理應(yīng)用程序。新的結(jié)構(gòu)在觸發(fā)條件的“時(shí)間”部分中工作正常。然而,對(duì)于條件的“條件”部分,很可能是希望對(duì)例如具有高于100的值的任何傳感器做出響應(yīng)。在這樣的一個(gè)例子中,因?yàn)榱粝铝藗鞲衅?04的名稱的存根,所以“條件”部分不知它將在哪個(gè)傳感器上測(cè)試來查看它的值是否超過100。因而,“條件”部分所需要的是知道代理的哪個(gè)傳感器104引發(fā)了該事件。因此,在一個(gè)實(shí)施例中,“時(shí)間”子句可以包括具有變量的名稱的傳感器104的注釋。這個(gè)變量將存儲(chǔ)引發(fā)了該事件的傳感器104的引用。因?yàn)樵凇皶r(shí)間”部分之后對(duì)“條件”部分估值,所以“條件”部分可以使用這個(gè)變量來標(biāo)識(shí)傳感器104并且調(diào)查它的屬性(比如它的值)。
在通過觸發(fā)條件激活的行為106的主體內(nèi),也可以使用來自于“時(shí)間”部分的變量。因此,行為106可以按照需要把它的響應(yīng)瞄準(zhǔn)事件引發(fā)傳感器104。這與自省屬性結(jié)合是特別強(qiáng)大的。
任何代理運(yùn)算符在另一個(gè)示例中,行為106可能希望對(duì)來自于任何代理的事件做出響應(yīng),其中包括在行為106開始等待它的觸發(fā)條件之后的任何時(shí)間點(diǎn)加入代理團(tuán)體的代理。實(shí)際上,即使行為106是不活動(dòng)的并空閑的,并且在開發(fā)者側(cè)上沒有任何代碼,行為106也可能希望知道該系統(tǒng)中的每個(gè)代理,包括新加入者和離開該系統(tǒng)的代理。
本領(lǐng)域的技術(shù)人員將注意到這個(gè)問題從根本上不同于先前的問題。在設(shè)計(jì)時(shí)定義代理,由此代理類別在運(yùn)行時(shí)不可以改變它的定義。因此,在編譯時(shí),代理總是知道它自己的行為106和傳感器104的列表。先前,因?yàn)樵诖韺哟尾淮嬖谶\(yùn)算符,所以總是知道它們談?wù)摰氖鞘裁创?。因此,如果一起編譯所有的代理,在事件、傳感器和行為層次處的任何運(yùn)算符可以由編譯器來求解(并且因?yàn)闆]有對(duì)代理使用任何運(yùn)算符,由此總是用已知的數(shù)據(jù)類型(代理)查詢變量或指針,編譯器總是知道)。
在代理層次處的“任何”運(yùn)算符引入了復(fù)雜性的新層次。如果在代理層次上使用“任何”運(yùn)算符,則代理可以加入在編譯時(shí)未知的團(tuán)體。這意味著現(xiàn)在該代理必須在運(yùn)行時(shí)求解它們的任何運(yùn)算符。讓RIDL代理加入來自于別處的團(tuán)體成為可能的不同方面在下面關(guān)于“運(yùn)行時(shí)層次方面”的章節(jié)中討論。
在一個(gè)實(shí)施例中,代理可以談?wù)撟畛跷粗拇?。例如,在行?06的觸發(fā)條件中,可以參考代理類別而不是參考特定的代理。如上所述的,代理是數(shù)據(jù)類型并且因而具有名稱。數(shù)據(jù)類型的實(shí)例可能有或沒有名稱(變量相對(duì)于動(dòng)態(tài)存儲(chǔ)器分配)。因此,通過使用代理數(shù)據(jù)類型的名稱(代理定義中使用的名稱),可以表示出該類別中所有的代理。當(dāng)一個(gè)觸發(fā)條件使用代理的類別名稱時(shí),它實(shí)際上意指它等待來自于是那個(gè)代理類別的成員的任何代理的特定事件。
再次,雖然這對(duì)于觸發(fā)條件的概念上的“時(shí)間”部分有效,但是它對(duì)于”條件”部分以及還對(duì)于代碼的執(zhí)行可能帶來問題。當(dāng)獲得事件時(shí),然后它們可能想要檢測(cè)發(fā)送該事件的代理是否符合特定條件(觸發(fā)條件的“條件”部分)。因此,當(dāng)它們接收到事件時(shí),它們還需要捕捉發(fā)送該事件代理的引用。
在一個(gè)實(shí)施例中,代理類別可以用變量名來注釋。例如,該變量將存儲(chǔ)對(duì)那個(gè)引起該事件的代理的引用。通過這參考,可以訪問該代理的所有公共屬性,包括公共傳感器的值。對(duì)于代理引用的所有常規(guī)動(dòng)作都可以在這些生成的引用上完成。
在另一個(gè)實(shí)施例中,可以希望能夠與先前未知的代理交互。為了這個(gè)目的,在一個(gè)實(shí)施例中,可以將引用(指針)包括在內(nèi)以用于通有類型代理。例如,可以用這個(gè)通有的引用類型來定義代理。例如,對(duì)于“Agent.sensor.event”的調(diào)用將對(duì)來自任何代理的任何傳感器的任何事件做出響應(yīng)。本領(lǐng)域的技術(shù)人員將注意到不同的語(yǔ)法注釋再一次是可能的。
代理層次事件和運(yùn)算符迄今為止,一直都假定只有傳感器104和行為106可以引發(fā)事件。然而,在不同的實(shí)施例中,代理它們自己也可以引發(fā)事件。特別地,表示它們產(chǎn)生、將消亡,將加入團(tuán)體(但是在別處產(chǎn)生)或離開組(而不是消亡)的事件。這允許代理更以相互的動(dòng)作為目標(biāo)地做出響應(yīng)。在一個(gè)實(shí)施例中,“歡迎委員會(huì)”可以對(duì)代理的加入做出響應(yīng),例如通知它們?cè)搱F(tuán)體的規(guī)則。
代理層次事件可以與任何代理運(yùn)算符相關(guān)聯(lián)。例如,一個(gè)可能的注釋是“<NewMember>MyAgentjoins”,其等待類別MyAgent的任何代理加入該組,并且將那個(gè)新代理的引用分配到變量NewMember。這只是一個(gè)語(yǔ)法的例子,并且通過完全不同的注釋可以獲得相同的效果。另一個(gè)例子是“<NewBorn>Agent.born”,其將對(duì)在團(tuán)體內(nèi)新創(chuàng)建的任何類型的任何代理做出響應(yīng)。在下文中將參考服務(wù)層次方面進(jìn)一步詳細(xì)地討論團(tuán)體。
包含(subsume)/恢復(fù)(resume)經(jīng)常以層來創(chuàng)建智能系統(tǒng),其中,較高層與較低層交互并且優(yōu)先于較低層。盡管如此,較低層典型情況下保持活動(dòng)。只有有限的功能被無效,而大多數(shù)動(dòng)作保持原樣。與其除去整個(gè)代理并由另一個(gè)來替換它,本發(fā)明寧可允許包含特定的行為。包含意指一個(gè)行為暫停另一個(gè)行為,并且接管控制。通常進(jìn)行這個(gè)來處理所定義的關(guān)于行為的規(guī)則的例外情況。在處理了例外情況之后,通過恢復(fù)語(yǔ)句將控制恢復(fù)到包含的行為。
包含和恢復(fù)是運(yùn)行時(shí)的特征。它們可以在任何行為106上使用。例如,如果一個(gè)代理存儲(chǔ)在變量“MyAgent”中,則可以通過“MyAgent.MyBehavior.subsume”直接地指定具有名稱“MyBehavior”的行為。再次地,其它語(yǔ)法可以實(shí)現(xiàn)相同的作用。
行為106可以由任何行為包含,包括它自己。在一個(gè)實(shí)施例中,一個(gè)被包含的行為可以從任何其它的行為恢復(fù)(因?yàn)樗遣换顒?dòng)的,因此不由它自己來恢復(fù))。做出包含的行為106不需要與做出恢復(fù)的那個(gè)行為相同。
在一個(gè)實(shí)施例中,每個(gè)行為106都具有稱為“被包含”的(或某種等效的名稱)預(yù)定義屬性。雖然該屬性是行為106的一部分,但是它是一個(gè)傳感器104。例如,這種傳感器104可以是標(biāo)量傳感器(例如“int”或“integer(整數(shù))”)。在一個(gè)實(shí)施例中,屬性統(tǒng)計(jì)傳感器被包含的次數(shù)。如果行為沒有被包含,則它被包含的屬性將是零。每當(dāng)行為接收到包含請(qǐng)求的時(shí)候,計(jì)數(shù)器將增加1。每當(dāng)行為接收恢復(fù)請(qǐng)求的時(shí)候,它將減少它的計(jì)數(shù)器。如果被包含屬性是零,則該行為將工作。一個(gè)被包含的行為在包含時(shí)完成。這意指在恢復(fù)時(shí),它就再評(píng)估它的觸發(fā)條件。這意味著該行為在它被重新激活的時(shí)候首先查看它的環(huán)境。這功能可以防止它執(zhí)行錯(cuò)誤的動(dòng)作。
本領(lǐng)域的技術(shù)人員將注意到被包含的屬性是一個(gè)真實(shí)的傳感器。因此,當(dāng)它改變時(shí),它引發(fā)一個(gè)事件。包含狀態(tài)可以在觸發(fā)條件中使用。與一個(gè)(如下所述的)“completeWhen”語(yǔ)句結(jié)合,這也允許行為106監(jiān)視它自己的包含狀態(tài)。用這結(jié)構(gòu),行為106可以就在它被包含之前執(zhí)行代碼,從而由于行為在它的主體中間被中斷而確保沒有引起破壞。
因?yàn)樯鲜鎏卣魇沁\(yùn)行時(shí)特征,所以它們還可以用于只具有引用的代理。因此,可以在用“任何”算符選擇其它行為的行為的主體中調(diào)用這些特征。
已經(jīng)作為語(yǔ)法關(guān)鍵字描述了關(guān)于包含和恢復(fù)的特征。然而,這些特征還可以作為該代理上默認(rèn)可用的方法來提供。例如,對(duì)于代理“shopAgent”,如果想要包含它的“buyBehavior”,則在該功能實(shí)現(xiàn)為該代理上的方法的情況下,可以寫“shopAgent.subsume(“buyBehavior”)”。如果包含是一個(gè)關(guān)鍵字,則將沿著“subsume shopAgent.buyBchavior”的行來書寫同樣的。因而,無論是什么書寫方式,概念保持不變。
繼承面向?qū)ο蟮钠渲幸粋€(gè)關(guān)鍵特征是創(chuàng)建派生類型的能力。一個(gè)對(duì)象的功能可以通過繼承所有功能來改進(jìn),并且根據(jù)需要使功能無效??梢杂帽景l(fā)明來同樣地對(duì)待代理。當(dāng)改進(jìn)代理時(shí),可以進(jìn)行與對(duì)對(duì)象所做的完全相同的處理??梢允狗椒o效以便改進(jìn)。
在一個(gè)實(shí)施例中,因?yàn)樗鼈冏约簺Q定激活的時(shí)間,行為無法由其它代碼調(diào)用。因而,行為沒有參數(shù)。當(dāng)行為被無效時(shí),它們立即由新的行為替代。
傳感器是一種變量。因此,正常范圍規(guī)則適用。這意味著傳感器可以替換同名的傳感器。
最重要的,事件機(jī)理在繼承時(shí)保持原樣。當(dāng)代理正在繼承一個(gè)行為時(shí),這個(gè)行為的觸發(fā)條件將考慮到它需要查看子代理中的行為。如果子代理中沒有行為存在,則它將在父代理中尋找這些行為。結(jié)合任何傳感器/行為運(yùn)算符,這允許代理執(zhí)行相對(duì)來說較復(fù)雜的邏輯,其中,父代理可以不用明確地知道子代理的結(jié)構(gòu)或它的其它性能而提供功能。圖2說明了一個(gè)實(shí)施例,其中,在RIDL中可以接受無效。
再訪問的代理任何運(yùn)算符在代理“任何”運(yùn)算符的定義中,可以指定類別的名稱。如果“任何”類別指定具有后代的類別名稱,則“任何”運(yùn)算符將還考慮它所有的后代。因而,代理的子代理是具有改進(jìn)的同一類別的代理。
如果在任何運(yùn)算符中使用子代理的名稱,則父代理將不是該任何運(yùn)算符的一部分。父代理不是子代理的類別的一部分。例如,如果汽車是車輛的子代理,則任何車輛將包括汽車,然而,“任何”汽車將不包括每個(gè)車輛。
“任何”運(yùn)算符是知道繼承的事實(shí)使它們適用于做出復(fù)雜的決策。例如,代理可以在下列條件上激活行為106如果任何船只正在靠近,并且附近沒有軍艦,則激活行為。在另一個(gè)示例中,如果老師沒有教室并且沒有可用的教室,則該代理可以激活行為。因?yàn)閭鞲衅魇亲兞坎⑶掖硎菙?shù)據(jù)類型,本領(lǐng)域的技術(shù)人員將注意到傳感器可以自身就是代理。此外,也可以作為參數(shù)將代理傳遞給方法。
從行為(事件處理結(jié)構(gòu))劃分事件/改變觸發(fā)條件上面的章節(jié)討論了具有觸發(fā)條件的行為。還可能創(chuàng)建對(duì)觸發(fā)條件做出響應(yīng),并且或者引發(fā)特定事件,或者直接地調(diào)用方法的語(yǔ)言結(jié)構(gòu)。這樣的結(jié)構(gòu)在一個(gè)方面本質(zhì)上從方法/行為劃分了觸發(fā)條件。同樣地,觸發(fā)條件可以混合時(shí)間和條件部分。
服務(wù)層次方面隨著軟件集成變得越來越困難,并且軟件變得越來越復(fù)雜,所以軟件的設(shè)計(jì)方法也在改變。近來,存在朝著面向服務(wù)的軟件工程的傾向。這個(gè)趨勢(shì)的本質(zhì)是軟件應(yīng)用具有基于諸如XML環(huán)球網(wǎng)服務(wù)之類的標(biāo)準(zhǔn)的接口。軟件通過這個(gè)接口作為服務(wù)提供其功能。集成不同的軟件包變成純粹是把服務(wù)結(jié)合在一起的事情。
在軟件工程中,使用名稱空間來把對(duì)象集合在一起成為邏輯部件。例如,“磁盤”名稱空間可以包括與該磁盤接口的所有程序。根據(jù)本發(fā)明的一個(gè)方面,可以用名稱空間來以類似于將對(duì)象集合在一起的方式集合代理。特別地,代理可以是名稱空間的一部分,并且可以與對(duì)象共享名稱空間。換言之,在這個(gè)方面,因?yàn)樗鼈儍烧叨甲裱嗤囊?guī)則,語(yǔ)言不區(qū)分代理和對(duì)象。
在名稱空間層次,本發(fā)明的一個(gè)實(shí)施例包括“服務(wù)”。在它們用類似的功能來集合對(duì)象和代理的方面,語(yǔ)言層次處的服務(wù)類似于名稱空間。特別地,它集合共同地實(shí)現(xiàn)單個(gè)服務(wù)的代理和對(duì)象。在不同的實(shí)施例中,通過使用新的關(guān)鍵字,通過使用注釋該名稱空間的屬性,或通過假定每個(gè)包括代理的名稱空間都是服務(wù),可以指出名稱空間是服務(wù)。
如果名稱空間是服務(wù),則它提供功能。該功能可以通過定義的接口來訪問。在不同的實(shí)施例中,本發(fā)明提供指定這個(gè)接口的方式。
在第一實(shí)施例中,包括方法來明確地定義對(duì)象或代理是到該服務(wù)的接口。例如,這可以通過向該對(duì)象或代理提供屬性而完成。
在另一個(gè)實(shí)施例中,包括方法來與該服務(wù)名稱一致地命名該對(duì)象或代理。在這種情況下,公共變量和方法是該服務(wù)的實(shí)際接口。該服務(wù)開始的時(shí)候,將自動(dòng)地例示這個(gè)類別的代理或?qū)ο?,并且每次服?wù)只能創(chuàng)建這個(gè)代理或?qū)ο蟮囊粋€(gè)實(shí)例。
面向代理的數(shù)據(jù)庫(kù)層次方面面向代理的數(shù)據(jù)庫(kù)(AODB)的一個(gè)方案是把每個(gè)記錄(OODB中的對(duì)象)考慮為一個(gè)特殊種類的代理。該代理只包括傳感器(沒有行為),并且禁止在這些代理上的繼承。認(rèn)為每個(gè)外部字段,以及每個(gè)計(jì)算的或者以其它方式獲得的字段都是一個(gè)傳感器。因此,數(shù)據(jù)庫(kù)是只具有傳感器的一組代理。
這個(gè)方案監(jiān)視對(duì)每個(gè)記錄的字段發(fā)生了什么。每當(dāng)更新字段的時(shí)候,引發(fā)被更新的事件(行為的觸發(fā)條件使用的類型)。如果字段改變值,則引發(fā)改變事件。結(jié)果是可以將行為定義成監(jiān)視并且對(duì)數(shù)據(jù)庫(kù)中的變化做出響應(yīng)。從概念上的觀點(diǎn)來看,數(shù)據(jù)庫(kù)充滿著其它代理可以對(duì)其做出響應(yīng)的代理。
替換地,數(shù)據(jù)庫(kù)代理可能就好比具有傳感器和行為以及其它的屬性的任何普通的代理。數(shù)據(jù)庫(kù)代理和普通代理之間的差異是它的傳感器存儲(chǔ)在數(shù)據(jù)庫(kù)中。在這種情況下,軟件設(shè)計(jì)師概念上應(yīng)付充分發(fā)展的代理。數(shù)據(jù)庫(kù)的結(jié)構(gòu)和代理系統(tǒng)的結(jié)構(gòu)必須充分地匹配。這個(gè)方案的優(yōu)點(diǎn)是設(shè)計(jì)師具有代理模型的完全的自由度。編譯器將創(chuàng)建支持該模型所需的表格。當(dāng)使用這個(gè)方案時(shí),所希望的是用關(guān)鍵字來注釋代理以表示這個(gè)代理是持久的。這允許編譯器區(qū)分持久和不持久的代理。
運(yùn)行時(shí)層次方面——執(zhí)行階段在編譯器方面描述的事件機(jī)制的能力通過編譯器可以完成的優(yōu)化類型而示出。這些優(yōu)化影響運(yùn)行時(shí)性能。在此在運(yùn)行時(shí)將它們分類,但是它們需要編譯器采取行動(dòng)來生成用于運(yùn)行時(shí)引擎的必需的列表和其它材料。
在不同的實(shí)施例中,實(shí)時(shí)優(yōu)化和速度優(yōu)化執(zhí)行是RIDL的特征。如上所述的,將觸發(fā)條件拆分成“時(shí)間”和“條件”部分。“時(shí)間”部分指定了觸發(fā)觸發(fā)條件的“條件”部分的估值的事件。因?yàn)槊總€(gè)事件都鏈接到預(yù)先定義的行為或傳感器(以及更早之前定義的代理),并且因?yàn)槊總€(gè)行為都在其觸發(fā)條件中依賴這些事件,所以可以用傳感器作為圖表中的許可畫出行為之間的依賴圖。每當(dāng)更新或改變傳感器,或者激活或完成行為,該事件傳播通過該圖表并設(shè)置需要再次估值的觸發(fā)條件的標(biāo)志。對(duì)觸發(fā)條件估值并且如果它們被滿足,則設(shè)置標(biāo)志來指出需要執(zhí)行該行為。
在一個(gè)實(shí)施例中,存在選擇經(jīng)過標(biāo)志的行為并執(zhí)行它的執(zhí)行線程的集合。例如,執(zhí)行線程的集合可能一個(gè)極端上是單個(gè)線程,或者另一極端上是與行為一樣多的線程。執(zhí)行線程的數(shù)量可以取決于編譯器執(zhí)行,但是可能與系統(tǒng)中代理以及行為的數(shù)量分開。本領(lǐng)域的技術(shù)人員將注意到可以采用許多形式來“標(biāo)志”行為。例如,它可以包括設(shè)置為標(biāo)志的變量,可以將行為(標(biāo)識(shí))添加到列表和/或?qū)S糜谠撔袨榈膱?zhí)行線程可以開始(這相當(dāng)于同時(shí)進(jìn)行標(biāo)志和開始執(zhí)行)。
對(duì)于行為的自動(dòng)優(yōu)先級(jí)檢測(cè)根據(jù)本發(fā)明的一個(gè)方面,將較高的優(yōu)先級(jí)給予在層次圖中較低的行為。實(shí)際上,在層次中較低意味著該行為較靠近硬件或軟件接口。那意味著它們比較靠近事件,并且可能要求它們是反應(yīng)更迅速的。
機(jī)器人和機(jī)器控制中的例子讓這個(gè)很清楚。如果行為直接耦合到硬件傳感器,則很可能需要非常迅速的響應(yīng)。然而,在最高層次,行為對(duì)由已經(jīng)對(duì)其它RIDL傳感器做出響應(yīng)的行為建立的傳感器做出響應(yīng)。換言之,圖表中較高的行為以更多的抽象數(shù)據(jù)工作。處理這些信息通常比低層次行為更少時(shí)間敏感(例如,“反射”相比于“思想”)。
如前所述,傳感器104或行為106的事件將傳播通過依賴圖,并且將需要再估值的觸發(fā)條件放置在列表中。在一個(gè)實(shí)施例中,觸發(fā)條件處理器將處理這個(gè)列表。例如,該列表可以是基于優(yōu)先級(jí)的,這意味著每當(dāng)將新的行為的觸發(fā)條件添加到該列表的時(shí)候,可以把它排序到執(zhí)行隊(duì)列中,從而一旦它具有所有等待行為的最高優(yōu)先級(jí)就被執(zhí)行。優(yōu)先級(jí)反映到許可的距離,其中,許可具有最高優(yōu)先級(jí),并且每個(gè)附加的依賴降低優(yōu)先級(jí)。
在較小的系統(tǒng)中,有可能對(duì)觸發(fā)條件立即進(jìn)行估值。在這種情況下,因?yàn)榧俣ㄓ|發(fā)條件的估值是立即的,沒有其它的行為正在等待,每個(gè)行為自動(dòng)地具有最高優(yōu)先級(jí)。
如果滿足觸發(fā)條件,則對(duì)應(yīng)的行為就存儲(chǔ)在包括要執(zhí)行的行為的新列表中。再次地,這個(gè)列表可以通過該行為的優(yōu)先級(jí)(用如同上述的同一優(yōu)先級(jí)定義)來排序。然后,線程的集合可以執(zhí)行具有最高優(yōu)先級(jí)的等待行為。
最后結(jié)果是在取決于較低層次的行為的較高層次的行為得到執(zhí)行機(jī)會(huì)之前,較低層次的行為可以執(zhí)行多次。這意味著較高層次的行為可能遺漏“幀”,其中,幀定義為假定評(píng)估的話,將會(huì)是真實(shí)的觸發(fā)條件。該特征在它保證了在需要迅速響應(yīng)的最低層次處的迅速響應(yīng)上可能是有益的。同時(shí),它與對(duì)代理動(dòng)作有決定性影響的不確定原則相匹配。代理永遠(yuǎn)不能保證它所相信為真的實(shí)際上(仍然)為真。因而,要求代理持續(xù)檢測(cè)是否它的假定仍然保持。因?yàn)閺牡讓酉蛏蠘?gòu)造多代理系統(tǒng)以處理不規(guī)則,這個(gè)不確定原則的最后結(jié)果是多代理系統(tǒng)魯棒的多。
行為106總是等待多個(gè)事件。在這種情況下,行為106將總是具有一個(gè)低于剛導(dǎo)致它執(zhí)行的事件的優(yōu)先級(jí)。因此,行為的優(yōu)先級(jí)在運(yùn)行時(shí)動(dòng)態(tài)地改變。
傳感器104的事件具有低于更新傳感器并引起該事件的行為106的優(yōu)先級(jí)。在從行為106的外部更新傳感器104的情況下,將認(rèn)為它是具有最高優(yōu)先級(jí)的許可事件。
在諸如計(jì)時(shí)器之類的系統(tǒng)定義事件上觸發(fā)的行為106將被認(rèn)為是許可行為并且將具有最高優(yōu)先級(jí)。
在不同的其它實(shí)施例中,存在需要在所有行為上有效并且影響分配的優(yōu)先級(jí)的附加規(guī)則。例如,基于另一個(gè)行為的完成而被激活的行為106,可能總是具有低于其它行為的優(yōu)先級(jí)。在另一個(gè)例子中,基于另一個(gè)行為的激活而被激活的行為可能具有與那個(gè)另一個(gè)行為相同的優(yōu)先級(jí)。
詳盡的行為在不同的實(shí)例中,上述的層次化方案可能產(chǎn)生并非意圖的優(yōu)先級(jí)。特別地,在軟件的內(nèi)部可能存在兩個(gè)依賴圖表。例如,其中一個(gè)圖表可能對(duì)執(zhí)行數(shù)據(jù)負(fù)責(zé)。另一個(gè)圖表可能監(jiān)視另一個(gè)圖表的動(dòng)作。因?yàn)檫@類圖表可能從相同的傳感器開始,并且在較高層次不能交互作用,所以編譯器將不能向一個(gè)圖表或另一個(gè)圖表分配較高的優(yōu)先級(jí)。替代地,編譯器可以向兩者分配類似的優(yōu)先級(jí),從而讓它們?cè)谶\(yùn)行時(shí)間爭(zhēng)奪資源。
這個(gè)問題的一個(gè)解決方案是讓用戶來明確定義行為的優(yōu)先級(jí)。然而,這方案可能容易產(chǎn)生誤差。因此,本發(fā)明的不同實(shí)施例包括一個(gè)“詳盡的”指示符。例如,當(dāng)將行為標(biāo)記為“詳盡的”時(shí),這可能意指不允許該行為遺漏任何幀。例如,該行為將以充分的優(yōu)先級(jí)來響應(yīng),以便保證它在下次它的觸發(fā)條件變成真之前被執(zhí)行。在不同的實(shí)施例中,詳盡性不能保證行為在特定時(shí)間幀內(nèi)被執(zhí)行,然而,它可以保證每當(dāng)觸發(fā)條件變成真的時(shí)候它就被執(zhí)行,而且下一個(gè)執(zhí)行將在之前的一個(gè)執(zhí)行完成之后發(fā)生。
而且,一個(gè)詳盡的行為可以相對(duì)于它自己的事件是詳盡的。因而,它的詳盡性可能對(duì)依賴列表中的其它行為沒有影響。換言之,不是因?yàn)橐粋€(gè)行為是詳盡的,它等待的另一個(gè)行為也變得詳盡的或者以另一種方式在優(yōu)先級(jí)中有所變化。因而,只有明確地標(biāo)記為詳盡的行為才肯定永不遺漏任何幀。當(dāng)然,如果另一個(gè)行為僅僅依賴于詳盡的行為,因?yàn)樯闪怂却脑S多事件,它可以比正常行為被更頻繁地觸發(fā)。
冗余行為冗余行為與詳盡的行為相反。當(dāng)將行為標(biāo)記為冗余時(shí),這意指它具有比所有的常規(guī)行為都低的優(yōu)先級(jí)。如同詳盡的行為那樣,冗余行為不以任何方式改變其它行為的優(yōu)先級(jí)。例如,只有被明確標(biāo)記為冗余行為的行為才可以具有這個(gè)較低的優(yōu)先級(jí)。當(dāng)然,如果另一個(gè)行為僅僅依賴于冗余行為,因?yàn)闆]有生成它正在等待的事件,它決不會(huì)比該冗余行為被更頻繁地觸發(fā)。
實(shí)時(shí)映射的層次圖表在實(shí)時(shí)系統(tǒng)的支持下,允許明確地將行為映射到特定的數(shù)字優(yōu)先級(jí)層次。例如,開發(fā)者可以固定這些行為,并且對(duì)于沒有定義數(shù)字優(yōu)先級(jí)層次的每個(gè)行為,上面定義的規(guī)則可以應(yīng)用。
continueWhen語(yǔ)句“continueWhen”語(yǔ)句是后面跟著觸發(fā)條件的語(yǔ)句。它是可以在行為主體內(nèi)任意一點(diǎn)使用的語(yǔ)句。例如,它可以指示行為一直等到指定的觸發(fā)條件結(jié)果是真為止。這樣的語(yǔ)句在行為需要執(zhí)行順序的動(dòng)作序列的時(shí)候是特別有用的。它還可以提供基本結(jié)構(gòu)來確保行為之間的同步。一個(gè)示例情況是當(dāng)機(jī)器人需要舉起手臂來達(dá)到某個(gè)高度(傳感器)(動(dòng)作)的時(shí)候。然后,在它那樣成功地做到之后,它可能需要按下一個(gè)按鈕。
continueWhen語(yǔ)句是對(duì)于還可以使用狀態(tài)機(jī)來實(shí)現(xiàn)的功能的簡(jiǎn)化符號(hào)。例如,可以將包括continueWhen語(yǔ)句的行為拆分成幾個(gè)行為,這幾個(gè)行為結(jié)合指定的觸發(fā)條件用狀態(tài)機(jī)來達(dá)到相同的效果。在一個(gè)實(shí)施例中,狀態(tài)機(jī)最初處于其狀態(tài)0并且正在與行為的觸發(fā)條件一起等待狀態(tài)0。在行為的第一部分完成時(shí),它將狀態(tài)機(jī)置于狀態(tài)1中。模仿continueWhen之后的部分的第二行為與continueWhen中指定的觸發(fā)條件一起等待狀態(tài)1。當(dāng)已經(jīng)激活狀態(tài)機(jī)中最后的行為時(shí),將狀態(tài)置回到0。
在一個(gè)方面中,編譯器可以只把這個(gè)轉(zhuǎn)變應(yīng)用到軟件,例如通過代碼所示的<pre listing-type="program-listing"><![CDATA[  void MyBchaviorQbehaviorwhen TrigCondWhen  ifTrigCondlf  {   Statement1;   Statement2;   continueWhen TrigCondContinueWhen1   if TrigCondContinue1f1;   Statement3;   continueWhen TrigCondContinueWhen2   if TrigCondContinueTf2;   Statement4;   }]]></pre>這可以轉(zhuǎn)變?yōu)?lt;pre listing-type="program-listing"><![CDATA[  int MyB ehaviorState=0;  void MyBehaviorPart0()behavior  when MyBehaviorState.changes or TrigCondWhen  if(MyBehaviorState=0)and TrigCondIf  {   Statement1;   Statement2;   MyBehaviorState=1;  }  void MyBehaviorPart1()behavior  when MyBehaviorState.changes or TrigCondContinueWhen1  if(MyBehaviorState=1)and TrigCondContinueIf1  {Statement3;   MyBehaviorState=2;  }  void MyBehaviorPart2()behavior  when MyBehaviorState.changes or TrigCondContinueWhen2  if(MyBehaviorState=2)and TrigCondContinueIf2  {   Statement4;   MyBehaviorState=0;  }]]></pre>結(jié)果是該行為包括觸發(fā)條件和執(zhí)行到其終點(diǎn)的方法。
在一個(gè)實(shí)施例中,編譯器可以把continueWhen行為變換成多個(gè)行為,并且可以保證變量從兩個(gè)行為(而不是從別處)是可以訪問的(因?yàn)樗鼈冊(cè)诟拍钌鲜潜镜氐?。例如,它可以通過用在代理中的任何其他地方?jīng)]有引用的唯一的名稱來創(chuàng)建在代理內(nèi)是全局的變量來實(shí)現(xiàn)這個(gè)。
completeWhen語(yǔ)句在上述的實(shí)施例中,在行為的主體內(nèi)使用continueWhen語(yǔ)句。然而,when和completeWhen語(yǔ)句都在行為的主體的外面使用。因而,“when”條件指出什么時(shí)候執(zhí)行主體?!癱ompleteWhen”語(yǔ)句是“when”語(yǔ)句的逆。它指定行為應(yīng)該在其上停止執(zhí)行的觸發(fā)條件。completeWhen可以再次接著主體。在一個(gè)實(shí)施例中,當(dāng)觸發(fā)completeWhen時(shí),停止行為的主體并且執(zhí)行completeWhen之后的主體。在completeWhen的主體內(nèi),可以訪問在行為的主體中定義的所有局部變量。概念上,該代碼在主體內(nèi)部并且替換留待執(zhí)行的全部代碼。
complete When語(yǔ)句可以通過變換行為的主體來實(shí)現(xiàn)。例如,假定以下行為<pre listing-type="program-listing"><![CDATA[  void MyBehavior()behavior  when TrigCondWhenifTrigCondIf  {   Statement1;   Statement2;   Statement3;  }  completeWhen TrigCondCompleteWhen  ifTrigCondCompleteIf  {   CStatement1;   CStatement2;  }]]></pre>這可以轉(zhuǎn)換成具有相同效果的下列代碼<pre listing-type="program-listing"><![CDATA[bool MyBehaviorCompleteNow=false;  void MyBehaviorMustComplete()exhaustive behavior//&amp; highest priority  when TrigCondCompleteWhen  ifTrigCondCompletelf  {   MyBehaviorCompleteNow=true;  }  void MyBehavior()behavior  when TrigCondWhen  ifTrigCondlf  {   if not MyBehaviorMustComplete{   Statement1;   if not MyBehavio rMustComplete   {   Statement2;   if not MyBehaviorMustComplete   {   Statement3;   }   }  }  if MyBehaviorMustComplete  {  CStatement1;  CStatement2;  }  }]]></pre>在不同的實(shí)施例中,因?yàn)闊o論該行為的優(yōu)先級(jí)有多高,它必須完成的事實(shí)都具有甚至更高的優(yōu)先級(jí),因此對(duì)完成條件的檢查必須具有最高優(yōu)先級(jí)。在一個(gè)實(shí)施例中,因?yàn)閷?duì)完成條件的檢查不更新觸發(fā)事件的任何東西,可以在這種情況下使用詳盡的關(guān)鍵字。例如,它更新變量而不是一個(gè)傳感器。因而,編譯器可以把第一代碼轉(zhuǎn)換成后者,并且從而實(shí)現(xiàn)該功能。替換地,也可以采用其它方法來實(shí)現(xiàn)所要求的功能。
無論選擇什么方法,編譯器都可以將具有completeWhen語(yǔ)句的行為轉(zhuǎn)換成不具有這類語(yǔ)句的行為。因而,它僅僅是一個(gè)很有用并且強(qiáng)大的簡(jiǎn)化符號(hào)。語(yǔ)句的使用是極其頻繁的,特別是結(jié)合每個(gè)行為的系統(tǒng)定義的包含的傳感器,如下一個(gè)例子所示
<pre listing-type="program-listing"><![CDATA[void MyBehavior()behavior  when OtherSensorl.changes  {  Statement1;  Statement2;}  completeWhen MyBehavior.subsumedchanges  ifMyBehavior.subsumed  {  Clean_up_behavior;  }]]></pre>事實(shí)上,這個(gè)語(yǔ)句的使用如此的頻繁,以至于允許在一個(gè)行為的結(jié)束端使用多個(gè)completeWhen語(yǔ)句,來捕獲不同的事件并且采取不同的動(dòng)作。例如,如果希望對(duì)多個(gè)事件采取相同的動(dòng)作,則可以讓觸發(fā)條件更加精細(xì)。
在轉(zhuǎn)換之后,在一個(gè)實(shí)施例中,編譯器可以生成使用條件語(yǔ)句來執(zhí)行多個(gè)completeWhen語(yǔ)句的代碼。在具有嵌套條件語(yǔ)句的例子中<pre listing-type="program-listing"><![CDATA[void MyBehaviorObehavior  when TrigCondWhen  ifTrigCondIf  {   Statement1;   Statement2;   Statement3;  }  completeWhen TrigCondCompletcWhen1  ifTrigCondCompletelf1  {   C1Statement1;C1Statement2;  } complete When TrigCondCompleteWhen2 ifTrigCondCompletelf1 {C2Statement1;C2Statement2; }]]></pre>這可以轉(zhuǎn)換成具有相同效果的下列代碼<pre listing-type="program-listing"><![CDATA[int MyBehaviorCompleteNow=0;void MyBehaviorMustCompletel()exhaustive behavior(&amp; highest priority)when TrigCondCompleteWhen1ifTrigCondCompletelf1{ MyBehaviorCompleteNow=1;}  void MyBehaviorMustCompletel()exhaustive behavior(&amp; highest priority)  when TrigCondCompleteWhen2  ifTrigCondCompleteIf2  {  MyBehaviorCompleteNow=2;  }  voidMyBchavior()behavior  when TrigCondWhen  ifTrigCondIf  {   if not MyBehaviorMustComplete{   Statement1;   if not MyBehaviorMustComplete  {  Statement2;  if not MyBehaviorMustComplete  {   Statement3;  }   }  }  if MyBehaviorMustComplete=1  {   C1Statement1;   C1Statement2;  }  if MyBehaviorMustComplete=2  {   C2Statement1;   C2Statement2;  }   }]]></pre>再次,通過引發(fā)事件而不是使用嵌套條件語(yǔ)句,可以獲得類似的效果。編譯器還可操作來更智能地檢查以便減少需要執(zhí)行的測(cè)試數(shù)量。
本領(lǐng)域的技術(shù)人員將注意到包含也可以同樣地工作。通過使用“條件”語(yǔ)句,或者通過引發(fā)事件,立即終止包含的方法而沒有實(shí)際上殺死該線程(后者引起更多的開銷處理以及更大的復(fù)雜性)。上述轉(zhuǎn)換示出,上面對(duì)于沒有continueWhen和completeWhen語(yǔ)句的行為所討論的運(yùn)行時(shí)層次執(zhí)行,也可以應(yīng)用到具有這些語(yǔ)句的行為。
死鎖檢測(cè)運(yùn)行時(shí)層次方面——代理的移動(dòng)性團(tuán)體上面的說明集中在都相互知道的代理。然而,在本發(fā)明的一個(gè)實(shí)施例中,代理只知道存在于其“團(tuán)體”內(nèi)的代理。例如,團(tuán)體可能與應(yīng)用程序相同。因而,應(yīng)用程序內(nèi)的所有代理都可以相互知道。本領(lǐng)域的技術(shù)人員將注意到通常一般地將包括多個(gè)團(tuán)體的應(yīng)用程序考慮成是多個(gè)應(yīng)用程序。
在一個(gè)實(shí)施例中,團(tuán)體自身可以遷移。即,服務(wù)可以把自己復(fù)制到另一個(gè)計(jì)算機(jī),并且可以遠(yuǎn)程地啟動(dòng)它自己。因此,該團(tuán)體可以讓它自己在另一個(gè)計(jì)算機(jī)上活動(dòng)。而且,在這樣的一個(gè)實(shí)施例中,代理可以在復(fù)制的團(tuán)體之間遷移。特別地,代理可以生成發(fā)送給另一個(gè)團(tuán)體的消息,該消息包括它的狀態(tài)。例如,這類消息可以包括該代理的類型以及它的所有傳感器的值。一個(gè)實(shí)施可以是將代理的傳感器“脫水”成XML,并且把這個(gè)XML定義發(fā)送給復(fù)制的團(tuán)體。在那里,可以創(chuàng)建新的代理,并且可以將該代理所有的傳感器都設(shè)置成XML消息中接收的值(“使再變?yōu)樗衔铩?。然后,該新的代理可以在消息后把確認(rèn)發(fā)送給第一代理,第一代理然后可以選擇毀滅自己。替換地,如果該代理不毀滅它自己,則它已經(jīng)簡(jiǎn)單地復(fù)制了它自己。
在一個(gè)實(shí)施例中,當(dāng)在團(tuán)體內(nèi)在任何時(shí)候以及為了任何理由新創(chuàng)建代理時(shí)(例如還通過數(shù)據(jù)類型上活動(dòng)的新運(yùn)算符),那么將對(duì)所有行為的觸發(fā)條件都進(jìn)行估值。取決于結(jié)果,將激活或不激活該行為。因此,相當(dāng)可能的是,在團(tuán)體中激活并且產(chǎn)生它的代理的遷移到新團(tuán)體的行為,因?yàn)樗挠|發(fā)條件在新團(tuán)體中還不滿足,不會(huì)在新團(tuán)體內(nèi)立即激活。
網(wǎng)格計(jì)算團(tuán)體(在其它的處理器和機(jī)器上)產(chǎn)生它們自己的副本的能力可以允許它們利用網(wǎng)絡(luò)中可用的所有經(jīng)過授權(quán)的處理能力。因而,網(wǎng)格計(jì)算的多代理解釋可以產(chǎn)生。例如,經(jīng)過授權(quán)使用的所有附近的計(jì)算機(jī)都可以自動(dòng)并動(dòng)態(tài)地創(chuàng)建執(zhí)行多代理系統(tǒng)的計(jì)算網(wǎng)格。因此,對(duì)于諸如游戲、物理計(jì)算、大規(guī)模銀行計(jì)算以及其它按比例增大的應(yīng)用程序之類的應(yīng)用程序,多代理系統(tǒng)可以成長(zhǎng)超過單個(gè)計(jì)算機(jī)的能力。
在類似團(tuán)體之間的遷移如果所有代理的定義都是同樣的,則團(tuán)體在結(jié)構(gòu)上是同樣的,并且團(tuán)體都不具有與另一個(gè)相關(guān)的附加代理。傳感器的簽名是該傳感器的名稱以及它的類型。因而,如果代理A具有相同的名稱并且代理A的所有傳感器具有帶有與代理B中相同的簽名的傳感器,則認(rèn)為代理A類似于代理B。而且,如果團(tuán)體C1的一部分代理類似于C2中的代理,則團(tuán)體C1類似于團(tuán)體C2。然而,不是C1的所有代理都需要類似于C2中的代理。
在一個(gè)實(shí)施例中,代理可以在類似的團(tuán)體之間遷移。特別地,代理可以生成發(fā)送給另一個(gè)團(tuán)體的消息,該消息包括它的狀態(tài)。例如,它的狀態(tài)可以包括代理名稱,以及對(duì)于該代理的每個(gè)傳感器,該傳感器的簽名及其值。可以將這個(gè)信息組合到數(shù)據(jù)包中(例如,在XML定義中)并用復(fù)制請(qǐng)求發(fā)送到另一個(gè)團(tuán)體。在進(jìn)行接收的團(tuán)體中,查看代理的指定的名稱。執(zhí)行檢查來確定該代理是否是類似的。如果該代理不是類似的,則將那個(gè)意義的消息送回并且不采取進(jìn)一步的動(dòng)作。如果該代理是類似的,則將肯定確認(rèn)發(fā)送回發(fā)送團(tuán)體并且在接收?qǐng)F(tuán)體中創(chuàng)建新的代理實(shí)例。將對(duì)于傳感器的所有接收值都分配給該代理。代理的創(chuàng)建,以及傳感器的更新將通過進(jìn)行接收的團(tuán)體發(fā)送大量事件。
代理怎樣開始遷移每個(gè)團(tuán)體都是服務(wù)或者具有接口。例如,接口可以接收諸如ACL(代理通信語(yǔ)言)消息或XML消息之類的消息。在一個(gè)實(shí)施例中,RIDL利用XML環(huán)球網(wǎng)服務(wù)以在團(tuán)體之間建立通信。每個(gè)團(tuán)體都具有通常由URL來表示的唯一ID。
希望遷移的代理必須知道它要遷移到那兒的團(tuán)體的ID。在一個(gè)實(shí)施例中,兩個(gè)特殊函數(shù)是每個(gè)代理的預(yù)定義的方法“int copyToCommunity(ID)″,其中,將上述的請(qǐng)求復(fù)制的數(shù)據(jù)包發(fā)送給具有指定ID的團(tuán)體,并且該函數(shù)的返回碼包括成功指示(0=復(fù)制成功);和“int migrateToCommunity(ID)”,其中,首先執(zhí)行copyToCommunity,并且只要成功,就消除被復(fù)制的代理。如果代理遷移它自己,則可能是它不執(zhí)行在遷移指令之后的那行。如果遷移沒有成功,將執(zhí)行下一行,來允許代理基于返回值來診斷。再一次,實(shí)施的語(yǔ)法可以變化。
在一個(gè)實(shí)施例中,開發(fā)者只須知道類似團(tuán)體的ID,并且無須知道通信協(xié)議、環(huán)球網(wǎng)服務(wù)、ACL或任何其它的技術(shù)。因而,每當(dāng)創(chuàng)建代理時(shí),它就具有復(fù)制和在類似團(tuán)體之間遷移的能力,而無須開發(fā)者做出任何工作。在一個(gè)實(shí)施例中,將這個(gè)功能包括在每個(gè)代理上都可用的方法中。替換地,這個(gè)功能可以由包括函數(shù)“int copyToCommunity(AgentType,ID)”和“intmigrateToCommuniry(AgentType,ID)”的庫(kù)來提供。
因而,遷移對(duì)于語(yǔ)言是與生俱來的,或者在每個(gè)代理預(yù)定義的方法中,或者在連同語(yǔ)言一起發(fā)布的程序庫(kù)中。通過改變團(tuán)體開始的方式,開發(fā)者可以相當(dāng)容易地用相同的源代碼來創(chuàng)建“主要”和“次要”團(tuán)體,其中,主要團(tuán)體在某種自展(bootstrap)中創(chuàng)建自己的代理,而次要團(tuán)體類似于主要團(tuán)體,但是它們不包含代理并且安裝在網(wǎng)絡(luò)上的遠(yuǎn)程終端上,等待接收復(fù)制或遷移到它們那兒的代理。在一個(gè)實(shí)施例中,通過分析構(gòu)造符并且除去創(chuàng)建初始代理的任何語(yǔ)句,可以將任何主要團(tuán)體自動(dòng)地轉(zhuǎn)化為次要團(tuán)體。在一個(gè)應(yīng)用程序例子中,游戲開發(fā)者可以提供一個(gè)運(yùn)行時(shí)引擎,其可以安裝在局域網(wǎng)的PC上以便利用那些PC的能力而無須寫附加碼。
尋找具有類似代理的團(tuán)體在一個(gè)實(shí)施例中,通過使用在ACL和XML環(huán)球網(wǎng)服務(wù)的定義內(nèi)已存在的基礎(chǔ)結(jié)構(gòu),代理可以獲得它希望遷移到那兒的團(tuán)體的ID。另外,代理可以尋找計(jì)算機(jī)或網(wǎng)絡(luò)上所有可用的團(tuán)體或者包括類似代理的團(tuán)體。一般而言,假定在那里存在團(tuán)體時(shí)代理感興趣的情況下,它知道它希望對(duì)話的代理的類型。例如,可以提供詢問來在附近尋找包括指定代理的所有團(tuán)體。指定的代理可能是代理本身或另一個(gè)代理。查找可以是對(duì)于類似的代理以及對(duì)于在結(jié)構(gòu)上同樣的代理。替換地,可以提供詢問來確定有多少指定代理簽名的代理的實(shí)例存在于團(tuán)體中。
在一個(gè)實(shí)施例中,可能希望允許設(shè)計(jì)師使用這類功能而不必要知道它后邊的協(xié)議。例如,每個(gè)代理都可以包括以下格式的預(yù)定義方法communityCollection findCommunities(StructuralIdenticalbool=false)
其中,communityCollection類型是communityCollectionItem的集合,而communityCollectionItem是具有兩個(gè)部分的結(jié)構(gòu)集合ID、以及已經(jīng)存在的代理的實(shí)例的數(shù)量。參數(shù)“StructuralIndentical”可以指出是尋找結(jié)構(gòu)上相同的代理(真)還是尋找類似的代理(假),其中,缺省值是尋找類似的代理。再次,這個(gè)功能也可以是與語(yǔ)言一起發(fā)布的的庫(kù)的一部分,其中,如下所示的函數(shù)是可用的communityCollection findCommunities(AgentTypeagent;StructuralIdenticalbool=false)本領(lǐng)域的技術(shù)人員將注意到通過用許多方式來改變語(yǔ)法可以獲得相同的函數(shù)。
跨團(tuán)體工作的代理在一個(gè)實(shí)施例中,代理可以自動(dòng)地遷移到具有較少特定類型的代理或者具有更多剩余CPU能力的團(tuán)體。然而,“任何”運(yùn)算符是依賴于團(tuán)體的,并且不會(huì)選取其它團(tuán)體中的代理。例如,在多用戶視頻游戲中,用戶具有1,000個(gè)士兵的軍隊(duì),并且每個(gè)士兵都由具有復(fù)雜的戰(zhàn)斗和心理學(xué)行為的代理來表示。而且,另一個(gè)相對(duì)更強(qiáng)大的計(jì)算機(jī)是當(dāng)?shù)鼐W(wǎng)絡(luò)的一部分。如果該用戶可以在游戲中使用那個(gè)機(jī)器,則計(jì)算能力可用于更龐大的軍隊(duì)并且該用戶將在游戲中具有更大的能力。因而,次要團(tuán)體可以用來接收補(bǔ)充的士兵。然而,在次要團(tuán)體中并且通過任何運(yùn)算符對(duì)它們的環(huán)境做出響應(yīng)的士兵不再能看見主要團(tuán)體中的其它代理。
上面的不同實(shí)施例對(duì)這個(gè)問題提供了解決方案。整個(gè)模型通過由傳感器和行為產(chǎn)生的事件來推動(dòng)。代理的狀態(tài)主要存儲(chǔ)在傳感器的值中。為了讓代理在團(tuán)體之間互相響應(yīng),需要用存根來保持傳感器。因而,可能希望在保留決定哪些代理可以移出到其它機(jī)器而哪些不可以的自由的同時(shí),讓這些存根由系統(tǒng)自動(dòng)地創(chuàng)建。
為了達(dá)成這個(gè)目標(biāo),可以用關(guān)鍵字或?qū)傩詫⒋碜⑨尀椤癮utoMigrate”。例如void MyBchavior()autoMigrate behavior在一個(gè)實(shí)施例中,對(duì)于所有的autoMigrate行為,編譯器還可以在包括所有傳感器但是沒有行為的主要團(tuán)體中創(chuàng)建第二“存根”代理。如下所述的,這個(gè)存根代理稍后將負(fù)責(zé)傳送傳感器。在次要團(tuán)體中,autoMigrate代理的完全定義,以及autoMigrate代理依賴的每個(gè)代理的存根代理將是可用的。
當(dāng)autoMigrate代理被激活時(shí),它像普通的代理那樣工作并且可以監(jiān)視用于該代理的“執(zhí)行列表”。在一個(gè)實(shí)施例中,如在上面的自動(dòng)優(yōu)先級(jí)檢測(cè)的章節(jié)中所述的,執(zhí)行列表是需要執(zhí)行并且按照優(yōu)先級(jí)排序的行為的列表。
例如,如果行為列表變得比值‘X’ 更長(zhǎng),則可以選擇autoMigrate代理用于遷移,其中,‘X’是可以由設(shè)計(jì)師來配置的參數(shù)。因此,使用事件模型和得到的優(yōu)先級(jí)檢測(cè)作為處理器活動(dòng)的測(cè)量,其中,只要存在足夠的處理能力,autoMigrate代理就可以停留在計(jì)算機(jī)上。
為了選擇用于遷移的autoMigrate代理,可以使用幾個(gè)標(biāo)準(zhǔn)。例如,可以選擇依賴最小數(shù)量的外部傳感器的autoMigrate代理。在這種情況下,可以選擇用于遷移的autoMigrate代理的次序可以在編譯時(shí)間確定。另一個(gè)選擇方法可以是使用被最頻繁地激活的autoMigrate代理,以減少駐留的計(jì)算機(jī)的工作負(fù)荷。又一個(gè)方法可以是選擇在執(zhí)行列表上具有最大數(shù)量的行為的autoMigrate代理,或者選擇隨機(jī)的autoMigrate代理或另一個(gè)方法。
在一個(gè)實(shí)施例中,在主要團(tuán)體中,每當(dāng)在autoMigrate代理依賴的代理中更新傳感器的時(shí)候,將對(duì)于該傳感器的值更新就發(fā)送給次要團(tuán)體,在那里它更新用于這個(gè)代理的存根。同樣,在次要團(tuán)體中,每當(dāng)更新遷移的代理的傳感器時(shí),就將該傳感器的相關(guān)值發(fā)送回主要代理,在那里,它更新用于遷移的代理的存根。因?yàn)槲覀円聜鞲衅?,所以這將再造次要團(tuán)體中存在的事件。從使用代理的觀點(diǎn)看來,編譯器將保證由存根創(chuàng)建的事件與由初始代理創(chuàng)建的事件一致。
在一個(gè)實(shí)施例中,團(tuán)體之間的信息傳輸可以用XML包來完成。例如,可以添加系統(tǒng)定義的行為,其對(duì)該代理的事件做出響應(yīng),并且可以向其它團(tuán)體中的存根代理發(fā)送信息。代理可以或者向(具有已知ID的)其它團(tuán)體發(fā)送存根的名稱,或者直接向該存根的傳感器發(fā)送唯一的ID(指針)。
在設(shè)計(jì)時(shí)間,可以指定類別為autoMigrating。然而,遷移的是單獨(dú)實(shí)例。因而,每個(gè)代理都將自己決定它遷移的時(shí)間。因此,autoMigrate代理的一些實(shí)例可以遷移,而同一代理類別的其它實(shí)例可以不遷移。
在一個(gè)實(shí)施例中,對(duì)于單個(gè)主要團(tuán)體來說可能存在多個(gè)次要團(tuán)體。在每次遷移時(shí),可以用類似于上面的關(guān)于尋找具有類似代理的章節(jié)中描述的方法來選擇團(tuán)體,然而,在這種情況下,標(biāo)準(zhǔn)將是尋找具有在結(jié)構(gòu)上相同的代理的團(tuán)體。
遷移代理的安全性問題在一個(gè)實(shí)施例中,在XML環(huán)球網(wǎng)服務(wù)的安全性層次(或ACL層次)解決了安全性問題。例如,關(guān)于服務(wù)使用的安全措施應(yīng)該防止代理遷移到它們不具有授權(quán)的團(tuán)體。
調(diào)試層次方面調(diào)試行為多代理系統(tǒng)是很難調(diào)試的,因?yàn)樗鼈兙哂刑嗟牟⑿行袨椤_\(yùn)行時(shí)的錯(cuò)誤可能由于競(jìng)爭(zhēng)條件以及非常難于再造的事件共同發(fā)生而產(chǎn)生。因?yàn)楦弊饔檬瓜到y(tǒng)的并發(fā)特性的再造不完全,通過代碼的“分步”幾乎沒有意義。在代理之間調(diào)試的時(shí)候傳統(tǒng)的調(diào)試方法失效。因此,代理設(shè)計(jì)者應(yīng)該保證代理對(duì)于外部錯(cuò)誤盡可能魯棒。
因而,通過按照代理、行為以及觸發(fā)條件而不是按照例如方法和順序代、碼來推論,可以為了設(shè)計(jì)者的利益而利用上面列出的特征。
在一個(gè)實(shí)施例中,關(guān)鍵字或?qū)傩钥梢灾赋鲆粋€(gè)行為是“調(diào)試”行為,比如void MyBehavior()debug behaviorwhen TrigCondWhenifTrigCondIf{//statements}在這樣的一個(gè)實(shí)施例中,可以不同于普通行為地處理調(diào)試行為。例如,可以只在“調(diào)試”模式中編譯調(diào)試行為。在“釋放”模式中可以自動(dòng)地除去這些行為。在另一個(gè)例子中,調(diào)試行為可以具有最高優(yōu)先級(jí)。在一個(gè)實(shí)施例中,設(shè)計(jì)者可以使調(diào)試行為主體內(nèi)的語(yǔ)句減到最少,其中,這類行為具有空的主體,因此只有該行為的觸發(fā)被監(jiān)視。在另一個(gè)例子中,調(diào)試行為可以沒有continueWhen或completeWhen語(yǔ)句并且可以不被包含或恢復(fù)。一般而言,調(diào)試行為不會(huì)參與代理系統(tǒng)的活動(dòng)。它將只觀察(并且有時(shí)記錄)活動(dòng)。
在另一個(gè)例子中,在調(diào)試模式中,每個(gè)行為都可以包括能夠使系統(tǒng)“凍結(jié)”的邏輯。凍結(jié)將停止所有行為以便允許分析動(dòng)態(tài)系統(tǒng)的“快照(snapshot)”。在另一個(gè)例子中,調(diào)試行為可以在“零執(zhí)行時(shí)間”運(yùn)行,其中,當(dāng)一個(gè)調(diào)試行為被激活時(shí),它凍結(jié)系統(tǒng),然后再一切保持凍結(jié)的時(shí)候執(zhí)行主體。系統(tǒng)在調(diào)試行為完成的時(shí)候解凍。這允許調(diào)試行為在運(yùn)行時(shí)間中的特殊點(diǎn)上運(yùn)行檢查,和/或由此更新日志。
處理例外例外包括在運(yùn)行時(shí)間執(zhí)行的非法操作。這類動(dòng)作包括空指針的使用、被零除、以及許多其它的問題。這些問題可能在觸發(fā)條件估值以及執(zhí)行主體的時(shí)候發(fā)生。
在傳統(tǒng)的語(yǔ)言中,引發(fā)在行為的末端被捕獲的錯(cuò)誤事件。如果該事件沒有被捕獲,則該事件被向外傳播,直到最終整個(gè)系統(tǒng)可能崩潰。根據(jù)本發(fā)明,在一個(gè)實(shí)施例中,可以將一個(gè)預(yù)定義的標(biāo)量屬性“例外”與行為相關(guān)聯(lián)。如同被包含屬性,例外屬性是一個(gè)真的傳感器。當(dāng)它改變時(shí),它將引發(fā)事件。例如,設(shè)計(jì)者可以使用completeWhen語(yǔ)句來在例外發(fā)生的時(shí)候捕獲并且處理它們。在一個(gè)實(shí)施例中,如果行為不處理它的例外,則該行為立即完成。因而,該例外不被傳播并且系統(tǒng)繼續(xù)工作。
因?yàn)槔饪梢允钦娴膫鞲衅鳎栽摯碇腥魏纹渌男袨榭赡軐?duì)它做出響應(yīng)。因此,該代理中的另一個(gè)行為可以專用于處理該代理中發(fā)生的例外。
矩陣分析器在一個(gè)實(shí)施例中,“矩陣分析器”可以在代理正在執(zhí)行的時(shí)候監(jiān)視它們。例如,如同電子設(shè)備中的分析器,它可以不斷地示出所有相關(guān)參數(shù)的值并且用不同的查看格式來展示數(shù)據(jù)。
例如,一個(gè)查看可能示出在調(diào)試模式中的計(jì)算機(jī)上發(fā)現(xiàn)的團(tuán)體(否則矩陣分析器不能看見它們)。另一個(gè)查看可以示出具有它所有的傳感器和行為的單個(gè)代理。例如,對(duì)于每個(gè)傳感器,可以示出一個(gè)值。對(duì)于行為,代碼狀態(tài)可以用顏色來示出,例如黑色可以意指該代碼當(dāng)前不活動(dòng);綠色可以意指該代碼正在執(zhí)行;橙色可以意指該代碼正在等待執(zhí)行;而紅色可以意指該代碼在執(zhí)行期間出現(xiàn)錯(cuò)誤。
另一個(gè)查看可以把每個(gè)代理表示為單個(gè)塊或者點(diǎn),其中,顏色可以指出該代理的狀態(tài),例如如果該代理的任何一部分代碼在執(zhí)行期間出現(xiàn)錯(cuò)誤,則該代理可能是紅色的;如果該代理不是紅色的并且任何行為正在等待執(zhí)行,則該代理可能是橙色的;如果該代理不是紅色或橙色,并且任何行為是活動(dòng)的,則該代理可能是綠色;并且對(duì)于“非上面任何一種”的條件,該代理可以是黑色。在一個(gè)實(shí)施例中,可以將這個(gè)查看表示為矩陣。例如,1600×1200像素的屏幕可以示出最多192萬個(gè)代理的活動(dòng)。而且,可以突出特定的像素以允許為特定的代理選擇二級(jí)視圖,例如,可以用來進(jìn)行更詳細(xì)的分析。
IDE層次方面代理視圖在另一個(gè)實(shí)施例中,可以定義視覺代理設(shè)計(jì)者來可視地監(jiān)視代理。因而,在這樣的視覺建模者中可能存在大量的視圖。例如,在一個(gè)視圖中,開發(fā)者可以用類似于UML的方式看見該代理。替代于面向?qū)ο蟮?OO)建模中的變量或方法之前的單個(gè)指示符,可以存在兩個(gè)指示符,其中,第一指示符與OO的相同,以指出方法、行為、變量或傳感器是否是私有的、公共的或友好的(friend),而第二指示符示出它是方法還是行為,以及它是變量還是傳感器。第二指示符本質(zhì)上指出它是代理概念(傳感器或行為)還是對(duì)象概念(變量或方法)。
行為視圖在行為視圖中,傳感器和行為在它們所屬的代理之外示出。它們由代理的名稱來注釋,但是同一代理的傳感器和行為不需要示出在相同的附近。實(shí)際上,將行為和傳感器根據(jù)依賴性擴(kuò)展出去,許可傳感器和行為顯示在底部(或者在頂端、或者從左至右、或者從右到左,這都根據(jù)用戶的偏好)。在一個(gè)實(shí)施例中,傳感器和行為用示出了那些項(xiàng)之間的依賴性的箭頭連接在一起。
依賴性視圖基于RIDL的概念,可以定義依賴性圖表。在一個(gè)實(shí)施例中,這個(gè)圖表可以以可選擇的方式來顯示。例如,可以將代理顯示給用戶(如同在代理視圖那樣)并且可以在代理之間畫出箭頭以示出依賴性(本領(lǐng)域的技術(shù)人員將注意到確切的優(yōu)先級(jí)在運(yùn)行時(shí)間可能變化并且不能靜態(tài)地示出)。替換地,代理可以在行為視圖中示出,并且可以再次在行為和傳感器之間畫出箭頭以示出依賴性。
團(tuán)體視圖在另一個(gè)實(shí)施例中,類似于上面的調(diào)試層次方面,團(tuán)體視圖可以在運(yùn)行時(shí)間示出代理。
學(xué)習(xí)代理神經(jīng)代理——方面在人工神經(jīng)網(wǎng)絡(luò)(ANN)中,神經(jīng)元是數(shù)學(xué)公式。它們提供了表示它們的觸發(fā)值的數(shù)量。往往用閾值來只創(chuàng)建作為觸發(fā)值的0或1。神經(jīng)元中的公式基于通常作為較低層次處的所有節(jié)點(diǎn)之和計(jì)算的值,其中,將每個(gè)節(jié)點(diǎn)都乘以專用的乘法值。在離散ANN的情況下,權(quán)值必須在0和1之間。通過改變單獨(dú)的權(quán)值,并且通過將神經(jīng)元置于層上,系統(tǒng)可以通過教導(dǎo)而學(xué)會(huì)處理復(fù)雜數(shù)據(jù)(比如識(shí)別圖像上的對(duì)象)。
在RIDL中,可以略微改變地使用神經(jīng)網(wǎng)絡(luò)的概念。在一個(gè)實(shí)施例中,神經(jīng)元由代理來表示。它的觸發(fā)值是傳感器并且它具有對(duì)來自于較低層中的觸發(fā)值的事件做出響應(yīng)的行為以重新計(jì)算它的觸發(fā)值。最后結(jié)果是使用ANN的概念、RIDL軟件可以學(xué)會(huì)非常復(fù)雜的任務(wù)而不用對(duì)解答編程(因而通過訓(xùn)練)。
為了創(chuàng)建代理的層,可以利用不同的原則。例如,可以用繼承來將單個(gè)層的所有代理置于單個(gè)類別名稱下。替換地,每個(gè)代理都可以具有它所在層的號(hào)碼,并且這個(gè)號(hào)碼可以是檢查條件中的一個(gè)。
在一個(gè)方面中,在RIDL中不存在“對(duì)于全部(for all)”結(jié)構(gòu)。一般地,不可能訪問所有的代理,因?yàn)榭赡茉谶@樣的動(dòng)作當(dāng)中創(chuàng)建或毀滅代理。因此,由代理自己決定來保持它連接到的代理的列表??梢源┻^這樣的列表。例如,可以通過使用“任何”運(yùn)算符將該列表一直保持最新(例如,如果我所監(jiān)視的層內(nèi)存在任何代理,因?yàn)檎J(rèn)為它不在我的列表中,則將其添加到列表)。
自寫學(xué)習(xí)代理軟件的遺傳進(jìn)化——方面介紹簡(jiǎn)單而言,遺傳的編程在兩個(gè)原則上工作突變導(dǎo)致小的隨機(jī)變化;交叉適應(yīng)父輩,并且通過采用一個(gè)父輩的某些部分、以及另一個(gè)父輩的某些部分來創(chuàng)建單個(gè)子輩。
基于不同的應(yīng)用程序相關(guān)的參數(shù),可以確定代理的成功因子。允許最成功的代理“繁殖”,并且使用上面的兩個(gè)原則創(chuàng)建后代。變化存在,其中,如果大量的父輩極其成功,則它們沒有變化地移動(dòng)到下一代。再次測(cè)量新一代的成功,并且新一代又可以繁殖來創(chuàng)建又一個(gè)代。一般而言,盡管代理的預(yù)期壽命有時(shí)可能是多代,對(duì)于每一代上一代死亡。正如所看到的,遺傳的編程提供了允許軟件自動(dòng)進(jìn)化成更有效率的軟件的方式。
作為DNA突變基礎(chǔ)的觸發(fā)條件如上所述的,基于行為的多代理系統(tǒng)可以用于遺傳的編程。它們提供了代理之間的差別,行為在代理內(nèi)形成了功能的離散塊。這提供了可以指引突變和交叉運(yùn)算符變得比盲目的源代碼修改更有效的信息。
在一個(gè)實(shí)施例中,遺傳的編程假定了大量的代理類別,并且每個(gè)代理類別只有一個(gè)實(shí)例。因此,每個(gè)代理都是單獨(dú)并且唯一的。當(dāng)應(yīng)用突變或交叉時(shí),除非另有說明,使用其中一個(gè)父輩的主體。代理的原始群體或者包括具有包含學(xué)習(xí)代碼的主體的行為(例如神經(jīng)代理),或者包括采用所有種類的小動(dòng)作的許多行為。
在一個(gè)實(shí)施例中,突變運(yùn)算符對(duì)一個(gè)代理的一個(gè)行為工作。在一個(gè)方面中,定義大量的突變運(yùn)算符,其用特定于應(yīng)用程序的頻率在該群體上隨機(jī)地工作,例如(a)行為中發(fā)生的傳感器(通常在觸發(fā)條件中)的名稱由另一個(gè)存在的傳感器的名稱替代。不斷地做出這個(gè)替換,因此所有的發(fā)生都被替換以便將軟件的邏輯保持原樣。傳感器只可以由同一類型的傳感器來替代。(b)觸發(fā)條件中在行為中發(fā)生的行為的名稱由另一個(gè)存在的行為的名稱替換。(c)如果在觸發(fā)條件的時(shí)間部分提及一個(gè)傳感器,則等待同一傳感器的不同的事件。因此,可以或者在“sensor.changes”中,或者在“sensor.event”中改變“sensor.updates”。(d)如果在觸發(fā)條件的時(shí)間部分提及一個(gè)行為,則等待同一行為的不同事件。因此,可以在其它中間的或者“behavior.completes”或者“behavior.event”中改變“behavior.activates”。(e)可以丟棄觸發(fā)條件的“時(shí)間”部分的事件。(f)可以丟棄觸發(fā)條件的“條件”部分的條件。(g)可以添加關(guān)于觸發(fā)條件的“時(shí)間”部分中已存在的任何傳感器的附加條件。(h)可以將存在的行為或傳感器的附加事件添加到觸發(fā)條件的“時(shí)間”部分。(i)可以在代理中創(chuàng)建新的傳感器,并且將傳感器添加到該行為的時(shí)間條件。對(duì)這個(gè)傳感器的更新可以來自于首先指定的突變。該傳感器根據(jù)某種可能性是公共的或?qū)S玫摹?br> 代理層次交叉在一個(gè)實(shí)施例中,例如,采用來自于一個(gè)代理的大量行為和來自于另一個(gè)代理的大量行為,可以從兩個(gè)代理中構(gòu)造一個(gè)新的代理。將這些行為集成到新的代理中。除了不在任何這些行為中使用的局部傳感器之外,將兩個(gè)行為的所有本地傳感器都復(fù)制到新的代理。
基本的行為層次交叉這個(gè)交叉以兩個(gè)行為工作??梢酝ㄟ^把兩個(gè)行為的觸發(fā)條件的部分副本合并成一個(gè)新的觸發(fā)條件而創(chuàng)建一個(gè)新的行為。在一個(gè)實(shí)施例中,新行為的主體從兩個(gè)父輩的一個(gè)中取出。不觸碰主體之內(nèi)的代碼,使算法保持原樣。如果被復(fù)制的父輩具有“completeWhen”子句,則可以同一地復(fù)制該子句。這保證了保留與該算法相關(guān)聯(lián)的錯(cuò)誤處理。傳感器名稱上的突變還適用于completeWhen子句。
順序的行為層次交叉另一個(gè)交叉運(yùn)算符可以讓兩個(gè)父輩有順序。在一個(gè)實(shí)施例中,這個(gè)交叉運(yùn)算符采用一個(gè)父輩,并且在該父輩的主體的末端,它放置具有第二父輩的觸發(fā)條件的“continueWhen”語(yǔ)句。然后,它添加第二父輩的主體。然后,附加兩個(gè)父輩的全部“completeWhen”子句。
順序的行為層次突變當(dāng)行為具有“continueWhen”語(yǔ)句時(shí),刪除從主體的開頭開始,或者從“continueWhen”語(yǔ)句開始,直到下一個(gè)“continueWhen”語(yǔ)句或者直到主體的結(jié)尾的代碼。
可以使用其它的運(yùn)算符。關(guān)鍵在于RIDL的觸發(fā)條件和語(yǔ)法允許算法定義在那里它可以安全地把代碼粘貼在一起的清楚的點(diǎn),而不會(huì)從語(yǔ)法和語(yǔ)義層次引起軟件突變。
活動(dòng)中的延伸的團(tuán)體使用類似團(tuán)體的概念來使多代理系統(tǒng)的遺傳的編程成為可能。
在一個(gè)實(shí)施例中,因?yàn)殚_發(fā)者給遺傳的程序提供了源代碼的代表,遺傳的程序可以訪問它自己的源代碼。遺傳的程序?qū)υ创a做出改變,并且重新編譯該代碼。當(dāng)這樣做的時(shí)候,對(duì)于遺傳的程序利用繼承性是有用的。
在編譯之后,啟動(dòng)這個(gè)新的程序,并且由此創(chuàng)建了新的團(tuán)體。這個(gè)團(tuán)體通常類似于原始的團(tuán)體。因?yàn)槭褂昧死^承性,舊團(tuán)體的代理類別基本上保持原樣,但是已經(jīng)創(chuàng)建了新的后代。
接下來,使得所有的代理都遷移到新的團(tuán)體。在這發(fā)生之后,舊的團(tuán)體被摧毀。最后結(jié)果是我們的代理仍然是相同的,但是現(xiàn)在處于它們需要與它們的后代競(jìng)爭(zhēng)的環(huán)境中。
代理文件系統(tǒng)方面當(dāng)文件系統(tǒng)基于數(shù)據(jù)庫(kù)時(shí),如同通常這樣,例如,在一個(gè)微軟_視窗的當(dāng)前版本中,于是可以用面向代理的數(shù)據(jù)庫(kù)原則來向文件分配行為。例如,文件可以監(jiān)視它自己并且決定它是否需要備份它自己,或者修復(fù)它自己,或者通知用戶某些條件,或者用其它方法來自我管理。這將有利地使PC維護(hù)的負(fù)擔(dān)遠(yuǎn)離用戶。
雖然已經(jīng)按照可仿效的實(shí)施例描述了本發(fā)明,但是它不限制在那里。實(shí)際上,應(yīng)該寬廣地解釋附加的權(quán)利要求來包含本發(fā)明的其它變型和實(shí)施例,它們可以在不脫離本發(fā)明的等價(jià)物的范圍的前提下由本領(lǐng)域的技術(shù)人員做出。
權(quán)利要求
1.具有計(jì)算機(jī)可執(zhí)行部分的計(jì)算機(jī)可讀介質(zhì),計(jì)算機(jī)可執(zhí)行部分包括至少一個(gè)代理,具有至少一個(gè)包含目標(biāo)或改變方法部分的傳感器部分和至少一個(gè)行為部分;其中,至少一個(gè)傳感器部分至少部分地基于至少一個(gè)從目標(biāo)或改變方法部分產(chǎn)生的值來產(chǎn)生至少一個(gè)事件,并且至少一個(gè)行為部分至少部分地基于來自至少一個(gè)傳感器部分的至少一個(gè)產(chǎn)生的事件來確定是否要激活執(zhí)行的線程。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)行為部分確定是否記錄至少一個(gè)產(chǎn)生的事件。
3.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)事件是改變或更新事件中的一個(gè)。
4.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)行為部分在至少一個(gè)事件產(chǎn)生傳感器部分的代理之外。
5.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)行為部分的激活包括產(chǎn)生至少一個(gè)調(diào)用。
6.根據(jù)權(quán)利要求5所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)傳感器部分可以由它的目標(biāo)或改變方法部分來激活,以至少部分地基于至少一個(gè)調(diào)用來產(chǎn)生至少一個(gè)事件。
7.根據(jù)權(quán)利要求6所述的計(jì)算機(jī)可讀介質(zhì),其中,將至少一個(gè)傳感器部分包括在至少一個(gè)調(diào)用產(chǎn)生行為部分的代理之外的代理中。
8.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,行為部分能夠至少部分地基于來自至少一個(gè)傳感器部分的至少一個(gè)產(chǎn)生的事件來包含或恢復(fù)至少一個(gè)其它的行為部分或代理。
9.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,只要執(zhí)行的線程激活,至少一個(gè)行為部分就產(chǎn)生狀態(tài)事件,該狀態(tài)事件能夠由至少一個(gè)其它的行為部分接收。
10.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,只要執(zhí)行的線程完成,至少一個(gè)行為部分就產(chǎn)生狀態(tài)事件,該狀態(tài)事件能夠由至少一個(gè)其它的行為部分接收。
11.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)行為部分基于獨(dú)立的觸發(fā)條件來確定是否激活執(zhí)行的線程。
12.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其中,獨(dú)立的觸發(fā)條件還能夠?qū)τ谔囟ǖ膱?zhí)行的線程的激活確定優(yōu)先級(jí)狀態(tài),并且其中,能夠基于多個(gè)執(zhí)行的線程的激活優(yōu)先級(jí)狀態(tài)而順序地執(zhí)行它們。
13.根據(jù)權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)行為部分內(nèi)部或外部的ContinueWhen、resumeWhen和complete When語(yǔ)句中的至少一個(gè)可操作來基于執(zhí)行的線程的激活優(yōu)先級(jí)狀態(tài)來同步它們。
14.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其中,獨(dú)立的觸發(fā)條件包括至少一個(gè)時(shí)間語(yǔ)句和至少一個(gè)條件語(yǔ)句,其中,時(shí)間語(yǔ)句指出獨(dú)立的觸發(fā)條件所響應(yīng)的事件變成活動(dòng)的,而條件語(yǔ)句是基于預(yù)先確定的過濾值。
15.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其中,獨(dú)立的觸發(fā)條件要求多個(gè)產(chǎn)生的事件變成活動(dòng)的。
16.根據(jù)權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其中,獨(dú)立的觸發(fā)條件是基于至少一個(gè)行為部分的本地感知。
17.根據(jù)權(quán)利要求14所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)行為部分在獨(dú)立的觸發(fā)條件再次變成活動(dòng)的之前,對(duì)于活動(dòng)的獨(dú)立的觸發(fā)條件激活執(zhí)行的線程。
18.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,對(duì)至少一個(gè)行為和傳感器部分定義至少一個(gè)關(guān)鍵字,其中,至少一個(gè)關(guān)鍵字指出特定代理、至少一個(gè)行為或傳感器以及用于激活獨(dú)立的觸發(fā)條件的特定事件中的至少一個(gè)。
19.根據(jù)權(quán)利要求18所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)關(guān)鍵字可操作來指出至少一個(gè)代理所不知道的,行為或傳感器部分、代理或事件中的任意一個(gè)。
20.根據(jù)權(quán)利要求18所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)關(guān)鍵字可操作來指出預(yù)先確定的代理類別。
21.根據(jù)權(quán)利要求20所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)關(guān)鍵字能夠指出預(yù)先確定的代理類別內(nèi)的特定代理。
22.根據(jù)權(quán)利要求18所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)關(guān)鍵字可操作來指出特定的行為或傳感器的可以激活的時(shí)間。
23.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其中,至少一個(gè)代理能夠產(chǎn)生事件。
24.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)基于行為的多代理計(jì)算系統(tǒng),包括用于接收請(qǐng)求的代碼段;和執(zhí)行框架,包括多個(gè)具有至少一個(gè)傳感器部分的代理,包括至少一個(gè)目標(biāo)或改變方法部分,和至少一個(gè)常規(guī)的,詳盡的或冗余的行為部分;其中,至少一個(gè)目標(biāo)或改變方法部分產(chǎn)生至少一個(gè)值,至少一個(gè)傳感器部分至少部分地基于來自至少一個(gè)目標(biāo)或改變方法部分的至少一個(gè)產(chǎn)生的值來產(chǎn)生至少一個(gè)事件,并且至少一個(gè)行為部分至少部分地基于來自至少一個(gè)傳感器部分的至少一個(gè)產(chǎn)生的事件來確定是否要激活執(zhí)行的線程。
25.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求24的基于行為的多代理計(jì)算系統(tǒng),其中,從至少一個(gè)代理接收請(qǐng)求。
26.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求24的基于行為的多代理計(jì)算系統(tǒng),其中,執(zhí)行框架在面向?qū)ο蟮恼Z(yǔ)言結(jié)構(gòu)上分層來變成面向代理的語(yǔ)言結(jié)構(gòu),其中,對(duì)象和代理在面向代理的語(yǔ)言結(jié)構(gòu)內(nèi)是能夠互換的部分。
27.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,面向代理的語(yǔ)言結(jié)構(gòu)包括基于面向?qū)ο蟮恼Z(yǔ)言結(jié)構(gòu)。
28.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,代理形成能夠復(fù)制的代理的團(tuán)體。
29.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求28的基于行為的多代理計(jì)算系統(tǒng),其中,代理包括能夠在復(fù)制的團(tuán)體之間遷移的代理的團(tuán)體。
30.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求29的基于行為的多代理計(jì)算系統(tǒng),其中,代理可以通過知道目標(biāo)團(tuán)體識(shí)別參數(shù)在團(tuán)體之間遷移。
31.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求29的基于行為的多代理計(jì)算系統(tǒng),其中,代理可以搜索目標(biāo)團(tuán)體。
32.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,分層的系統(tǒng)允許通過代理團(tuán)體繁殖它們自己以在網(wǎng)格計(jì)算中工作。
33.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,代理能夠通過使用至少一個(gè)存根在團(tuán)體之間活動(dòng),其中,存根能夠保持至少一個(gè)傳感器并且是自動(dòng)地產(chǎn)生的。
34.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,那些代理變成能夠集合在一起來實(shí)現(xiàn)服務(wù)的名稱空間的一部分。
35.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,服務(wù)可以由注釋名稱空間的關(guān)鍵字或?qū)傩詠碇赋觥?br> 36.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,至少一個(gè)代理可操作來代表神經(jīng)網(wǎng)絡(luò)的神經(jīng)元,至少一個(gè)代理具有至少一個(gè)觸發(fā)值作為至少一個(gè)傳感器,并且至少一個(gè)行為部分可操作來對(duì)來自于至少一個(gè)較低層中的至少一個(gè)觸發(fā)值的至少一個(gè)事件做出響應(yīng)。
37.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,至少一個(gè)代理利用至少一個(gè)行為中的至少一個(gè)突變或交叉運(yùn)算符來實(shí)現(xiàn)至少一個(gè)自寫學(xué)習(xí)代理,從而允許計(jì)算機(jī)程序自動(dòng)地發(fā)展。
38.在計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的計(jì)算機(jī)程序,用于實(shí)現(xiàn)權(quán)利要求26的基于行為的多代理計(jì)算系統(tǒng),其中,將至少一個(gè)行為分配給至少一個(gè)文件來管理它自己。
39.面向代理的數(shù)據(jù)庫(kù),包括包括至少一個(gè)代理的多個(gè)區(qū)段;至少一個(gè)代理具有至少一個(gè)包括目標(biāo)或方法改變部分的傳感器部分;其中,至少一個(gè)傳感器部分可操作來至少部分地基于來自于目標(biāo)或方法改變部分的至少一個(gè)產(chǎn)生的值來產(chǎn)生至少一個(gè)事件。
40.根據(jù)權(quán)利要求39所述的數(shù)據(jù)庫(kù),其中,至少一個(gè)代理包括行為部分。
全文摘要
本發(fā)明的實(shí)施例包括具有計(jì)算機(jī)可執(zhí)行部分的計(jì)算機(jī)可讀介質(zhì),計(jì)算機(jī)可執(zhí)行部分包括至少一個(gè)具有至少一個(gè)傳感器部分和至少一個(gè)行為部分的代理,至少一個(gè)傳感器部分具有目標(biāo)或改變方法部分。至少一個(gè)傳感器部分至少部分地基于來自于目標(biāo)或改變方法部分的至少一個(gè)產(chǎn)生的值來產(chǎn)生至少一個(gè)事件。至少一個(gè)行為部分至少部分地基于來自于至少一個(gè)傳感器元件的至少一個(gè)產(chǎn)生的事件來確定是否激活執(zhí)行的線程。系統(tǒng)復(fù)雜的執(zhí)行的線程可以通過代理層次、事件層次、傳感器層次以及行為層次上的任何運(yùn)算符來產(chǎn)生。
文檔編號(hào)G06F9/44GK1914630SQ200580003925
公開日2007年2月14日 申請(qǐng)日期2005年1月5日 優(yōu)先權(quán)日2004年1月5日
發(fā)明者迪迪爾·蒂加德, 斯特凡·戴科特, 菲利普·凡荷格 申請(qǐng)人:迪迪爾·蒂加德
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1