- 多智能體技術(shù)及應(yīng)用
- 趙春曉 魏楚元
- 3908字
- 2023-01-30 20:00:06
1.6 人工智能編程語言
人工智能(AI)語言是一類適應(yīng)于人工智能和知識工程領(lǐng)域的、具有符號處理和邏輯推理能力的計算機(jī)程序設(shè)計語言。能夠用它來編寫程序求解非數(shù)值計算、知識處理、推理、規(guī)劃、決策等具有智能的各種復(fù)雜問題。
1.幾種人工智能編程語言
人工智能是一個很廣闊的領(lǐng)域,很多編程語言都可以用于人工智能開發(fā),所以很難說人工智能必須用哪一種語言來開發(fā)。選擇多也意味著會有優(yōu)劣之分,并不是每種編程語言都能夠?yàn)殚_發(fā)人員節(jié)省時間及精力。在人工智能的研究發(fā)展過程中,從一開始就注意到了人工智能語言問題。實(shí)際上60年來有一百來種人工智能語言先后出現(xiàn)過,但很多都被淘汰了。現(xiàn)在典型的人工智能語言主要有LISP、Prolog、Smalltalk、Java、Python,還有多智能體編程語言Netlogo、Swarm、Repast、MASON、Any Logic等。
(1)LISP
1958年,John McCarthy設(shè)計了LISP語言。語言格式只有一個形式:列表,所以也稱為表處理語言,這不是一般的表,是可以包容任意結(jié)構(gòu)的表,有了它,完全不用C語言來寫鏈表,二叉樹的程序,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)不妨使用LISP,讓你更加關(guān)心算法、而不是數(shù)據(jù)如何在計算機(jī)內(nèi)部表達(dá)。列表是LISP的精華之一。LISP語言是為處理人工智能中大量出現(xiàn)符號編程問題而設(shè)計的,它的理論基礎(chǔ)是符號集上的遞歸函數(shù)論。已經(jīng)證明,用LISP可以編出符號集上的任何可計算函數(shù)。
(2)Prolog
Prolog語言是人工智能領(lǐng)域常用的語言,開發(fā)自然語言分析,專家系統(tǒng),以及所有和智能有關(guān)的程序。Prolog語言是為處理人工智能中也是大量出現(xiàn)的邏輯推理問題(首先是為解決自然語言理解問題)而設(shè)計的。它的理論基礎(chǔ)是一階謂詞演算(首先是它子集Horn子句演算)的消解法定理證明,其計算能力等價于LISP。
(3)Python
Python是一種解釋型、交互式、面向?qū)ο蟮恼Z言,由于簡單易用,是人工智能領(lǐng)域中使用最廣泛的編程語言之一,它可以無縫地與數(shù)據(jù)結(jié)構(gòu)和其他常用的人工智能算法一起使用。
Python采用動態(tài)數(shù)據(jù)結(jié)構(gòu),也就是說變量沒有數(shù)據(jù)類型,這一點(diǎn)和LISP十分相似,在python中所有事物都是對象(object),字符串、函數(shù)以至于類和模塊。Python之所以適合人工智能項(xiàng)目,也是基于Python的很多有用的模塊庫都可以在人工智能中使用,如Numpy提供科學(xué)的計算能力,Scypy的高級計算和Pybrain的機(jī)器學(xué)習(xí)。另外,Python有大量的在線資源,所以學(xué)習(xí)曲線也不會特別陡峭。
(4)Java
Java也是人工智能項(xiàng)目的一個很好的選擇。它是一種面向?qū)ο蟮木幊陶Z言,專注于提供人工智能項(xiàng)目上所需的所有高級功能,它是可移植的,并且提供了內(nèi)置的垃圾回收。另外,完善豐富的Java社區(qū)生態(tài)可以幫助開發(fā)人員隨時隨地查詢和解決遇到的問題。
對于人工智能項(xiàng)目來說,算法幾乎是靈魂,無論是搜索算法、自然語言處理算法還是神經(jīng)網(wǎng)絡(luò),Java都可以提供一種簡單的編碼算法。另外,Java的擴(kuò)展性也是人工智能項(xiàng)目必備的功能之一。
(5)基于多智能體編程
近年來出現(xiàn)了具有人工智能特色基于多智能體的程序設(shè)計,基于多智能體(Multi-Agent System)程序設(shè)計。本書主要采用了這種方法。
基于智能體的模型通常用編程語言實(shí)現(xiàn),并使用計算機(jī)模擬進(jìn)行探索。目前應(yīng)用得比較多的基于Agent的模擬平臺有Netlogo、Swarm、Repast、MASON、Any Logic等,通過對各個軟件進(jìn)行比較,本書選擇Netlogo軟件作為模擬仿真平臺。Netlogo是一個多智能體可編程建模環(huán)境(更多信息和下載方法請參見https://ccl.northwestern.edu/Netlogo/)。Netlogo被廣泛用于向幾乎沒有編程經(jīng)驗(yàn)的學(xué)生教授模擬和建模。目前的最新版本為Netlogo 6.1.0。
2.Netlogo介紹
Netlogo編程特點(diǎn):
1)軟件環(huán)境兼容性好:Netlogo運(yùn)行在Java虛擬機(jī)上,所以它可以運(yùn)行在所有主要平臺上(Mac、Windows、Linux等)。它作為桌面應(yīng)用程序運(yùn)行,還支持命令行操作。
2)編程語言結(jié)構(gòu)簡單:logo語言非常接近自然語言(英語),學(xué)習(xí)起來最為簡單,對于缺乏編程學(xué)習(xí)背景的研究者最為友好;Netlogo也遵循Logo易用性的理念,為新用戶提供“低門檻”的入口。Netlogo允許用戶打開模擬并與他們“交互”,探索他們在各種條件下的行為。Netlogo也是一個非常簡單的創(chuàng)作環(huán)境,學(xué)生和研究人員可以創(chuàng)建自己的模型,即使他們不是專業(yè)的程序員。
3)多智能個體和并發(fā)性:Netlogo源于并行LISP,是一種多智能體的編程語言和模擬自然和社會現(xiàn)象的建模環(huán)境。它特別適合于建模隨時間發(fā)展的復(fù)雜系統(tǒng)。建模人員可以向數(shù)百或數(shù)千個獨(dú)立的“智能體”發(fā)出指令,這些“智能體”都可以同時運(yùn)行,因此,Netlogo建模能很好地模擬微觀個體的行為和宏觀模式的涌現(xiàn)及其兩者之間的聯(lián)系。
4)Netlogo可以與其他應(yīng)用程序交換數(shù)據(jù):該語言包含允許讀寫任何類型文本文件的命令。還有以標(biāo)準(zhǔn)格式導(dǎo)出和導(dǎo)入數(shù)據(jù)的功能。世界的完整狀態(tài)可以以一種易于使用其他軟件打開和分析的格式保存和恢復(fù)。圖形化數(shù)據(jù)可以導(dǎo)出,以便使用其他工具進(jìn)行呈現(xiàn)和分析。圖形窗口或模型整個界面的內(nèi)容可以保存為圖像??梢允褂脴?biāo)準(zhǔn)實(shí)用程序?qū)D像轉(zhuǎn)換為電影。完成的模型可以作為Java Applet在Web上發(fā)布。
3.Netlogo的主要功能
(1)建模
Netlogo模型的基本假設(shè)是:將空間劃分為網(wǎng)格,每個網(wǎng)格是一個靜態(tài)的Agent,多個移動Agent分布在二維空間中,每個Agent自主行動,所有主體并行異步更新,整個系統(tǒng)隨著時間推進(jìn)而動態(tài)變化。
(2)模擬運(yùn)行控制
Netlogo可以采用命令行方式或通過可視化控件進(jìn)行模擬控制。在命令行窗口可以直接輸入命令,另外還提供了可視化控件實(shí)現(xiàn)模擬運(yùn)行控制,進(jìn)行模擬初始化、啟動、停止、調(diào)整模擬運(yùn)行速度等。還提供了一組控件,如開關(guān)、滑動條、選擇器等,用來修改模型中的全局變量,實(shí)現(xiàn)模擬參數(shù)的修改。
(3)可視化顯示
軟件提供了二維和三維的模擬視圖,用戶可以隨時、多角度觀看模擬過程。提供了多種手段實(shí)現(xiàn)模擬運(yùn)行監(jiān)視和結(jié)果輸出。在主界面中有一個視圖(View)區(qū)域顯示整個空間上所有Agent的動態(tài)變化,可以進(jìn)行2D/3D顯示,在3D視圖中可以進(jìn)行平移、旋轉(zhuǎn)、縮放等操作。另外可以對模型中的任何變量、表達(dá)式進(jìn)行監(jiān)視,可以實(shí)現(xiàn)曲線/直方圖等圖形輸出或?qū)⒆兞繉懭霐?shù)據(jù)文件。
(4)實(shí)驗(yàn)管理模擬
Netlogo提供了一個實(shí)驗(yàn)管理工具BahaviorSpace,通過設(shè)定模擬參數(shù)的變化范圍、步長、設(shè)定輸出數(shù)據(jù)等,實(shí)現(xiàn)對參數(shù)空間的抽樣或窮舉,自動管理模擬運(yùn)行,并記錄結(jié)果。
(5)系統(tǒng)動力學(xué)模擬
系統(tǒng)動力學(xué)是應(yīng)用廣泛的一類社會經(jīng)濟(jì)系統(tǒng)模擬方法,但與多主體模擬有不同的建模思想。Netlogo可以直接進(jìn)行系統(tǒng)動力學(xué)建模仿真。
(6)參與式模擬
Netlogo提供了一個分布式模擬工具,稱為HubNet,實(shí)現(xiàn)模型服務(wù)器和客戶端之間的通信。多個參與者可以通過計算機(jī)或計算器分別控制模擬系統(tǒng)的一部分,實(shí)現(xiàn)參與式模擬(participatory simulation)。
(7)模型庫
Netlogo收集了許多復(fù)雜系統(tǒng)經(jīng)典模型,涵蓋數(shù)學(xué)、物理、化學(xué)、生物、計算機(jī)、經(jīng)濟(jì)、社會等許多領(lǐng)域。這些模型可以直接運(yùn)行,例子中的文檔對模型進(jìn)行了解釋、為可能的擴(kuò)展提供了建議。建模人員可以通過閱讀經(jīng)典實(shí)例的程序代碼,學(xué)習(xí)建模技術(shù),或在研究相關(guān)問題時以此為基礎(chǔ)進(jìn)行擴(kuò)展或修改,大大減少了技術(shù)難度和工作量。
快速了解Netlogo到底建模是什么樣的,你可以打開它自帶的模型庫,可以看到會有很多自帶模型:樣例模型(Sample Model)、課程模型(Curricular Model)、代碼示例(Code Example)和參與者模擬(Hubnet Activities)。
開始使用Netlogo的用戶通常首先要瀏覽Netlogo的模型庫。這個集合有超過140個預(yù)構(gòu)建的模擬,可以進(jìn)行探索和修改。這些模擬涉及自然科學(xué)和社會科學(xué)的許多內(nèi)容領(lǐng)域,包括生物和醫(yī)學(xué)、物理和化學(xué)、數(shù)學(xué)和計算機(jī)科學(xué)以及經(jīng)濟(jì)學(xué)和社會心理學(xué)。Netlogo正被用于構(gòu)建各種各樣的模擬。海龜可以代表分子、狼、買家、賣家、蜜蜂、部落成員、鳥類、蠕蟲、選民、乘客、金屬、細(xì)菌、汽車、機(jī)器人、中子、磁鐵、行星、牧羊人、戀人、螞蟻、肌肉、網(wǎng)絡(luò)工作者等等。小塊的土地被制成樹木、墻壁、地形、水道、洞穴、植物細(xì)胞、癌細(xì)胞、農(nóng)田、天空、課桌、毛皮、沙子,應(yīng)有盡有。海龜和地塊也可以用來形象化和研究數(shù)學(xué)抽象,或者用來制作藝術(shù)品和玩游戲。主題包括細(xì)胞自動機(jī)、遺傳算法、正負(fù)反饋、進(jìn)化和遺傳漂變、種群動力學(xué)、尋路和優(yōu)化、網(wǎng)絡(luò)、市場、混沌、自組織、人工社會和人工生命。這些模型都分享了我們關(guān)于復(fù)雜系統(tǒng)和涌現(xiàn)的核心主題。
(8)Netlogo最強(qiáng)大的一個方面是擴(kuò)展功能
主要包括:
1)通過與其他語言(如python和r)集成來擴(kuò)展其功能的能力;
2)地理信息系統(tǒng)(GIS extension)的擴(kuò)展,它允許矢量和柵格數(shù)據(jù)直接集成到Netlogo環(huán)境中;
3)位圖擴(kuò)展(Bitmap Extension)允許您操作并將圖像導(dǎo)入到繪圖和地塊中。它提供了Netlogo核心原語沒有提供的功能,例如:縮放、對不同顏色通道的操作、寬度和高度報告器;
4)水平空間擴(kuò)展(LevelSpace),模型將能夠使用LevelSpace原語加載其他模型,在其中運(yùn)行命令和報告程序,并在不再需要它們時關(guān)閉它們;
5)矩陣擴(kuò)展為Netlogo添加了一個新的矩陣數(shù)據(jù)結(jié)構(gòu)。矩陣是一個只包含數(shù)字的可變二維數(shù)組;
6)CSV擴(kuò)展可以在Netlogo中使用CSV格式的數(shù)據(jù);
7)table擴(kuò)展可以在Netlogo中使用表格中的數(shù)據(jù)。
(9)模型運(yùn)行后可以導(dǎo)出數(shù)據(jù),為難獲取數(shù)據(jù)場景提供了可選擇方案
例如:
1)導(dǎo)出世界——保存所有變量、所有海龜和地塊的當(dāng)前狀態(tài)、繪圖、輸出區(qū)域和隨機(jī)狀態(tài)信息到一個文件;
2)導(dǎo)出繪圖——將繪圖中的數(shù)據(jù)保存到文件中;
3)導(dǎo)出視圖——保存當(dāng)前視圖的圖片(2D或3D)到一個文件中(PNG格式)。
(10)可以導(dǎo)入數(shù)據(jù),為Netlogo提供數(shù)據(jù),例如:
1)導(dǎo)入世界——加載導(dǎo)出世界保存的文件;
2)導(dǎo)入地塊顏色——將圖像加載到地塊中;
3)導(dǎo)入地塊顏色RGB——使用RGB顏色將圖像加載到地塊中;
4)導(dǎo)入繪圖——將圖像加載到繪圖中。
4.人工智能語言特點(diǎn)
由于人工智能研究的問題的特點(diǎn)和解決問題的方法的特殊性,為了能方便而有效地建立人工智能系統(tǒng),需要發(fā)展專門的人工智能語言。人工智能語言的特點(diǎn)是什么,亦即人工智能語言應(yīng)具備的特征是什么?
一般來說,人工智能語言應(yīng)具備如下特點(diǎn):
1)要有符號處理能力(即非數(shù)值處理能力);
2)適合于結(jié)構(gòu)化程序設(shè)計,編程容易(要把系統(tǒng)分解成若干易于理解和處理的小單位的能力,從而既能較為容易地改變系統(tǒng)的某一部分,而又不破壞整個系統(tǒng));
3)要有遞歸功能和回溯功能;
4)要有人機(jī)交互能力;
5)適合于推理;
6)要有把過程與說明式數(shù)據(jù)結(jié)構(gòu)混合起來的能力,又要有辨別數(shù)據(jù)、確定控制的模式匹配機(jī)制。
- Python人工智能
- 智能控制與強(qiáng)化學(xué)習(xí):先進(jìn)值迭代評判設(shè)計
- 21世紀(jì)機(jī)器人
- 一本書讀懂ChatGPT、AIGC和元宇宙
- COMSOL Multiphysics工程實(shí)踐與理論仿真
- TensorFlow移動端機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
- 機(jī)器學(xué)習(xí)實(shí)戰(zhàn):模型構(gòu)建與應(yīng)用
- 從零構(gòu)建大模型
- Mahout算法解析與案例實(shí)戰(zhàn)
- 人工智能視域下機(jī)器學(xué)習(xí)在教育研究中的應(yīng)用
- 自動調(diào)節(jié)系統(tǒng)解析與PID整定
- RPA智能機(jī)器人:實(shí)施方法和行業(yè)解決方案
- 增強(qiáng)型分析:人工智能技術(shù)驅(qū)動的數(shù)據(jù)分析、業(yè)務(wù)決策與案例實(shí)踐
- 洞察AIGC:智能創(chuàng)作的應(yīng)用、機(jī)遇與挑戰(zhàn)
- 移動機(jī)器人自主控制