利物浦大学comp313课程第一节课
thomas老師
200個人左右上這個課
周三的中國時間的
14+8=22
周三晚上十點是oh
zoom的break up room是一個很好的特征
我希望你這次好好做
做基礎了
我真的應該和gxh好好把這個online 的path跟上去
小心點老哥
blended learning
videos
only a small amount of course will be
總共4個lecture
我希望你能夠每個周三去Office hour
三月15號有第一個作業
四月12號有class test
老哥
把課下的東西看了
真的其實有必要看
就是有很多的小視頻
沒問題
你來
我就翻譯他們
這個是課本
Professor Nick Jennings FREng
這個老師我好像套過瓷
這個老師比較穩
利物浦之后去Oxford
感覺和Katie的水平一樣的
太猛了
agent定義
應用
智能代理設計
理論
實踐
代理語言
agentspeak
Agent-oriented programming (AOP) is a programming paradigm where the construction of the software is centered on the concept of software agents. In contrast to object-oriented programming which has objects (providing methods with variable parameters) at its core, AOP has externally specified agents (with interfaces and messaging capabilities) at its core. They can be thought of as abstractions of objects. Exchanged messages are interpreted by receiving “agents”, in a way specific to its class of agents.
多智能系統的出現有很多的理論的支持
有五個計算的趨勢
ubiquity,普遍的,什么地方都有的,smart watch,哪里都有的
這里有很多能做計算的東西
哪里都有
interconnection
物聯網
都連在一起
interlligence
能自己做一些決定
delegation
我們相信他們做一些事情
去吧小機器
human orientation
越來越好寫的代碼
順便說一句
不要去思考什么g
因為這個的效率不高
自己寫這個gui是可以的
要感受到用gui編程的效率低低下
因為你要加載這些圖片的效率比加載代碼的效率低下很多
看看我們的這門課的老師的背景
Michael Wooldridge教授
計算機科學系
利物浦大學
Liverpool L69 3BX, UK
電話(+44 7540) 845 345
mailto:mjw@liv.ac.uk
我是利物浦大學計算機科學系的計算機科學教授。我是Agent應用、研究和技術研究小組(Agent ART)的成員,該小組在自主代理和多代理系統領域開展純研究和應用研究。2011年10月,我獲得了一項為期5年的ERC高級資助,名為 “計算經濟的推理”(RACE)。
我已經在自主代理和多代理系統的理論和實踐方面發表了三百多篇文章(也可參見我的Google Scholar條目)。我的主要研究興趣是使用這樣或那樣的形式化方法來指定和推理多代理系統,以及多代理系統的計算復雜性。
我是AAAI Fellow、ECCAI Fellow、AISB Fellow和BCS Fellow。 2006年,我獲得了ACM自主代理研究獎。1997年,我創立了AgentLink,這是一個由歐盟委員會資助的歐洲代理計算領域的卓越網絡。我是2010年8月在葡萄牙里斯本舉行的第19屆歐洲人工智能會議(ECAI-2010)的程序主席。我將擔任將在阿根廷布宜諾斯艾利斯舉行的第24屆國際人工智能聯合會議(IJCAI-2015)的總主席。
2003年至2009年期間,我是《自主代理和多代理系統》雜志的共同主編。我是《人工智能研究雜志》(JAIR)的副主編(2006-2009年,2009-2012年),《人工智能》雜志的副主編(2009-2012年),并擔任《應用邏輯雜志》、《邏輯與計算雜志》、《應用人工智能雜志》和《計算智能》的編委。
感謝您對我工作的關注。
著作
書。多代理系統簡介(第二版)
書。合作博弈論的計算方面
書。理性代理的推理
書。用AgentSpeak編程多Agent系統
教學
圖片集錦
agent automatious do something
這個和博弈論有很多的聯系
來者可追
AgentSpeak是一種面向代理的編程語言。它基于邏輯編程和信仰-欲望-意圖軟件模型(BDI)架構,用于(認知)自主代理。該語言最初被稱為AgentSpeak(L),但后來更流行的是AgentSpeak,這個術語也被用來指代原語言的變種。
下一個周要學習強化學習
下個周要上課
有一些quzz
這個要跟上
老哥,要跟上
每一個課程之后都有quiz
這個不錯
面向代理的編程
來自維基百科,自由的百科全書。
跳到導航跳到搜索
方案編制范式
行動
面向代理
陣列導向
基于自動機
并發計算
相對論編程
數據驅動
宣示性(對比:執行性)
功能性
功能邏輯
純功能性
邏輯學
歸納邏輯
答案集
并發邏輯
功能邏輯
歸納邏輯
限制條件
約束邏輯
并發約束邏輯
數據流
流量型
反應式
功能性反應性
本體論
差異化
動態/腳本
事件驅動
功能級(對比:價值級)
無點式
并列式
通用
勢在必行(對比:聲明式)
程序性
面向對象
多態性
有意的
面向語言
特定領域
識字
自然語言編程
元編程
自動
歸納式編程
反射式
面向屬性
宏觀
模板
非結構化(對比:結構化)
陣列
非確定性
并行計算
面向過程
概率論
量子
集合理論
基于堆棧
結構化(對比:非結構化)
塊狀結構
結構化并發
面向對象
基于行為者
以班級為單位
并行
基于原型
通過分離關注點。
面向方面
角色導向
面向主題
遞歸式
符號
價值級(對比:功能級)
vte
面向代理編程(AOP)是一種編程范式,軟件的構建是以軟件代理的概念為核心的。與面向對象編程的核心是對象(提供具有可變參數的方法)不同,AOP的核心是外部指定的代理(具有接口和消息傳遞能力)。它們可以被認為是對象的抽象。交換的消息由接收的 "代理 "解釋,以其代理類特有的方式進行。
內容
1 歷史
2個框架
2.1 JADE
2.2 代理人說(Jason)
2.3 目標
2.4 SARL語言
3 中間件
4 另見
5個參考文獻
歷史[編輯]
從歷史上看,面向代理編程的概念和以Agent概念為中心的軟件思想是由Yoav Shoham在1990年他的人工智能研究中提出來的,[1][2]他的Agent是針對他自己的范式的,因為他們只有一個方法,只有一個參數。引用Yoav Shoham在1990年的論文中的一句話來說明AOP和OOP的基本區別。
…面向代理的編程(AOP),它可以被看作是面向對象編程的一個特殊化。…
OOP AOP
基本單位對象代理
定義基本單元狀態的參數無約束信念、承諾、能力、選擇、…。
計算過程 信息傳遞和響應方法 信息傳遞和響應方法
消息的類型 無約束的告知、請求、提供、承諾、拒絕、…。
對方法的約束 無 誠信、一致性、…。
框架[編輯]
有多個AOP “框架”,也稱為代理平臺,實現了Shoham的編程范式。下面的例子說明了如何將一個基本的代理編程為hell-world程序。
JADE[編輯]
對于Java平臺,其中一個框架是JADE3。下面是一個非常基本的例子[1],它是一個運行代碼的代理。
包地獄世界。
import jade.core.Agent;
public class Hello extends Agent {
protected void setup() { System.out.println("Hello World.");System.out.println("我的名字是 "+ getLocalName())。 }public Hello() {System.out.println("Constructor called")。 }}
JADE的AOP模型的核心是其API支持標準的FIPA代理通信語言。
特工說(杰森)[編輯]。
為了將面向代理的概念字面翻譯成JADE那樣不露聲色的方案,在Java和面向對象的背后,Agent Speak[4](Jason)為代理提供了一種 "自然 "的語言。
GOAL[編輯]
GOAL是一種用于認知代理編程的代理編程語言。GOAL代理從他們的信念和目標中獲得行動的選擇。該語言通過編程構造提供了設計和實現認知代理的基本構件,這些構件允許并促進對代理的信念和目標的操作,并構建其決策。該語言提供了一個基于常識或實踐推理的直觀編程框架。
SARL語言[編輯]
SARL[5](SARL網站)提供了多代理系統編碼的基本抽象。它使用類似腳本的語法(受Scala和Ruby的啟發)。
包helloworld
導入 io.sarl.core.Initialize
代理HelloWorldAgent {
關于初始化 {
println(“Hello World.”)
}
}
中間件[編輯]
實現模塊化或可擴展的AOP支持的一種方法是為中間件功能定義標準的AOP API,這些功能本身是作為軟件代理實現的。例如,目錄服務可以作為FIPA目錄促進器或DF軟件代理來實現;啟動、停止、暫停和恢復代理的生命周期管理可以作為FIPA代理管理服務或AMS代理來實現[6]AOP方法的一個好處是,它支持應用、服務和網絡的不同用戶和提供者之間更多的動態角色。例如,傳統上,網絡和服務通常由網絡和服務提供商代表客戶進行管理,并作為單一的虛擬網絡服務提供,但客戶本身正變得越來越有能力整合和管理自己的服務。這可以通過AOP和中間件代理的API來實現,這些代理可以靈活、動態地管理通信[7]。
另見[編輯]
軟件代理
NetLogo
演員模型
目標
參考文獻[編輯]
^ Shoham, Y. (1990)。面向代理的編程(技術報告STAN-CS-90-1335)。斯坦福大學。Stanford University: Computer Science Department.
^ Shoham,Y.(1993)。“Agent-Oriented Programming”. 人工智能》。60 (1): 51–92. CiteSeerX 10.1.1.123.5119. doi:10.1016/0004-3702(93)90034-9.
^ Bellifeminee, Fabio; Agostino Poggi; Giovanni Rimassa (2001). JADE:一個符合FIPA2000的代理開發環境。pp.216-217. doi:10.1145/375735.376120.
^ Anand S. Rao,1996。AgentSpeak(L)。BDI代理在邏輯可計算語言中大聲說話。第七屆歐洲多代理世界中的自主代理建模研討會(MAAMAW-96)。
^ Rodriguez, Sebastian; Gaud, Nicolas; Galland, Stéphane (2014). “SARL: A General-Purpose Agent-Oriented Programming Language”. 2014 IEEE/WIC/ACM國際網絡智能(WI)和智能代理技術(IAT)聯合會議。 pp.103-110.doi:10.1109/wi-iat.2014.156. ISBN 978-1-4799-4143-8.
^ Poslad, S (2007). “Specifying Protocols for Multi-agent System Interaction”. ACM Transactions on Autonomous and Adaptive Systems. 2 (4): 15-es. doi:10.1145/1293731.1293735.
^ Poslad, S; J. Pitt; A. Mamdani; R. Hadingham; P. Buckle (1999). 用于集成客戶網絡服務的面向代理的中間件。在。pp.221-242. doi:10.1007/978-3-642-58418-3_9.
類別:基于代理的編程語言 基于代理的編程語言
來自維基百科,自由的百科全書。
跳到導航跳到搜索
隱藏本文有多個問題。請幫助改進它或在討論頁面討論這些問題。(了解如何以及何時刪除這些模板消息)
這篇文章的主要撰稿人似乎與其主題有密切關系。(2013年11月)
本文可能過分依賴與主題關系過于密切的消息來源,有可能使文章無法核實和中立。(2013年11月)
AgentSpeak
范式 面向代理的編程
設計:Anand Rao
1996年首次出現;25年前
主要實施情況
杰森
AgentSpeak是一種面向代理的編程語言。它基于邏輯編程和信仰-欲望-意圖軟件模型(BDI)架構,用于(認知)自主代理。該語言最初被稱為AgentSpeak(L),但后來更流行的是AgentSpeak,這個術語也被用來指代原語言的變種。
內容
1 歷史
2 另見
3個參考文獻
4 外部鏈接
歷史[編輯]
1996年,Anand Rao基于BDI架構創建了一種基于邏輯的代理編程語言,并將其命名為AgentSpeak(L).[1]這成為多代理系統文獻中被高度引用的論文。在最初的構想中,AgentSpeak是一種抽象的代理編程語言,旨在幫助理解BDI架構的實際實現(如程序推理系統(PRS))[2]與使用模態邏輯將BDI架構背后的思想形式化之間的關系[3]。
例如,不同的作者為AgentSpeak(L)語言的進一步形式化做出了貢獻[4] 近年來,該語言在研究和開發方面都得到了復興。在研究方面,既有對AgentSpeak的擴展[5][6][7],也有利用模型檢查對AgentSpeak程序進行形式化驗證的工作[8][9],由于Jason平臺的發展,該語言也是最流行的面向代理的語言之一。
AgentSpeak(L)也是多Agent編程大賽從開始到最近一屆比賽中最主要的解決方案開發手段。
http://jason.sourceforge.net/wp/
使用Jason在AgentSpeak中編程多Agent系統
由John Wiley & Sons Ltd.出版,2007年10月。http://jason.sf.net/jBook/。
AgentSpeak
- 最初由Rao提出[MAAMAW 1996]
- BDI代理的編程語言
- 優雅的符號,基于邏輯編程。
- 受PRS(Georgeff和Lansky)、dMARS(Kinny)和BDI邏輯(Rao和Georgeff)的啟發。
- 以理論成果為目標的抽象編程語言
AgentSpeak的語法
- AgentSpeak的主要語言結構是。
- 信念-目標-計劃
- AgentSpeak代理的架構有四個主要組成部分。
- 信仰基礎
- 計劃圖書館
- 事件集
- 一套意向
AgentSpeak的語法(信念和目標)
- 信念代表了代理人所能獲得的信息(例如,關于環境或其他代理人的信息
出版社(Wiley) - 目標代表了代理人想要實現的狀態(當目標被用于陳述性時,要相信)。
- 實現目標。
!"寫書
或試圖從信念庫中檢索信息–測試目標。
檢驗目標: 發布者§
AgentSpeak的語法(事件和計劃)
- 代理商通過執行計劃對事件做出反應。
- 事件的發生是代理人的信念或目標變化的結果–計劃是行動的配方,代表了代理人的知識。
- 一個AgentSpeak計劃具有以下一般結構。
triggering_event : context <- body. - 其中: -觸發事件表示該計劃要處理的事件; -上下文表示該計劃可以處理的情況。
- 觸發事件表示該計劃要處理的事件; -上下文表示該計劃可以使用的情況。
- body是指在選擇計劃處理事件時,如果上下文被認為是真的,則要用來處理該事件的行動過程。
AgentSpeak的語法(計劃Cont.
- AgentSpeak觸發事件。
- +b(信念加法)
-b(刪除信仰) - +!g(成就-目標添加)–!g(成就-目標刪除)–+?g(測試-目標添加)。
- g(測試目標刪除)
- 語境是邏輯表達,典型的是字詞的連詞,要檢查它們是否從信仰基礎的當前狀態出發
- 身體是一系列的行動和要實現的(子)目標。
- NB:這是原始的AgentSpeak語法;Jason允許在計劃的上下文和主體中使用其他東西。
AgentSpeak計劃
+綠斑(巖石)
:不是電池充電(低)
<- ?location(Rock,Coordinates);
!at(Coordinates);
examine(Rock).在(Coords); !
+!at(Coords)
:不在(Coords)
& safe_path(Coords)
<- move_towards(Coords)。
!"at(Coords). "+!"at(Coords) …
+!在(Coords)…。
杰森
- 開發多代理系統的平臺
- 由Jomi F. Hübner和Rafael H. Bordini開發。
- 我們來看看AgentSpeak的Jason新增的功能及其特點。
杰森推理周期認知
代理商
1
覺察
觀念2
信念
外部活動
內部活動
事件
5
SE
6
3
檢查郵件
訊息
8
S O
9
S I
10
執行意圖
BUF
BRF
增加和刪除的信仰
信仰基礎
外部活動
4
SocAcc
SM
信念
選定事件
7項相關檢查計劃
語境
統一事件
計劃
選定意向
意圖
適用計劃
預期手段
信念
計劃圖書館
事件
行動法案
.發送
發送消息(sendMsg)
暫停的意向
(行動和女士).
(行動和女士).
推新新計劃意圖
…
新的
新產品
更新的意向
訊息
行動
訊息
推理周期(步驟
推理周期(步驟
6. 檢索所有相關計劃
7. 確定適用的計劃
8. 選擇一個適用計劃
9. 選擇進一步執行的意向 10. 執行意向的一個步驟
a. 環境行動 b.成績目標 c.測試目標
d. 心理筆記
e. 內部行動 f. 表達方式
信仰注解
- 附加注釋的謂詞。
ps(t1,…,tn)[a1,…,am]
其中ai為一階項 - 信念庫中的所有謂詞都有一個特殊的注解源(si),其中si∈{self,percept} ∪AgId
注釋示例
- 代理人的信念基礎與用戶定義的文檔注釋(確定性程度)。
藍色(box1)[來源(ag1)]。
red(box1)[source(percept)].
colorblind(ag1)[source(self),doc(0.7)].
lier(ag1)[source(self),doc(0.2)]。
計劃注釋
- 計劃標簽也可以有注解(例如,指定元級別信息)–選擇函數(Java)可以在計劃/意圖選擇中使用這些信息–可以動態地改變這些注解(例如,更新優先級)。
- 注釋進入計劃標簽中
附加說明的計劃示例
@aPlan[
chance_of_success(0.3)。
通常_payoff(0.9)。
any_other_property]
+!g(X)
:c(t)
<- a(X).
強烈否定
- 操作符’~'用于強否定。
+!離開(家)
: 不下雨&不~下雨 <- open(curtains); …。
+!離開(家)
不下雨&不~下雨
<- .send(mum,askOne,raining); …
信念基礎規則
- 信念庫中類似Prolog的規則
likely_color(Obj,C)
:- colour(Obj,C)[degOfCert(D1)]
而不是(
color(Obj,_)[degOfCert(D2)]。
& D2 > D1 )
而不是 ~colour(C,B)。
處理計劃失敗
- 語法上定義了目標刪除事件,但沒有語義。
- 我們用它們來做計劃失敗的處理機制(可能不是它們的目的)。
- 處理計劃失敗是非常重要的,因為代理處于動態環境中。
- 一種形式的 “應急計劃”,可能是為了在嘗試另一個計劃之前進行 “清理”。
應急計劃示例
- 要創建一個盲目致力于目標g的代理。
+! g : g <- true.
+!g : … <- … ?g.
…
-!g : true <- !g.
內部動作
- 與行動不同,內部行動不會改變環境。
- 作為代理推理周期的一部分,要執行的代碼。
- AgentSpeak是一種高級語言,用于代理的實際推理。
- 內部動作可用于優雅地調用遺留代碼。
內部動作(續
- 用戶定義的內部動作庫
lib_name.action_name(…) - 預定義的內部動作有一個空的庫名–用于通信的內部動作。
.send(r,ilf,pc)其中ilf∈{tell,untell,deliver,unachieve,
askOne,askAll,askHow,
告訴如何,不告訴如何}。
內部行動(續)
- 與BDI相關的內部動作的例子。
.desire(literal)
.打算(字面意思)
.drop_desires(literal)
.drop_intentions(literal) - 許多其他的可用來:打印、排序、列表/字符串操作、操作信念/注釋/計劃庫、創建代理、等待/生成事件等。
<- .drop_desires(at()).dip.get_coords(Rock, Coords);。
dip.get_coords(Rock, Coords);
dip.get_coords(Rock, Coords); !
examine(Rock).dip.get_coords(Rock, Coords); !
AgentSpeak X Prolog
- 有了Jason的擴展,很好的將理論和實踐推理分開了。
- BDI 弧形圖允許
- 長期目標
- 對動態環境中的變化做出反應–處理多個關注點(并發)。
- 在環境中行動和更高層次的分布式系統概念
- 與Java直接集成
MAS配置文件
- 定義多代理系統的簡單方法
MAS my_system {
基礎設施。玉石
環境。MyEnv
ExecuctionControl: …
agents: ag1; ag2; ag3;
}
MAS定義(續)
- 基礎設施選擇。集中式、Saci、Jade
- 輕松定義代理和環境運行的主機–如果文件名與代碼不同尋常
代理商。
ag1 at host1.dur.ac.uk;
agents: ag1 file1;
MAS定義(續
- 一個代理的多個實例
代理商:ag1 #10。 - 解釋器配置
代理商:ag1[conf=option]。 - 配置事件處理、感知頻率、系統消息、用戶自定義設置等。
代理商自定義
- 用戶可以自定義Agent類,定義選擇功能、溝通的社會關系、信念更新和修改。
- selectMessage() - selectEvent()
- selectOption()
- selectIntention() - socAcc()
- buf() - brf()
整體代理架構
- 用戶自定義AgentArch類,以改變代理與infrastrcuture的交互方式:感知、行動和溝通。
- 幫助在模擬測試和實際部署之間進行切換。
- 感知()-行動()
- sendMsg() - broadcast() - checkMail()
信仰基礎定制
- 邏輯信念庫可能不適合大型應用–Jason有一個與數據庫相結合的替代信念庫。
- 用戶可以創建其他自定義功能
- 添加()
- 移除()
- 包含()
- getRelevant()
定制的MAS
MAS Custom {
代理商。
a1 agentClass MyAg
agentArchClass MyAgArch
beliefBaseClass Jason.bb.JDBCPersistentBB(
“org.sqldb.jdbcDriver”。
“jdbc:sqldb:bookstore”。
…
“[count_exec(1,tablece)]”)。
}
環境
- 在實際部署中,通常會有一個環境,在這個環境中,代理們的位置是
- 正如前面所討論的那樣,AgentArchitecture需要被定制化,以獲得對這種環境的感知和行動。
- 我們經常需要一個模擬環境(例如,測試MAS應用)。
- 這是在Java中通過擴展Jason的Environment類并使用addPercept(String Agent, Literal Percept)等方法來實現的。
Jason for jEdit
杰森的思想檢查員
Jason是GNU LGPL下的開源軟件,網址是。
http://jason.sf.net
(由SourceForge提供)
杰森
古斯塔夫-莫羅(1865年)
油畫,204 x 115.5厘米。巴黎奧賽博物館。
? 照片RMN。攝影:Hervé Lewandowski。
多代理系統編程
在AgentSpeak中使用Jason
Rafael H. Bordini Jomi Fred Hübner Michael Wooldridge
使用AgentSpeak進行BDI代理編程
Michael Wooldridge
(mjw@liv.ac.uk)
什么是AgentSpeak?
- 一個簡單而強大的編程語言,用于構建Ra#onal代理。
- 基于信念-欲望-意向范式–知識遺產。
- 程序性推理系統(PRS)----1980年代末在SRI開發的
- 邏輯編程/Prolog
什么是Jason?
-
AgentSpeak的一個實施方案
-
一個AgentSpeak系統的開發環境 - 用Java實現,有很多調用Java代碼的鉤子 - 附帶庫和調試工具。
-
迅速 “啟動和運行”
AgentSpeak/PRS架構
信仰事件
計劃
譯員
意圖
Java動作代碼
電話
欲望
AgentSpeak控制循環
- 代理人收到事件,這些事件要么是
- 外在的(來自環境,來自感性數據)–內部產生的
- 試圖通過尋找匹配的計劃來處理事件。
- 與該事件相匹配的一組計劃是操作/愿望。
- 從它的愿望中選擇一個計劃來執行:成為它的盟友 – -- 一種意圖。
- 當它執行計劃時,可能會產生需要處理的新事件。
AgentSpeak架構。信念
- 在AgentSpeak中,信念代表了代理對其環境的信息。
- 它們被符號化地表示出來–一階邏輯的基本原子。
AgentSpeak架構。信念實例
打開(閥32)
父親(Tom, Michael) 父親(Lily, Michael) 朋友(Michael, John) at_location(Michael, gunne) on(blockA, blockB)
AgentSpeak架構。計劃
- 開發者離線編碼,提前–給代理提供有關信息。
- 如何應對事件
- 如何實現目標–計劃結構。
- 事件–背景–主體
AgentSpeak架構。計劃結構
觸發條件 :
觸發條件 : context <-
體。
AgentSpeak架構。計劃結構
- 觸發CondiJon
- 是計劃可以處理的事件
- 語境
- 定義了使用該計劃的條件。
- 身體
- 規定了如果選擇該計劃后應采取的行動。
AgentSpeak架構。事件
- ? +! P
- 新目標的實現 – -- “實現P”。
- ? -! P
- 丟球
-+?+B - 新信仰B
–?-B - 信仰下降
你好,世界
-?
在你的工作區設置一個名為 "hello_world "的空目錄。
-?
的 "新項目 "按鈕來完成。
創建一個新項目,名為hello_world
- ? ?
JEdit
Jason將創建一個模板MAS文件夾
模板MAS
/* 杰森項目**
MAS hello_world {
基礎設施。集中式
代理商。}
-
? ? ?
它說系統叫 “hello_world”,它說目前它不包含任何代理。
所以,讓我們增加一些代理… …
這說明了什么? -
? ? ?
使用 "在項目中添加代理 "按鈕,給它取名 “hello”
同樣,Jason會制作一個帶有 "hello world "代理的模板,在
-?
添加代理
如果沒有,請輸入這個。
Hello World代理
// 在項目hello_world.mas2j中,代理hello。
/* 最初的信念和規則 /
初步目標
!“開始”。
/ 計劃
+!start : true <- .print(“hello world.”).
- ? ?
-?
-?
感嘆號說 “這是一個目標”
關于 "你好世界 "代理
-?
這個目標在代理啟動時就會出現
代理人只有一個初始目標: !“開始”。
有一個單一的計劃,它說 "如果你已經獲得了目標 “開始”,然后打印 “你好,世界”
按 "播放 "按鈕運行系統。
運行和調試
-?
- ? ?
-? - 恭喜你
一個控制臺將打開,它將顯示所有代理的輸出。
-?
[你好]你好,世界。
應該會顯示。
按控制臺上的 "debug "按鈕,可以看到代理的腦袋里。 。 。
注意您必須在jEdit控制臺中明確地停止系統。
-?
計劃 一個計劃的形式是
- 意思
triggering_event : context <- body
-?
如果你看到這個 “觸發事件”
并相信 "上下文 "是真的,那么你就可以執行 “body” - ? ? ?
-?
創建一個新的項目 “factorial1”,單一代理 “factorial1”
一個更復雜的例子
代理人 “factorial1”
fact(0,1).
+fact(X,Y) : X<5
<- +fact(X+1, (X+1)*Y).
+fact(X,Y)
: X==5
<- .print("fact 5 == ", Y).
-?
最初的信念是 “0的階乘是1”
最初的信念
第一條規則
+fact(X,Y) : X<5
<- +fact(X+1, (X+1)*Y).
-?
如果你獲得了X的階乘是Y,X小于5的信念,那么再加上X+1的階乘是(X+1)*Y的信念。
第二條規則
+事實(X,Y)
: X5
<- .print("fact 5 == ", Y).
-?
如果你獲得了X的階乘是Y,并且X5的信念,那么打印 “事實…”
-?
不要用"=",因為它的含義不同
-?
注意"=="的使用。
-?
運行程序,探尋代理商的心路歷程
代理人的內心
事實(5,120)[來源(self)].事實(4,24)[來源(self)].事實(3,6)[來源(self)].事實(2,2)[來源(self)].事實(1,1)[來源(self)].事實(0,1)[來源(self)].
- 這里是代理積累的所有信念。
- source(self)]是一個注解,表示信念的來源…。
- 我們將很快看到如何使用這些
-?
修改代理,使中間結果在生成時打印出來。
一個小小的修改
內部行動
-?
.print(…)是一個內部動作其他內部動作。
-?
.stopMAS() – 停止系統運行。
-
? ? ? ?
.time(H,M,S) – 將時間放入變量H,M,S中。
.wait(X) – 暫停X毫秒。
.random(X) – 將隨機值放入X中(0 <= X <= 1) -
? ?
修改你的解決方案,使打印值后,系統暫停3秒,然后終止。
你應該看到控制臺顯示3秒后消失…
進一步的修改 -
? ? ?
數據驅動的解決方案 請注意,我們開發的解決方案是數據驅動的/。
事件驅動
就是一個局部解的到來,會引起另一個局部解的產生…。
我們也可以把目標驅動解看成是
-?
系數2
創建一個新項目 “factorial2”,并在其中創建一個單一的代理 “factorial2”
!“print_fact(5)”。
+!print_fact(N)
<- !“fact(N,F)”;
.print("",N,“的系數是”,F)。
+!fact(N,1) : N == 0.
+!fact(N,F) : N > 0。
<- !"fact(N-1,F1)。
F = F1 * N.
-?
系數2
這里,代理的目標只有一個,就是打印5的階乘。
-?
首先計算N的階乘
-?
-?
-?
然后打印出來
第一條規則是說,如果你把這個作為目標,那么
第二條和第三條規則說的是如何計算N的階乘。
- ? ?
-?
一個經紀人太無聊了!那就多加幾個吧!
我們會有一個會計算階乘的代理 還有一個不會計算階乘的代理
溝通
專家會接受白癡的詢問,并對其進行回復。
-?
-?
通信的基本機制是.send(…)動作。
.send(rcvr, type, content)
.send(…)動作
導致向名為 "rcvr "的代理發送消息,消息類型為 “type”,內容為 “content”。
-?
例子
-?
這將導致代理mjw添加信念事實(3,6)
.send(mjw, tell, fact(3,6))
-?
導致+!go(10,10)被添加為mjw的事件。
-?
.send(mjw, achieve, go(10,10))
-?
事實上,它比這更復雜:接收者用源頭注釋
-?
創建一個新的項目,“factorial3”,有兩個代理:白癡和專家。
客戶機-服務器
白癡特工
// 項目factorial3.mas2j中的白癡代理。
初步目標
!“開始”。
/* 計劃
+!start : true
<- .print(“starting…”);
!"query_factorial(2);
query_factorial(4); !query_factorial(6); !
query_factorial(6); !query_factorial(10);
!“query_factorial(10)”。
+!query_factorial(X) : true <-!
.send(expert,tell,giveme(X)).
+fact(X,Y) : true <–。
.print(“因子”,X,“是”,Y,“謝謝專家”)。
- ? ?
-?
一旦得到X的階乘的回復,就會等待2秒,然后詢問X+1的階乘。
另一種修改
-?
先求0的階乘
修改白癡代理,使其。
你必須在它運行時殺死它,并運行…
總結
以上是生活随笔為你收集整理的利物浦大学comp313课程第一节课的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r shiny app的学习和使用,这个
- 下一篇: a16z