1. 程式人生 > >人工智能專家系統的簡單實現

人工智能專家系統的簡單實現

經驗 || 二進制 mat rul col term text info

經過一段時間的學習。最終對專家系統有了一定的認識,在此發表一下個人的見解,希望和大家一起交流學習。

專家系統,通俗的講。就是讓計算機具有人類專家的知識、經驗和技能,可以像人類專家一樣解決實際問題。專家系統實質上是一段計算機程序,它可以以人類專家的水平完畢某一專業領域的任務。

通過計算機。模擬人類專家怎樣運用他們的知識和經驗解決面臨問題的方法、技巧和步驟。


基本系統結構(通常由人機交互界面、知識庫、綜合數據庫、推理機、解釋器、知識獲取等6個部分構成):

技術分享

以下是一個簡單的動物識別的專家系統設計(簡單推斷蛇、蜥蜴、雞、貓四種動物):

1. 實現流程:

1) 初始化規則集合

2) 初始化規則事實集合

3) 使用規則推導

2. 加入規則信息:

”冷血”,”有腿”,”羽毛”,”會飛”

3. 規則事實:

冷血+沒有腿 -> 蛇

冷血+有腿 -> 蜥蜴

非冷血+有羽毛+不會飛 -> 雞

非冷血+沒有羽毛 -> 貓

4. 推理過程:

技術分享

部分代碼:

#define Chicken 0x02	//雞		0010
#define Cat     0x00	//貓		0000
#define Snake   0x01	//蛇		0001
#define Lizard  0x05	//蜥蜴	0101

4位二進制位分別表示:能飛、有腿、有羽毛、冷血,匹配上則為1,否則為0 數據結構定義
typedef struct Rule
{
	char *info;		//規則信息
	Rule *pYes;		//匹配到的下一個規則
	Rule *pNo;		//未匹配到的下一個規則
	int pos;		//該規則的位置
}Rule;

unsigned char result = 0;

推導函數

void MatchRules(char *s, Rule *match)
{
	if(!s || !match)
		return;
	//規則是否匹配上
	if(CheckRule(s, match->info) > 0)
	{
		//記錄位置
		result += 1 << match->pos;
		MatchRules(s, match->pYes)
	}
	else
	{
		//未匹配上
		MatchRules(s, match->pNo);
	}
}

推斷result。得出結論

switch (result)
	{
	case Chicken:
		printf("雞!");	
		break;
	case Cat:
		printf("貓!");
		break;
	case Snake:
		printf("蛇。");
		break;
	case Lizard:
		printf("蜥蜴!");
		break;
	default:
		printf("其它!");
		break;
	}

以上僅僅包括簡單規則(4種動物推斷,和4條規則),想要功能更完好。我們還能夠加入很多其它精確的規則和事實。

人工智能專家系統的簡單實現