一个AI设计的思考过程(旧文)
?
記得小時候用LOGO語言做過一些讓小海龜在屏幕上畫圖的程序,當時覺得那很簡單,也很自然,就幾條簡單的指令就可以讓它畫出不可思議的復雜圖形來。當時我是不知道在這語言的背后是一個多么復雜的系統,只是用這簡單的控制語句就可以畫出圖形來。
上面說明了一個問題要想很好的操作一個對象就的制定一個很好的通用語言。程序中的程序,也就是說最好應該有個虛擬機來運行智能控制語言。在AI控制層上我們不能去直接寫底層代碼,那會使問題變得復雜萬分,涉及太多的細節,而無法寫出漂亮的AI表現。
目標1:建立一個腳本程序用來間接控制對象。
關于AI底層功能的需求,大概分為:環境知識,組隊效果,攻擊能力,生存本能。
環境知識,是一個AI體應該懂得根據周圍的環境獲得有用的信息來影響思考。
組隊效果,是要在大局上的AI處理,AI體能夠根據其他的活動單位影響思考。
攻擊能力,是AI體能根據自身的各種能力,攻擊,移動,能夠做的動作和行為來影響思考。
生存本能,如何達成目標,自己如何失敗,必須有目標,才能有意義。
關鍵問題:我打算從一些關鍵字來說明我的看法。
環境信息;
目標;
行為;
任務;
思考核心在于目標,有了目標,就會根據環境信息下達任務驅動行為。
//?環境類,包含所有AI需要的信息,可能跟靈活的方法是根本不定義,
//?直接從游戲中取出,放在這里只是說明有這樣一個虛構的事物,說明包括一
//?個環境。
class?CEnvironment
{
public:
????int?m_iSomething;
????any?m_aSomething;
????ref?m_rSomething;
};
//?游戲中的將要由AI控制的對象
class?IObject
{
};
//?游戲中有行為的對象
class?IActionObject?:?public?IObject
{
};
//?游戲中要求AI控制的對象
class?ITaskRunnerObject?:?public?IActionObject
{
????virtual?OnReciveAITask(?void*?pTask?)=0;
};
//?AI對象,我命名為AIWorker,因為AI我的感覺就像是管理行為的工作者。
interface?IAIWorker?:?public?IUnknown
{
????virtual?HRESULT?QueryInterface(?IID?iid,?LPVOID*?lpWorker?);
}
//?AI實際對象,在游戲中有很多個AI對象,他們按照DoScript里的腳本完成
//思考,并下發任務。
class?CAIWorker
{
public:
????void?IntentThinking()
????{
????????//分析環境
????????//分析目標
????????//分析任務
????????//?整個這部分準備提出AI語言,DoScript();
????}
????void?ProcessTask()
????{
????????m_pIntro->OnReciveAITalk(m_TaskList.pop());
????}
protected:
????LeadupList?m_GoalList;
????LeadupList?m_TaskList;
????CEnvironment?env;
????ITaskRunnerObject?*m_pItro;
};
轉載于:https://www.cnblogs.com/Anima64/archive/2007/01/13/619485.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的一个AI设计的思考过程(旧文)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP实现多服务器session共享之N
- 下一篇: C#中类的继承问题04