欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      人工智能_實驗報告

      時間:2019-05-13 03:56:26下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《人工智能_實驗報告》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《人工智能_實驗報告》。

      第一篇:人工智能_實驗報告

      實驗一:知識表示方法

      一、實驗?zāi)康?/p>

      狀態(tài)空間表示法是人工智能領(lǐng)域最基本的知識表示方法之一,也是進(jìn)一步學(xué)習(xí)狀態(tài)空間搜索策略的基礎(chǔ),本實驗通過牧師與野人渡河的問題,強化學(xué)生對知識表示的了解和應(yīng)用,為人工智能后續(xù)環(huán)節(jié)的課程奠定基礎(chǔ)。

      二、問題描述

      有n個牧師和n個野人準(zhǔn)備渡河,但只有一條能容納c個人的小船,為了防止野人侵犯牧師,要求無論在何處,牧師的人數(shù)不得少于野人的人數(shù)(除非牧師人數(shù)為0),且假定野人與牧師都會劃船,試設(shè)計一個算法,確定他們能否渡過河去,若能,則給出小船來回次數(shù)最少的最佳方案。

      三、基本要求

      輸入:牧師人數(shù)(即野人人數(shù)):n;小船一次最多載人量:c。

      輸出:若問題無解,則顯示Failed,否則,顯示Successed輸出一組最佳方案。用三元組(X1, X2, X3)表示渡河過程中的狀態(tài)。并用箭頭連接相鄰狀態(tài)以表示遷移過程:初始狀態(tài)->中間狀態(tài)->目標(biāo)狀態(tài)。

      例:當(dāng)輸入n=2,c=2時,輸出:221->110->211->010->021->000 其中:X1表示起始岸上的牧師人數(shù);X2表示起始岸上的野人人數(shù);X3表示小船現(xiàn)在位置(1表示起始岸,0表示目的岸)。

      要求:寫出算法的設(shè)計思想和源程序,并以圖形用戶界面實現(xiàn)人機交互,進(jìn)行輸入和輸出結(jié)果,如:

      Please input n: 2

      Please input c: 2 Successed or Failed?: Successed Optimal Procedure: 221->110->211->010->021->000

      四、實驗組織運行要求

      本實驗采用集中授課形式,每個同學(xué)獨立完成上述實驗要求。

      五、實驗條件

      每人一臺計算機獨立完成實驗。

      六、實驗代碼

      Main.cpp #include #include “RiverCrossing.h” using namespace std;

      //主函數(shù) void main(){

      } system(“pause”);RiverCrossing riverCrossing(n, c);riverCrossing.solve();int n, c;cout<<“Please input n: ”;cin>>n;cout<<“Please input c: ”;cin>>c;RiverCrossing::ShowInfo();

      RiverCrossing.h #pragma once #include

      //船 class Boat { public:

      };

      //河岸狀態(tài) class State Boat(int pastor, int savage);static int c;int pastor;//牧師 int savage;//野人

      { public:

      };

      //過河問題

      class RiverCrossing { private:

      };bool move(State *nowState, Boat *boat);//進(jìn)行一次決策

      State* findInList(std::list &listToCheck, State &state);//檢查某狀態(tài)節(jié)void print(State *endState);//打印結(jié)果 static void ShowInfo();RiverCrossing(int n, int c);bool solve();//求解問題 std::list openList, closeList;State endState;State(int pastor, int savage, int boatAtSide);int getTotalCount();//獲得此岸總?cè)藬?shù) bool check();//檢查人數(shù)是否符合實際 bool isSafe();//檢查是否安全

      State operator +(Boat &boat);State operatorboat.pastor, iSavage1);ret.pPrevious = this;return ret;State ret(iPastor + boat.pastor, iSavage + boat.savage, iBoatAtSide + 1);ret.pPrevious = this;return ret;

      } openList.push_back(new State(State::n, State::n, 1));while(!openList.empty()){

      } print(NULL);return false;//獲取一個狀態(tài)為當(dāng)前狀態(tài)

      State *nowState = openList.front();openList.pop_front();closeList.push_back(nowState);//從當(dāng)前狀態(tài)開始決策

      if(nowState->iBoatAtSide == 1){//船在此岸

      } //過河的人越多越好,且野人優(yōu)先

      int count = nowState->getTotalCount();count =(Boat::c >= count ? count : Boat::c);for(int capticy = count;capticy >= 1;--capticy){

      } //把船開回來的人要最少,且牧師優(yōu)先

      for(int capticy = 1;capticy <= Boat::c;++capticy){

      } for(int i = 0;i <= capticy;++i){

      } Boat boat(capticyi);if(move(nowState, &boat))

      return true;} else if(nowState->iBoatAtSide == 0){//船在彼岸

      //實施一步?jīng)Q策,將得到的新狀態(tài)添加到列表,返回是否達(dá)到目標(biāo)狀態(tài) bool RiverCrossing::move(State *nowState, Boat *boat){

      //獲得下一個狀態(tài) State *destState;if(nowState->iBoatAtSide == 1){

      } destState = new State(*nowState1<iPastor<<“,”<

      iSavage<<“,”<

      iBoatAtSide;if(st.size()> 0)cout<<“-> ”;cout<

      cout<<“==”<

      七、實驗結(jié)果

      實驗二:九宮重排

      一、實驗?zāi)康?/p>

      A*算法是人工智能領(lǐng)域最重要的啟發(fā)式搜索算法之一,本實驗通過九宮重排問題,強化學(xué)生對A*算法的理解與應(yīng)用,為人工智能后續(xù)環(huán)節(jié)的課程奠定基礎(chǔ)。

      二、問題描述

      給定九宮格的初始狀態(tài),要求在有限步的操作內(nèi),使其轉(zhuǎn)化為目標(biāo)狀態(tài),且所得到的解是代價最小解(即移動的步數(shù)最少)。如:

      三、基本要求

      輸入:九宮格的初始狀態(tài)和目標(biāo)狀態(tài) 輸出:重排的過程,即途徑的狀態(tài)

      四、實驗組織運行要求

      本實驗采用集中授課形式,每個同學(xué)獨立完成上述實驗要求。

      五、實驗條件

      每人一臺計算機獨立完成實驗。

      六、實驗代碼

      Main.cpp #include #include “NineGrid.h” using namespace std;

      //主函數(shù) void main(){ NineGrid::ShowInfo();

      } string start, end;cout<<“Please input the initial state:(ex:134706582)”<>start;cout<<“Please input the target state:(ex:123804765)”<>end;NineGrid nineGrid(start, end);nineGrid.solve();system(“pause”);

      NineGrid.h #pragma once #include #include #include using namespace std;

      #define SPACE '0'

      #define AT(s, x, y)(s)[(x)* 3 +(y)]

      enum Move { };

      //九宮格狀態(tài) class State { public:

      int moves;//到此狀態(tài)的移動次數(shù) int value;//價值

      State *pPrevious;//前一個狀態(tài)

      State(string &grid, State *pPrevious = NULL);int getReversedCount();//獲取逆序數(shù) void evaluate();//評價函數(shù)

      bool check(Move move);//檢查是否可以移動 string grid;//用字符串保存當(dāng)前棋盤狀態(tài) int x, y;//空格所在位置 static State *pEndState;//指向目標(biāo)狀態(tài),用于評價h的值 UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3

      };State takeMove(Move move);//實施移動,生成子狀態(tài) //重載==運算符,判斷兩個狀態(tài)是否相等

      inline bool operator ==(State &state){ return grid == state.grid;} //九宮重排問題 class NineGrid { private:

      };

      NineGrid.cpp #include “NineGrid.h” #include #include #include using namespace std;

      State* State::pEndState = NULL;

      /*=======================Methods for class “State”=======================*/ //構(gòu)造函數(shù)

      State::State(string &grid, State *pPrevious){ this->grid = grid;NineGrid(string &start, string &dest);bool solve();//求解問題 //用于排序

      static bool greater_than(const State *state1, const State *state2);static void ShowInfo();//顯示信息 bool compareReversed();//比較逆序數(shù)奇偶性是否相同

      bool takeMove(State *nowState, Move move);//進(jìn)行一次決策

      State* findInList(vector &listToCheck, State &State);//檢查某狀態(tài)void print(State *endState);//打印結(jié)果 vector openList, closeList;State startState, endState;clock_t startTime;節(jié)點是否在列表中

      public:

      } this->pPrevious = pPrevious;if(this->pPrevious)this->moves = pPrevious->moves + 1;this->moves = 0;else

      this->value = 0;evaluate();for(int i = 0;i < 3;++i){

      } for(int j = 0;j < 3;++j){

      } if(AT(grid, i, j)== SPACE){

      } x = i;y = j;return;bool State::check(Move move){

      }

      State State::takeMove(Move move){ switch(move){ case UP:

      } return true;if(x1 < 0)return false;break;if(y + 1 >= 3)return false;break;case DOWN: case LEFT: case RIGHT:

      } int destX, destY;switch(move){ case UP:

      } string tGrid = grid;char t = AT(tGrid, destX, destY);AT(tGrid, destX, destY)= AT(tGrid, x, y);AT(tGrid, x, y)= t;return State(tGrid, this);destX = x1;break;destX = x;destY = y + 1;break;case DOWN: case LEFT: case RIGHT: void State::evaluate(){

      for(int ii = 0;ii < 3;++ii){

      for(int jj = 0;jj < 3;++jj){ if(AT(grid, i, j)== AT(pEndState->grid, ii, jj)){

      h += abs(ijj);int g = moves, h = 0;for(int i = 0;i < 3;++i){

      for(int j = 0;j < 3;++j){

      //if(AT(grid, i, j)!= AT(pEndState->grid, i, j))// ++h;

      if(AT(grid, i, j)== SPACE)continue;if(!pEndState)return;

      }

      }

      }

      } } } this->value = g + h;//求該狀態(tài)的逆序數(shù) //逆序數(shù)定義為:

      //

      不計空格,將棋盤按順序排列,//

      對于grid[i],存在jgrid[i],即為逆序。//

      所有棋子的逆序總數(shù)為逆序數(shù)。int State::getReversedCount(){

      }

      /*=====================Methods for class “NineGrid”=====================*/ //顯示信息

      void NineGrid::ShowInfo(){

      }

      //構(gòu)造函數(shù)

      NineGrid::NineGrid(string &start, string &dest): startState(start), endState(dest)cout<<“************************************************”<

      } return count;

      } if(grid[i] > grid[j])++count;int count = 0;for(int i = 0;i < 9;++i){

      if(grid[i] == SPACE)

      continue;if(grid[j] == SPACE)continue;for(int j = 0;j < i;++j){

      {

      }

      //當(dāng)初始狀態(tài)和目標(biāo)狀態(tài)的逆序數(shù)的奇偶性相同時,問題才有解 bool NineGrid::compareReversed(){ 2;}

      //解決問題

      bool NineGrid::solve(){

      }

      //實施一步?jīng)Q策,將得到的新狀態(tài)添加到列表,返回是否達(dá)到目標(biāo)狀態(tài)

      } print(NULL);return false;

      } //從當(dāng)前狀態(tài)開始決策

      for(int i = 0;i < 4;++i){

      } Move move =(Move)i;if(nowState->check(move)){

      } if(takeMove(nowState, move))

      return true;

      openList.push_back(new State(startState));while(!openList.empty()){

      //獲取一個狀態(tài)為當(dāng)前狀態(tài)

      State *nowState = openList.back();openList.pop_back();closeList.push_back(nowState);cout<<“==”<

      cout<<“初始狀態(tài)和目標(biāo)狀態(tài)的逆序數(shù)的奇偶性不同,問題無解!”<

      bool NineGrid::takeMove(State *nowState, Move move){

      }

      //檢查給定狀態(tài)是否存在于列表中

      State* NineGrid::findInList(vector &listToCheck, State &state){

      }

      //根據(jù)達(dá)到的目標(biāo)狀態(tài),回溯打印出求解過程 void NineGrid::print(State *endState){

      cout<<“Search successed!”<

      addSymptom(pDisease, strInput);} else { ioFile.close();return true;//添加一個疾病,返回此疾病信息的指針

      Disease* Expert::addDisease(const string &name){

      }

      //添加疾病的癥狀

      void Expert::addSymptom(Disease *disease,const string &symptom){ }

      //診斷函數(shù)

      void Expert::diagnosis(){

      cout<<“【癥狀詢問】”<請輸入癥狀:(或”不確定“以開始模糊搜索)”<>symptomInput;//用戶輸入的第一個癥狀 string symptomInput;//用戶有的癥狀和沒有的癥狀

      vector symptomHave, symptomNotHave;//搜索的結(jié)果列表

      vector findList;disease->symptomList.push_back(symptom);Disease disease;disease.name = name;m_DiseaseList.push_back(disease);return &m_DiseaseList.back();

      for(vector::iterator ite = findList.begin();ite!=

      bool remove = false;//是否從findList列表中排除本疾病

      for(unsigned int j = 0;j <(*ite)->symptomList.size();++j){

      Disease *pDisease = *ite;if(find(symptomNotHave.begin(), symptomNotHave.end(),//在symptomNotHave列表中找到此癥狀,直接排除 remove = true;break;findList.end();){ if(symptomInput == “不確定”){

      } //添加所有疾病到findList列表中

      for(unsigned int i = 0;i < m_DiseaseList.size();++i){ } //添加有此癥狀的疾病到findList列表中

      for(unsigned int i = 0;i < m_DiseaseList.size();++i){

      } //添加輸入的癥狀到symptomHave列表中 symptomHave.push_back(symptomInput);Disease *pDisease = &m_DiseaseList[i];for(unsigned int j = 0;j < pDisease->symptomList.size();++j){

      } if(symptomInput == pDisease->symptomList[j]){ } findList.push_back(pDisease);findList.push_back(&m_DiseaseList[i]);} else { pDisease->symptomList[j])!= symptomNotHave.end()){ } else if(find(symptomHave.begin(), symptomHave.end(),//在symptomHave,symptomNotHave列表中不存在這個癥狀,則詢問 if(optionSelect(“->是否有癥狀”“ + pDisease->symptomList[j] +

      } //詢問得知有此癥狀,添加癥狀到symptomHave列表中 symptomHave.push_back(pDisease->symptomList[j]);//詢問得知沒有此癥狀,添加癥狀到symptomNotHave列表中,并排除symptomNotHave.push_back(pDisease->symptomList[j]);remove = true;break;pDisease->symptomList[j])== symptomHave.end()){ ”“?n(y/n): ”)){ } else { 此疾病

      }

      } } } if(remove){

      } //需要排除此疾病

      ite = findList.erase(ite);//迭代器后移 ++ite;} else { cout<

      } cout<知識庫中未找到匹配的記錄!”<根據(jù)已有的知識庫,可能的疾病為:”<

      for(unsigned int i = 0;i < findList.size();++i){

      } cout<name;if(i!= findList.size()-1)cout<<“, ”;cout<

      bool Expert::optionSelect(const string &question){

      cout<>option;

      switch(option){ case 'Y': case 'y': return true;case 'N': case 'n': } return false;

      } return false;

      Disease.txt [疾病1] 癥狀A(yù) 癥狀B 癥狀C 癥狀D

      [疾病2] 癥狀A(yù) 癥狀B 癥狀C

      [疾病3] 癥狀A(yù) 癥狀B 癥狀D 癥狀E

      [疾病4] 癥狀A(yù) 癥狀C 癥狀D

      [疾病5] 癥狀B 癥狀C 癥狀D 癥狀E

      [疾病6] 癥狀A(yù) 癥狀B

      [疾病7] 癥狀A(yù) 癥狀C 癥狀E

      [疾病8] 癥狀A(yù) 癥狀D

      [疾病9] 癥狀B 癥狀C 癥狀E

      [疾病10] 癥狀B 癥狀D

      [疾病11] 癥狀C 癥狀D 癥狀E

      六、實驗結(jié)果

      第二篇:人工智能實驗報告

      人工智能課內(nèi)實驗報告

      (8次)

      學(xué) 院: 自動化學(xué)院

      班 級: 智能1501 姓 名: 劉少鵬(34)學(xué) 號: 06153034

      目 錄

      課內(nèi)實驗1:猴子摘香蕉問題的VC編程實現(xiàn)????????1 課內(nèi)實驗2:編程實現(xiàn)簡單動物識別系統(tǒng)的知識表示???5 課內(nèi)實驗3:盲目搜索求解8數(shù)碼問題?????????18 課內(nèi)實驗4:回溯算法求解四皇后問題?????????33 課內(nèi)實驗5:編程實現(xiàn)一字棋游戲???????????37 課內(nèi)實驗6:字句集消解實驗?????????????46 課內(nèi)實驗7:簡單動物識別系統(tǒng)的產(chǎn)生式推理??????66 課內(nèi)實驗8:編程實現(xiàn)D-S證據(jù)推理算法????????78

      人工智能課內(nèi)實驗報告

      實驗1:猴子摘香蕉問題的VC編程實現(xiàn)

      學(xué) 院: 自動化學(xué)院 班 級: 智能1501 姓 名: 劉少鵬(33)學(xué) 號: 06153034 日 期: 2017-3-8 10:15-12:00

      實驗1:猴子摘香蕉問題的VC編程實現(xiàn)

      一、實驗?zāi)康?/p>

      (1)熟悉謂詞邏輯表示法;

      (2)掌握人工智能謂詞邏輯中的經(jīng)典例子——猴子摘香蕉問題的編程實現(xiàn)。

      二、編程環(huán)境 VC語言

      三、問題描述

      房子里有一只猴子(即機器人),位于a處。在c處上方的天花板上有一串香蕉,猴子想吃,但摘不到。房間的b處還有一個箱子,如果猴子站到箱子上,就可以摸著天花板。如圖1所示,對于上述問題,可以通過謂詞邏輯表示法來描述知識。要求通過VC語言編程實現(xiàn)猴子摘香蕉問題的求解過程。

      圖1 猴子摘香蕉問題

      四、源代碼

      #include unsigned int i;void Monkey_Go_Box(unsigned char x, unsigned char y){

      printf(“Step %d:monkey從%c走到%cn”, ++i, x, y);//x表示猴子的位置,y為箱子的} void Monkey_Move_Box(char x, char y){ 位置

      printf(“Step %d:monkey把箱子從%c運到%cn”, ++i, x, y);//x表示箱子的位置,y為} void Monkey_On_Box(){ 香蕉的位置

      printf(“Step %d:monkey爬上箱子n”, ++i);} void Monkey_Get_Banana(){ printf(“Step %d:monkey摘到香蕉n”, ++i);} void main(){

      unsigned char Monkey, Box, Banana;printf(“********智能1501班**********n”);printf(“********06153034************n”);printf(“********劉少鵬**************n”);printf(“請用a b c來表示猴子箱子香蕉的位置n”);printf(“Monkeytboxtbananan”);scanf(“%c”, &Monkey);getchar();printf(“t”);scanf(“%c”, &Box);getchar();printf(“tt”);scanf(“%c”, &Banana);getchar();printf(“n操作步驟如下n”);if(Monkey!= Box){ Monkey_Go_Box(Monkey, Box);} if(Box!= Banana){ Monkey_Move_Box(Box, Banana);} Monkey_On_Box();Monkey_Get_Banana();printf(“n”);

      getchar();}

      五、實驗結(jié)果相關(guān)截圖

      六、心得體會

      通過本次實驗,我初步了學(xué)會了使用VC的新建工程,并且進(jìn)行簡單的程序編寫。此外我還學(xué)會如何使用一些謂詞來解決生活中的一些簡單問題,并且用VC編程給出具體的操作步驟,感覺對VC編程有了新的認(rèn)識。在實驗中我也遇到過許多問題,比如在我寫完代碼進(jìn)行編譯時總是會出現(xiàn)一個錯誤“ fatal error C1010: 在查找預(yù)編譯頭時遇到意外的文件結(jié)尾,是否忘記了向源中添加“#include ‘stdafx.h’”關(guān)于這個錯誤我我問了幾個同學(xué)得不出答案后,我決定通過上網(wǎng)查找,最終找到了解決方法,需要在該項目的每一個cpp結(jié)尾的文件屬性中設(shè)置不使用預(yù)編譯頭即可。在這個過程中也鍛煉了自己解決問題的能力。

      人工智能課內(nèi)實驗報告

      實驗2:編程實現(xiàn)簡單動物識別系統(tǒng)的知識表示

      學(xué) 院: 自動化學(xué)院

      班 級: 智能1501 姓 名: 劉少鵬(33)學(xué) 號: 06153034 日 期: 2017-3-13 10:15-12:00

      實驗2:編程實現(xiàn)簡單動物識別系統(tǒng)的知識表示

      一、實驗?zāi)康?/p>

      1、理解和掌握產(chǎn)生式知識表示方法;

      2、能夠通過VC編程語言實現(xiàn)產(chǎn)生式系統(tǒng)的規(guī)則庫。

      二、實驗內(nèi)容

      1、以動物識別系統(tǒng)的產(chǎn)生式規(guī)則為例;

      2、用選定的編程語言建造規(guī)則庫和綜合數(shù)據(jù)庫,并能對它們進(jìn)行增加、刪除和修改操作。

      三、實驗步驟

      1、確定需要識別的動物及其屬性

      本次實驗的簡單動物識別系統(tǒng)總共能識別7種動物,即:老虎、金錢豹、斑馬、長頸鹿、企鵝、鴕鳥和信天翁。

      2、建立識別七種動物識別系統(tǒng)的規(guī)則

      3、選定編程語言并確定綜合數(shù)據(jù)庫和規(guī)則庫結(jié)構(gòu)(1)選用C語言作為編程語言

      (2)綜合數(shù)據(jù)庫的建立(3)規(guī)則庫的建立

      四、程序源代碼

      #include #include using namespace std;struct RULES

      {

      int count;char pre[255];char back[255];int mark;};void check();RULES r[100] = {

      { 1,“有毛發(fā)”,“哺乳動物”,0 }, { 1,“有奶”,“哺乳動物”,0 }, { 1,“有羽毛”,“鳥”,0 }, { 2,“會飛&下蛋&”,“鳥”,0 }, { 1,“吃肉”,“食肉動物”,0 },//所有規(guī)則靜態(tài)數(shù)據(jù)庫

      { 3,“有鋒利的牙齒&有爪&眼睛盯著前方&”,“食肉動物”,0 }, { 2,“哺乳動物&有蹄&”,“有蹄類哺乳動物”,0 }, { 2,“哺乳動物&反芻&”,“有偶蹄類哺乳動物”,0 }, { 4,“哺乳動物&食肉動物&黃褐色&有暗斑&”,“金錢豹”,0 }, { 4,“哺乳動物&食肉動物&黃褐色&黑色條紋&”,“老虎”,0 }, { 4,“有蹄類哺乳動物&有長脖子&有長腿&有暗斑&”,“長頸鹿”,0 }, { 2,“有蹄類哺乳動物&黑條紋&”,“斑馬”,0 }, { 5,“鳥&不會飛&有長脖子&有長腿&黑白色&”,“鴕鳥”,0 }, { 4,“鳥&不會飛&會游泳&黑白色&”,“企鵝”,0 }, { 2,“鳥&會飛&”,“信天翁”,0 }, { 1,“反芻”,“哺乳動物”,0 }

      };int number;int m;int cat = 15;int a;int length;void input(){

      //輸入的事實長度

      string f[255];

      //輸入的事實數(shù)組

      while(1){

      cat++;cout << “number” << endl;cin >> r[cat].count;cout << “輸入事實,兩種以上的事實請在每個事實后加上‘&’符號” << endl;cin >> r[cat].pre;cout << “輸入結(jié)果” << endl;cin >> r[cat].back;r[cat].mark = 0;while(1){

      cout << “輸入“1”繼續(xù)添加規(guī)則,輸入“2”查看規(guī)則庫” << endl;int p;cin >> p;if(p == 1){ } else { if(p == 2){ input();

      } } check();else { } cout << “輸入錯誤,重新輸入” << endl;} } void delate(){ }

      cout << “輸入要刪除的條數(shù)” << endl;int bar;cin >> bar;for(int t = 0;t <= cat;t++){ r[bar'0' >= 0 && temp[i]'0' >= 0 && temp[j]'0';target[j] = temp[j]3);break;case 2: /* down */

      if(blank<6)swap(m + blank, m + blank + 3);break;case 3: /* left */

      if(blank!= 0 && blank!= 3 && blank!= 6)swap(m + blank, m + blank1][y1][y-1] =-1;

      bool flag = true;int i = 0;for(i = 0;i<3;i++)for(int j = 0;j<3;j++)if(s.QP[i][j] == 0)flag = false;if(flag)return NO_BLANK;if(IsWin(s)==-1)return-MAX_NUM;if(IsWin(s)== 1)return MAX_NUM;int count = 0;for(i = 0;i<3;i++)

      for(int j = 0;j<3;j++)

      if(s.QP[i][j] == 0)tmpQP[i][j] = 1;else tmpQP[i][j] = s.QP[i][j];for(i = 0;i<3;i++)

      count +=(tmpQP[i][0] + tmpQP[i][1] + tmpQP[i][2])/ 3;count +=(tmpQP[0][i] + tmpQP[1][i] + tmpQP[2][i])/ 3;for(i = 0;i<3;i++)count +=(tmpQP[0][0] + tmpQP[1][1] + tmpQP[2][2])/ 3;count +=(tmpQP[2][0] + tmpQP[1][1] + tmpQP[0][2])/ 3;for(i = 0;i<3;i++)

      for(int j = 0;j<3;j++)

      if(s.QP[i][j] == 0)tmpQP[i][j] =-1;else tmpQP[i][j] = s.QP[i][j];for(i = 0;i<3;i++)

      count +=(tmpQP[i][0] + tmpQP[i][1] + tmpQP[i][2])/ 3;count +=(tmpQP[0][i] + tmpQP[1][i] + tmpQP[2][i])/ 3;for(i = 0;i<3;i++)

      count +=(tmpQP[0][0] + tmpQP[1][1] + tmpQP[2][2])/ 3;count +=(tmpQP[2][0] + tmpQP[1][1] + tmpQP[0][2])/ 3;return count;return false;L1: cout << “請輸入棋子的坐標(biāo)xy: ”;

      };

      } else {

      } cout << “非法輸入!”;goto L1;int Tic::s_count = 0;//初始化棋盤狀態(tài)節(jié)點總數(shù),剛開始置為 class demo : public Tic { public:

      demo(){} bool Judge(){

      } virtual bool AutoDone(){

      int a, b, i, j, m, n, max, min, x, y;if(IsWin(States[0])==-1){

      } a = 0, b = 0;max =-10000;for(x = 0;x<3;x++)

      for(y = 0;y<3;y++)States[11].QP[x][y] = States[0].QP[x][y];cout << “恭喜您獲勝!” << endl;return true;int i, j, a = 0;for(i = 0;i<3;i++)for(j = 0;j<3;j++)if(States[0].QP[i][j] == 0)a++;if(a == 0)return true;return false;for(i = 0;i<3;i++)for(j = 0;j<3;j++){

      if(States[0].QP[i][j] == 0){

      a = 1;

      for(x = 0;x<3;x++)

      for(y = 0;y<3;y++)

      }

      }

      States[a].QP[x][y] = States[0].QP[x][y];

      States[a].QP[i][j] = 1;min = 10000;

      for(m = 0;m<3;m++)

      for(n = 0;n<3;n++){

      }

      if(States[a].QP[m][n] == 0){

      }

      b = 1;

      for(x = 0;x<3;x++)

      for(y = 0;y<3;y++)

      States[10].QP[x][y] = States[a].QP[x][y];

      States[10].QP[m][n] =-1;

      States[10].e_fun = e_fun(States[10]);

      if(States[10].e_fun

      States[a].e_fun = min;if(States[a].e_fun>max){

      }

      max = States[a].e_fun;for(x = 0;x<3;x++)

      for(y = 0;y<3;y++)

      States[11].QP[x][y] = States[a].QP[x][y];for(x = 0;x<3;x++)for(y = 0;y<3;y++)States[0].QP[x][y] = States[11].QP[x][y];cout << “計算機走棋” << endl;PrintQP();if(IsWin(States[0])== 1){

      } else if(IsWin(States[0])==-1){

      } return false;

      cout << “抱歉你輸了,計算機獲勝!” << endl;return true;cout << “恭喜您獲勝!” << endl;return true;

      };} void main(){

      cout << “****項目名稱:一字棋游戲的實現(xiàn)****” << endl;cout << “****班 級:智 能 1 5 0 1 ****” << endl;cout << “****姓 名:劉 少 鵬****” << endl;cout << “****學(xué) 號:0 6 1 5 3 0 3 4 ****” << endl;cout << “****說 明:-1代表人落子位置,1代表電腦落子位置,0代表該位置無棋子 ****” << endl;

      system(“title #子棋智能小游戲”);system(“color A2”);char IsFirst;bool IsFinish;cout << “若您為先手,請輸入'Y'!反之,請輸入'N':” << endl;cin >> IsFirst;demo *p = new demo();p->init();cout << “棋盤的初始狀態(tài):” << endl;p->PrintQP();do {

      if(!p->Judge()){

      } if(p->Judge())IsFinish = true;if(IsFirst == 'Y'){

      } else if(IsFirst == 'N'){

      } IsFinish = p->AutoDone();if(!p->Judge()){ }

      if(!IsFinish){ p->UserInput();p->PrintQP();} p->UserInput();p->PrintQP();if(!p->Judge()){ }

      IsFinish = p->AutoDone();} while(!IsFinish);if((p->IsWin(p->States[0])== 0)&& p->Judge()){

      } } cout << “平局” << endl;system(“pause”);3.2、實驗運行結(jié)果截圖

      4、實驗心得

      本次實驗,我通過學(xué)習(xí)用VC編程語言設(shè)計簡單的博弈游戲,從而理解和掌握博弈樹的啟發(fā)式搜索過程,熟悉博弈中兩種最基本的搜索方法——極大極小過程和???過程。并且將這種思想通過代碼表現(xiàn)出來。

      本次實驗我最大的收獲不僅僅是學(xué)到了課本上的知識,更是學(xué)會了如何主動的求解問題的答案。實驗中我遇到了許多困難,不僅僅是有關(guān)編程算法方面的,還有一些代碼邏輯流程的設(shè)計。這些困難我通過上網(wǎng)和去圖書館查找資料或者向同學(xué)請教等方式,逐一解決了困難,我收獲良多。

      人工智能課內(nèi)實驗報告

      實驗6:子句集消解實驗

      學(xué) 院: 自動化學(xué)院 班 級: 智能1501 姓 名: 劉少鵬(33)學(xué) 號: 06153034 日 期: 2017-05-8 10:15-12:00

      實驗6子句集消解實驗

      一、實驗?zāi)康?/p>

      (1)熟悉子句集化簡的九個步驟;

      (2)理解消解規(guī)則,能把任意謂詞公式轉(zhuǎn)換成子句集。

      二、編程環(huán)境

      Visual Studio 2017

      三、實驗原理

      在謂詞邏輯中,任何一個謂詞公式都可以通過應(yīng)用等價關(guān)系及推理規(guī)則化成相應(yīng)的子句集。

      其化簡步驟如下:

      (1)消去連接詞“→”和“?” 反復(fù)使用如下等價公式:

      P→Q ?﹁ P∨Q

      P?Q ?(P∧Q)∨(﹁P∧﹁Q)即可消去謂詞公式中的連接詞“→”和“?”。(2)減少否定符號的轄域 反復(fù)使用雙重否定率

      ﹁(﹁P)? P

      摩根定律

      ﹁(P∧Q)?﹁P∨﹁Q

      ﹁(P∨Q)?﹁P∧﹁Q

      量詞轉(zhuǎn)換率

      ﹁(?x)P(x)?(?x)﹁P(x)

      ﹁(?x)P(x)?(?x)¬P(x)將每個否定符號“﹁”移到僅靠謂詞的位置,使得每個否定符號最多只作用于一個謂詞上。

      (3)對變元標(biāo)準(zhǔn)化

      在一個量詞的轄域內(nèi),把謂詞公式中受該量詞約束的變元全部用另外一個沒有出現(xiàn)過的任意變元代替,使不同量詞約束的變元有不同的名字。

      (4)化為前束范式

      化為前束范式的方法:把所有量詞都移到公式的左邊,并且在移動時不能改變其相對順序。

      (5)消去存在量詞

      (6)化為Skolem標(biāo)準(zhǔn)形

      對上述前束范式的母式應(yīng)用以下等價關(guān)系

      P∨(Q∧R)?(P∨Q)∧(P∨R)(7)消去全稱量詞(8)消去合取詞

      在母式中消去所有合取詞,把母式用子句集的形式表示出來。其中,子句集中的每一個元素都是一個子句。

      (9)更換變量名稱

      對子句集中的某些變量重新命名,使任意兩個子句中不出現(xiàn)相同的變量名。

      四、實驗結(jié)果及代碼

      //化簡子句集的九步法演示 //作者:劉少鵬 //時間:2017.5 #include #include #include #include using namespace std;//一些函數(shù)的定義

      void initString(string &ini);//初始化

      string del_inlclue(string temp);//消去蘊涵符號

      string dec_neg_rand(string temp);//減少否定符號的轄域 string standard_var(string temp);//對變量標(biāo)準(zhǔn)化 string del_exists(string temp);//消去存在量詞 string convert_to_front(string temp);//化為前束形

      string convert_to_and(string temp);//把母式化為合取范式 string del_all(string temp);//消去全稱量詞

      string del_and(string temp);//消去連接符號合取% string change_name(string temp);//更換變量名稱

      //輔助函數(shù)定義 bool isAlbum(char temp);//是字母

      string del_null_bracket(string temp);//刪除多余的括號 string del_blank(string temp);//刪除多余的空格 void checkLegal(string temp);//檢查合法性

      char numAfectChar(int temp);//數(shù)字顯示為字符

      //主函數(shù) void main(){ cout << “------------------求子句集九步法演示-----------------------” << endl;system(“color 0A”);//orign = “Q(x,y)%~(P(y)”;//orign = “(@x)(P(y)>P)”;//orign = “~(#x)y(x)”;//orign = “~((@x)x!b(x))”;//orign = “~(x!y)”;//orign = “~(~a(b))”;string orign, temp;char command, command0, command1, command2, command3, command4, command5,48

      第三篇:人工智能TSP旅行商問題實驗報告

      人工智能實驗三實驗報告

      班級: 姓名: 學(xué)號:

      一 實驗題目

      TSP問題的遺傳算法實現(xiàn)

      旅行商問題(Traveling Salesman Problem, TSP),又譯為旅行推銷員問題、貨擔(dān)郎問題,簡稱為TSP問題,是最基本的路線問題。假設(shè)有n個可直達(dá)的城市,一銷售商從其中的某一城市出發(fā),不重復(fù)地走完其余n-1個城市并回到原出發(fā)點,在所有可能的路徑中求出路徑長度最短的一條。

      應(yīng)用遺傳算法求解30/10個節(jié)點的TSP(旅行商問題)問題,求問題的最優(yōu)解。

      二 實驗?zāi)康?熟悉和掌握遺傳算法的基本概念和基本思想; 理解和掌握遺傳算法的各個操作算子,能夠用選定的編程語言設(shè)計簡單的遺傳優(yōu)化系統(tǒng); 通過實驗培養(yǎng)學(xué)生利用遺傳算法進(jìn)行問題求解的基本技能。

      三 實驗要求

      掌握遺傳算法的基本原理、各個遺傳操作和算法步驟; 2 要求求出問題最優(yōu)解,若得不出最優(yōu)解,請分析原因; 對實驗中的幾個算法控制參數(shù)進(jìn)行仔細(xì)定義,并能通過實驗選擇參數(shù)的最佳值;

      要求界面顯示每次迭代求出的局部最優(yōu)解和最終求出的全局最優(yōu)解。

      四 數(shù)據(jù)結(jié)構(gòu)

      請說明染色體個體和群體的定義方法。

      struct RanSeTi //染色體的個體的定義方法 { int city[cities];//基因的排列(即城市的順序,路徑的組織)

      int adapt;//記錄適應(yīng)度

      double p;//記錄其在種群中的幸存概率

      } RanSeTi [num], RanSeTi temp[num];//用數(shù)組來存儲染色體群體方法

      五 實驗算法 說明算法中對染色體的編碼方法,適應(yīng)度函數(shù)定義方法

      1)染色體的編碼方法:

      即為染色體個體定義過程中生成的基因排列(路徑中城市的順序)

      struct RanSeTi //染色體的個體的定義方法 { int city[cities];//基因的排列(即城市的順序,路徑的組織)

      int adapt;//記錄適應(yīng)度

      double p;//記錄其在種群中的幸存概率

      } RanSeTi [num], RanSeTi temp[num];//用數(shù)組來存儲染色體群體方法

      2)適應(yīng)度函數(shù)定義方法:

      評價函數(shù)即適應(yīng)度函數(shù),在遺傳算法中用來計算一個染色體優(yōu)劣的函數(shù)。在進(jìn)行遺傳操作和種群進(jìn)化的時候,每個染色體的適應(yīng)值是決定它是否進(jìn)入下一輪種群進(jìn)化的關(guān)鍵因素。適應(yīng)值高的函數(shù)被選作新一代個體的可能性就會大。

      TSP問題中適應(yīng)度函數(shù)常取路徑長度的倒數(shù)(或倒數(shù)的相關(guān)函數(shù)),如:

      f(x1,x2,?,xn)?N

      ?d(x,xii?1n?1i?1)?d(xn?x1)

      其中,N是個調(diào)節(jié)參數(shù),根據(jù)實驗情況進(jìn)行確定。采用的選擇、交叉、變異操作算子的具體操作

      1)選擇操作

      我們定義f(xi)為第i(i=1,2,3.....popsize)個染色體的適應(yīng)度,則每個個體被選中的概率

      popsize

      for(i=0;i

      n1= RanSeTi [i].city[j-1];

      n2= RanSeTi [i].city[j];

      sumdistance+=distance[n1][n2];}

      RanSeTi [i].adapt=sumdistance;//每條染色體的路徑總和

      biggestsum+=sumdistance;//種群的總路徑 } 是: P(xi)?f(xi)

      ?f(xj?1j)

      本題中具體使用的是期望值方法 for(i=0;i

      } gradient[0]=group[0].p;for(i=1;i

      if(xuanze[i]

      {

      xuan[i]=j;//第i個位置存放第j個染色體

      break;

      } } } //拷貝種群

      for(i=0;i

      for(i=0;i

      交叉算子就是把兩個父代個體的部分結(jié)構(gòu)加以替換重組而生成新個體的操作。部分匹配交叉、順序交叉、改進(jìn)的啟發(fā)式順序交叉 //temp1號染色體和temp2染色體交配

      for(i=0;i

      {

      point1=rand()%cities;

      point2=rand()%cities;

      for(j=temp1;j

      if(jiaopeiflag[j]==1)

      {

      temp1=j;

      break;

      }

      for(j=temp1+1;j

      if(jiaopeiflag[j]==1)

      {

      temp2=j;

      break;

      }

      //進(jìn)行基因交配

      if(point1>point2)//保證point1<=point2

      {

      temp=point1;

      point1=point2;

      point2=temp;

      }

      memset(map1,-1,sizeof(map1));

      memset(map2,-1,sizeof(map2));

      //斷點之間的基因產(chǎn)生映射

      for(k=point1;k<=point2;k++)

      {

      map1[group[temp1].city[k]]=group[temp2].city[k];

      map2[group[temp2].city[k]]=group[temp1].city[k];

      }

      //斷點兩邊的基因互換

      for(k=0;k

      {

      temp=group[temp1].city[k];

      group[temp1].city[k]=group[temp2].city[k];

      group[temp2].city[k]=temp;

      }

      for(k=point2+1;k

      {

      temp=group[temp1].city[k];

      group[temp1].city[k]=group[temp2].city[k];

      group[temp2].city[k]=temp;

      }

      //處理產(chǎn)生的沖突基因

      for(k=0;k

      {

      for(kk=point1;kk<=point2;kk++)

      if(group[temp1].city[k]==group[temp1].city[kk])

      {

      group[temp1].city[k]=map1[group[temp1].city[k]];

      break;

      }

      }

      for(k=point2+1;k

      {

      for(kk=point1;kk<=point2;kk++)

      if(group[temp1].city[k]==group[temp1].city[kk])

      {

      group[temp1].city[k]=map1[group[temp1].city[k]];

      break;

      }

      }

      for(k=0;k

      {

      for(kk=point1;kk<=point2;kk++)

      if(group[temp2].city[k]==group[temp2].city[kk])

      {

      group[temp2].city[k]=map2[group[temp2].city[k]];

      break;

      }

      }

      for(k=point2+1;k

      {

      for(kk=point1;kk<=point2;kk++)

      if(group[temp2].city[k]==group[temp2].city[kk])

      {

      group[temp2].city[k]=map2[group[temp2].city[k]];

      break;

      }

      }

      temp1=temp2+1;

      } 3)變異操作

      TSP問題中,經(jīng)常采取的變異操作主要有:位點變異、逆轉(zhuǎn)變異、對換變異、插入變異。//隨機產(chǎn)生變異概率

      srand((unsigned)time(NULL));

      for(i=0;i

      {

      bianyip[i]=(rand()%100);

      bianyip[i]/=100;

      }

      //確定可以變異的染色體

      t=0;

      for(i=0;i

      {

      if(bianyip[i]

      {

      bianyiflag[i]=1;

      t++;

      }

      }

      //變異操作,即交換染色體的兩個節(jié)點

      srand((unsigned)time(NULL));

      for(i=0;i

      {

      if(bianyiflag[i]==1)

      {

      temp1=rand()%10;

      temp2=rand()%10;

      point=group[i].city[temp1];

      group[i].city[temp1]=group[i].city[temp2];

      group[i].city[temp2]=point;

      }

      } 實驗中采用的算法參數(shù)的最佳選擇值是多少

      #define cities 10/30 //城市的個數(shù)

      #define MAXX 150 //迭代次數(shù) #define pc 0.72 //交配概率 #define pm 0.02 //變異概率 #define num 20 //種群的大小

      六 實驗結(jié)果 要求有實驗運行結(jié)果截圖,以及必要的說明

      以上部分是每次迭代的步驟結(jié)果,通過染色體群體中個體的交配、變異,從而更改染色體的具體基因組成,通過不斷進(jìn)行適應(yīng)度計算、存活率的計算,更新已有數(shù)值;

      以上部分為迭代之后的總結(jié)果,輸出最終的種群評價,從染色體種群里面取出最佳的染色體,并進(jìn)行輸出。要求說明是否搜索到了最優(yōu)解,如果沒有,請分析原因

      本題中根據(jù)隨機生成的cities個城市之間的相互距離、隨機產(chǎn)生初試群,通過TSP算法,通過以下步驟:

      (1)初始化群體;

      (2)計算群體上每個個體的適應(yīng)度值;(4)按概率Pc進(jìn)行交叉操作;(5)按概率Pm進(jìn)行變異操作;(6)沒有滿足某種停止條件,則轉(zhuǎn)第(2)步,否則進(jìn)入(7);

      (7)輸出種群中適應(yīng)度值最優(yōu)的染色體作為問題的滿意解或最優(yōu)解。

      (3)按由個體適應(yīng)度值所決定的某個規(guī)則選擇將進(jìn)入下一代的個體;成功找到種群中適應(yīng)度值最優(yōu)的染色體作為問題的滿意解或最優(yōu)解。

      若失敗,分析可得失敗原因為:隨機生成的cities個城市之間的相互距離、隨機產(chǎn)生初試群有可能不存在適應(yīng)度值最優(yōu)的染色體

      七 實驗總結(jié)及體會

      1.同一問題可能有不同的幾種算法相對應(yīng)解決:

      對于此類旅行者問題,原在數(shù)據(jù)結(jié)構(gòu)和算法課中學(xué)過迪杰斯特拉算法,也可以高效快速的解決給定好初值的最短路徑問題;

      在本課中,有學(xué)到了新的算法:TSP算法,此算法從遺傳學(xué)角度,開辟了一個新的視野。通過每次迭代求出的局部最優(yōu)解和最終求出的全局最優(yōu)解。

      兩種不同的算法可以求解同一問題,但是角度完全不一樣,從目前自己實驗的結(jié)果而言,對于小數(shù)據(jù)量的輸入均可以快速高效的完成題目。但是遺傳算法可以考慮到的問題復(fù)雜度更高,更適合應(yīng)用于實際。

      2.學(xué)習(xí)時應(yīng)當(dāng)重視動手實踐能力:

      課堂上講解的遺傳算法較為簡單基礎(chǔ),對于理論學(xué)習(xí)而言,十分適合。但一旦應(yīng)用于實踐時,發(fā)現(xiàn)雖然每個部分模塊自己都可以理解并且熟悉,但是對于實際應(yīng)用,并且切實地解決實際問題仍存在較大的困難。

      從理論到實踐,從課本的知識到解決問題,若不及時的加以消化并且切實的應(yīng)用于解決問題,可以看出知識很難為現(xiàn)實提供幫助。因而應(yīng)在學(xué)習(xí)之后及時進(jìn)行上機實驗,并且達(dá)到熟練掌握與運用的階段。

      第四篇:人工智能實驗報告-八數(shù)碼

      《人工智能》實驗一題目

      實驗一

      啟發(fā)式搜索算法

      1.實驗內(nèi)容:

      使用啟發(fā)式搜索算法求解8數(shù)碼問題。

      ⑴ 編制程序?qū)崿F(xiàn)求解8數(shù)碼問題A?算法,采用估價函數(shù)

      ??w?n?,f?n??d?n???pn????其中:d?n?是搜索樹中結(jié)點n的深度;w?n?為結(jié)點n的數(shù)據(jù)庫中錯放的棋子個數(shù);p?n?為結(jié)點n的數(shù)據(jù)庫中每個棋子與其目標(biāo)位置之間的距離總和。

      ⑵ 分析上述⑴中兩種估價函數(shù)求解8數(shù)碼問題的效率差別,給出一個是p?n?的上界的h?n?的定義,并測試使用該估價函數(shù)是否使算法失去可采納性。

      2.實驗?zāi)康?/p>

      熟練掌握啟發(fā)式搜索A算法及其可采納性。3.數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計

      該搜索為一個搜索樹。為了簡化問題,搜索樹節(jié)點設(shè)計如下: typedef struct Node//棋盤 {//節(jié)點結(jié)構(gòu)體

      int data[9];double f,g;struct Node * parent;//父節(jié)點 }Node,*Lnode;int data[9];數(shù)碼數(shù)組:記錄棋局?jǐn)?shù)碼擺放狀態(tài)。struct Chess * Parent;父節(jié)點:指向父親節(jié)點。下一步可以通過啟發(fā)搜索算法構(gòu)造搜索樹。

      1、局部搜索樹樣例:

      ?

      2、搜索過程

      搜索采用廣度搜索方式,利用待處理隊列輔助,逐層搜索(跳過劣質(zhì)節(jié)點)。搜索過程如下:

      (1)、把原棋盤壓入隊列;

      (2)、從棋盤取出一個節(jié)點;

      (3)、判斷棋盤估價值,為零則表示搜索完成,退出搜索;

      (4)、擴展子節(jié)點,即從上下左右四個方向移動棋盤,生成相應(yīng)子棋盤;

      (5)、對子節(jié)點作評估,是否為優(yōu)越節(jié)點(子節(jié)點估價值小于或等于父節(jié)點則為優(yōu)越節(jié)點),是則把子棋盤壓入隊列,否則拋棄;

      (5)、跳到步驟(2);

      3、算法的評價 完全能解決簡單的八數(shù)碼問題,但對于復(fù)雜的八數(shù)碼問題還是無能為力?,F(xiàn)存在的一些優(yōu)缺點。

      1、可以改變數(shù)碼規(guī)模(N),來擴展成N*N的棋盤,即擴展為N數(shù)碼問題的求解過程。

      2、內(nèi)存泄漏。由于采用倒鏈表的搜索樹結(jié)構(gòu),簡化了數(shù)據(jù)結(jié)構(gòu),但有部分被拋棄節(jié)點的內(nèi)存沒有很好的處理,所以會造成內(nèi)存泄漏;

      3、采用了屏蔽方向,有效防止往回搜索(節(jié)點的回推),但沒能有效防止循環(huán)搜索,所以不能應(yīng)用于復(fù)雜度較大的八數(shù)碼問題;

      源碼:

      #include #include #include

      typedef struct Node {//節(jié)點結(jié)構(gòu)體

      int data[9];double f,g;struct Node * parent;}Node,*Lnode;

      typedef struct Stack {//OPEN CLOSED 表結(jié)構(gòu)體

      Node * npoint;struct Stack * next;}Stack,* Lstack;

      Node * Minf(Lstack * Open){//選取OPEN表上f值最小的節(jié)點,返回該節(jié)點地址

      Lstack temp =(*Open)->next,min =(*Open)->next,minp =(*Open);Node * minx;

      while(temp->next!= NULL){

      if((temp->next->npoint->f)<(min->npoint->f))

      {

      min = temp->next;

      minp = temp;

      }

      temp = temp->next;} minx = min->npoint;temp = minp->next;minp->next = minp->next->next;free(temp);return minx;}

      int Canslove(Node * suc, Node * goal){//判斷是否可解

      int a = 0,b = 0,i,j;for(i = 1;i< 9;i++)

      for(j = 0;j < i;j++)

      {

      if((suc->data[i] > suc->data[j])&& suc->data[j]!= 0)a++;

      if((goal->data[i] > goal->data[j])&& goal->data[j]!= 0)b++;

      } if(a%2 == b%2)return 1;else return 0;}

      int Equal(Node * suc,Node * goal){//判斷節(jié)點是否相等,相等,不相等

      for(int i = 0;i < 9;i ++)

      if(suc->data[i]!= goal->data[i])return 0;

      return 1;}

      Node * Belong(Node * suc,Lstack * list){//判斷節(jié)點是否屬于OPEN表或CLOSED表,是則返回節(jié)點地址,否則返回空地址

      Lstack temp =(*list)-> next;if(temp == NULL)return NULL;while(temp!= NULL){

      if(Equal(suc,temp->npoint))return temp-> npoint;

      temp = temp->next;} return NULL;}

      void Putinto(Node * suc,Lstack * list){//把節(jié)點放入OPEN 或CLOSED 表中

      Stack * temp;temp =(Stack *)malloc(sizeof(Stack));temp->npoint = suc;temp->next =(*list)->next;(*list)->next = temp;}

      ///////////////計算f值部分-開始////////////////////////////// double Fvalue(Node suc, Node goal, int m){//計算f值

      switch(m){ case 1:{

      int error(Node,Node);

      int w=0;

      w=error(suc,goal);

      return w+suc.g;

      } case 2:{

      double Distance(Node,Node,int);

      double p = 0;

      for(int i = 1;i <= 8;i++)

      p = p + Distance(suc, goal, i);

      return p + suc.g;//f = h + g;

      } default:

      break;}

      }

      int error(Node suc,Node goal){//計算錯位個數(shù)

      int w,i;w=0;for(i=0;i<9;i++){

      if(suc.data[i]!=goal.data[i])

      w++;} return w;} double Distance(Node suc, Node goal, int i){//計算方格的錯位距離

      int k,h1,h2;for(k = 0;k < 9;k++){

      if(suc.data[k] == i)h1 = k;

      if(goal.data[k] == i)h2 = k;} return double(fabs(h1/3h2%3));} ///////////////計算f值部分-結(jié)束//////////////////////////////

      ///////////////////////擴展后繼節(jié)點部分的函數(shù)-開始///////////////// int BelongProgram(Lnode * suc ,Lstack * Open ,Lstack * Closed ,Node goal ,int m){//判斷子節(jié)點是否屬于OPEN或CLOSED表并作出相應(yīng)的處理

      Node * temp = NULL;int flag = 0;if((Belong(*suc,Open)!= NULL)||(Belong(*suc,Closed)!= NULL)){

      if(Belong(*suc,Open)!= NULL)temp = Belong(*suc,Open);

      else temp = Belong(*suc,Closed);

      if(((*suc)->g)<(temp->g))

      {

      temp->parent =(*suc)->parent;

      temp->g =(*suc)->g;

      temp->f =(*suc)->f;

      flag = 1;

      } } else {

      Putinto(* suc, Open);

      (*suc)->f = Fvalue(**suc, goal, m);} return flag;}

      int Canspread(Node suc, int n){//判斷空格可否向該方向移動,,表示空格向上向下向左向右移

      int i,flag = 0;for(i = 0;i < 9;i++)

      if(suc.data[i] == 0)break;switch(n){ case 1:

      if(i/3!= 0)flag = 1;break;case 2:

      if(i/3!= 2)flag = 1;break;case 3:

      if(i%3!= 0)flag = 1;break;case 4:

      if(i%3!= 2)flag = 1;break;default:break;} return flag;}

      void Spreadchild(Node * child,int n){//擴展child節(jié)點的字節(jié)點n表示方向,,表示空格向上向下向左向右移

      int i,loc,temp;for(i = 0;i < 9;i++)

      child->data[i] = child->parent->data[i];for(i = 0;i < 9;i++)

      if(child->data[i] == 0)break;if(n==0)

      loc = i%3+(i/3-1)*3;else if(n==1)

      loc = i%3+(i/3 + 1)*3;else if(n==2)

      loc = i%3-1+(i/3)*3;else

      loc = i%3+1+(i/3)*3;temp = child->data[loc];child->data[i] = temp;child->data[loc] = 0;}

      void Spread(Lnode * suc, Lstack * Open, Lstack * Closed, Node goal, int m){//擴展后繼節(jié)點總函數(shù)

      int i;Node * child;for(i = 0;i < 4;i++){

      if(Canspread(**suc, i+1))

      //判斷某個方向上的子節(jié)點可否擴展

      {

      child =(Node *)malloc(sizeof(Node));

      //擴展子節(jié)點

      child->g =(*suc)->g +1;

      //算子節(jié)點的g值

      child->parent =(*suc);

      //子節(jié)點父指針指向父節(jié)點

      Spreadchild(child, i);

      //向該方向移動空格生成子節(jié)點

      if(BelongProgram(&child, Open, Closed, goal, m))// 判斷子節(jié)點是否屬于OPEN或CLOSED表并作出相應(yīng)的處理

      free(child);

      } } } ///////////////////////擴展后繼節(jié)點部分的函數(shù)-結(jié)束//////////////////////////////////

      Node * Process(Lnode * org, Lnode * goal, Lstack * Open, Lstack * Closed, int m){//總執(zhí)行函數(shù)

      while(1){

      if((*Open)->next == NULL)return NULL;

      //判斷OPEN表是否為空,為空則失敗退出

      Node * minf = Minf(Open);

      //從OPEN表中取出f值最小的節(jié)點

      Putinto(minf, Closed);

      //將節(jié)點放入CLOSED表中

      if(Equal(minf, *goal))return minf;

      //如果當(dāng)前節(jié)點是目標(biāo)節(jié)點,則成功退出

      Spread(&minf, Open, Closed, **goal, m);

      //當(dāng)前節(jié)點不是目標(biāo)節(jié)點時擴展當(dāng)前節(jié)點的后繼節(jié)點

      } }

      int Shownum(Node * result){//遞歸顯示從初始狀態(tài)到達(dá)目標(biāo)狀態(tài)的移動方法

      if(result == NULL)return 0;else {

      int n = Shownum(result->parent);

      printf(“第%d步:”,n);

      for(int i = 0;i < 3;i++)

      {

      printf(“n”);

      for(int j = 0;j < 3;j++)

      {

      if(result->data[i*3+j]!= 0)

      printf(“ %d ”,result->data[i*3+j]);

      else printf(“ 0 ”);

      }

      }

      printf(“n”);

      return n+1;} }

      void Checkinput(Node *suc){//檢查輸入

      int i = 0,j = 0,flag = 0;char c;while(i < 9){

      while(((c = getchar())!= 10))

      {

      if(c == ' ')

      {

      if(flag >= 0)flag = 0;

      }

      else if(c >= '0' && c <= '8')

      {

      if(flag == 0)

      {

      suc->data[i] =(c-'0');

      flag = 1;

      for(j =0;j < i;j++)

      if(suc->data[j] == suc->data[i])flag =-2;

      i++;

      }

      else if(flag >= 0)flag =-1;

      }

      else

      if(flag >= 0)flag =-1;

      }

      if(flag <0 || i < 9)

      {

      if(flag < 0)

      {

      if(flag ==-1)printf(“含有非法字符或數(shù)字!n請重新輸入:n”);

      else if(flag ==-2)printf(“輸入的數(shù)字有重復(fù)!n請重新輸入:n”);

      }

      else if(i < 9)printf(“輸入的有效數(shù)字不夠!n請重新輸入:n”);

      i = 0;

      flag = 0;

      } } }

      int meassure(Lstack s){ int k=0;while((s->next)!=NULL){

      k++;

      s=s->next;} return k;}

      void main(){//主函數(shù)

      //初始操作,建立open和closed表

      Lstack Open =(Stack *)malloc(sizeof(Stack));Open->next = NULL;Lstack Closed =(Stack *)malloc(sizeof(Stack));Closed->next = NULL;Node * org =(Node *)malloc(sizeof(Node));org->parent = NULL;

      //初始狀態(tài)節(jié)點

      org->f =1;org->g =1;

      Node * goal =(Node *)malloc(sizeof(Node));

      //目標(biāo)狀態(tài)節(jié)點

      Node * result;int m;char c;int k;

      printf(“=================================n”);printf(“說明:狀態(tài)矩陣由0-8 九個數(shù)字表示,n請依次按照九宮格上的行列順序輸入,每個數(shù)字間用空格隔開。n”);

      printf(“=================================n”);printf(“請輸入初始狀態(tài)(0-8 9個數(shù)字以空格隔開回車表示輸入結(jié)束):n”);Checkinput(org);printf(“請輸入目標(biāo)狀態(tài)(0-8 9個數(shù)字以空格隔開回車表示輸入結(jié)束):n”);Checkinput(goal);if(Canslove(org, goal)){//A*算法開始,先將初始狀態(tài)放入OPEN表

      printf(“請選擇:1.按w(n)搜索 2.按p(n)搜索 n”);

      scanf(“%d”,&m);

      while((c = getchar())!= 10);

      printf(“搜索中,請耐心等待(如果您覺得時間太久請重新執(zhí)行程序并輸入更快的速度,默認(rèn)值為)......n”);

      Putinto(org,&Open);

      result = Process(&org, &goal, &Open, &Closed, m);//進(jìn)行剩余的操作

      printf(“總步數(shù):%d”,Shownum(result)-1);

      printf(“n”);

      k=meassure(Closed);

      printf(“擴展節(jié)點數(shù):n”);

      printf(“%dn”,k);

      printf(“Press Enter key to exit!”);

      while((c = getchar())!= 10);} else

      printf(“程序認(rèn)定該起始狀態(tài)無法道達(dá)目標(biāo)狀態(tài)!n”);}

      第五篇:人工智能產(chǎn)生式系統(tǒng)實驗報告解讀

      實 驗 報 告

      【實驗名稱】______________產(chǎn)生式系統(tǒng)_______________________ 【實驗?zāi)康摹?/p>

      1.理解產(chǎn)生式系統(tǒng)的結(jié)構(gòu)原理與實際應(yīng)用。2.掌握產(chǎn)生式規(guī)則表示及規(guī)則庫組建的實現(xiàn)方法。

      3.熟悉和掌握產(chǎn)生式系統(tǒng)的運行機制,掌握基于規(guī)則推理的基本方法。

      【實驗原理】

      產(chǎn)生式系統(tǒng)用來描述若干個不同的以一個基本概念為基礎(chǔ)的系統(tǒng),這個基本概念就是產(chǎn)生式規(guī)則或產(chǎn)生式條件和操作對。在產(chǎn)生式系統(tǒng)中,論域的知識分為兩部分:用事實表示靜態(tài)知識;用產(chǎn)生式規(guī)則表示推理過程和行為。

      【實驗內(nèi)容】

      1.自己建造產(chǎn)生式系統(tǒng)(包括規(guī)則庫和事實庫),然后進(jìn)行推理,即可以自己輸入任何的事實,并基于原有的規(guī)則和輸入的事實進(jìn)行推理。

      2.建造動物識別系統(tǒng),能根據(jù)輸入的動物特征判斷是那種動物或給出相應(yīng)的回答。3.算法設(shè)計 ①首先建立事實庫

      事實庫是在程序的開始直接輸入的,用戶根據(jù)需要選擇,即要求用戶先輸入特征個數(shù),然后輸入動物的特征,進(jìn)行識別。如果未識別出來,則可以重新選擇,或者退出。

      動物的特征如下:

      1有奶 2有毛發(fā) 3有羽毛 4會飛 5生蛋 6有爪 7有犬齒

      8目盯前方 9吃肉 10有蹄 11反芻食物 12黃褐色 13黑色條紋

      14黑色斑點 15長腿 16長脖子 17暗斑點 18白色 19不會飛

      20黑白色 21會游泳 22善飛 23不怕風(fēng)浪

      24哺乳動物 25鳥 26食肉動物 27有蹄動物 28偶蹄動物

      29海燕 30老虎 31金錢豹 32長頸鹿 33斑馬 34鴕鳥 35企鵝

      ②建立靜態(tài)規(guī)則庫

      即建立產(chǎn)生式規(guī)則,本算法采用了產(chǎn)生中間事實的方法,便于建立和使用規(guī)則。為了便于設(shè)計,我們把要識別的動物限于7種,這樣所需要的產(chǎn)生式規(guī)則就比較少。本算法共有15種規(guī)則,如下:

      R1: 如果動物有奶,則它是哺乳動物 R2: 如果動物有毛發(fā),則它是哺乳動物 R3: 如果動物有羽毛,則它是鳥 R4: 如果動物會飛且生蛋,則它是鳥 R5: 吃肉的哺乳動物是食肉動物

      R6: 有爪有犬齒木釘前方的哺乳動物是食肉動物

      R7: 有蹄的哺乳動物是有蹄動物 R8: 反芻食物的有蹄動物是偶蹄動物 R9: 黃褐色有黑條紋的食肉動物是老虎 R10:黃褐色有黑色斑點的食肉動物是金錢豹

      R11:長腿長脖子有黃褐色暗斑點的有蹄動物是長頸鹿

      R12:有黑白條紋的有蹄動物是斑馬 R13:不會飛長腿長脖的鳥是鴕鳥 R14:不會飛會游泳黑白色的鳥是企鵝

      ③正向推理過程

      從已知事實出發(fā),通過規(guī)則庫求得結(jié)論,或稱數(shù)據(jù)驅(qū)動方式。推理過程是: ? 規(guī)則集中的規(guī)則前件與事實庫中的事實進(jìn)行匹配,得匹配的規(guī)則集合。? 從匹配規(guī)則集合中選擇一條規(guī)則作為使用規(guī)則。

      ? 執(zhí)行使用規(guī)則的后件,將該使用規(guī)則的后件送入事實庫中。? 重復(fù)這個過程直至達(dá)到目標(biāo)。

      如有多條匹配規(guī)則需從中選一條作為使用規(guī)則,本算法是根據(jù)規(guī)則的順序依次選擇,且規(guī)則中不存在同一組事實對應(yīng)多條匹配規(guī)則。

      R15:善飛不怕風(fēng)浪的鳥是海燕 具體表示如下: R1: 1->24 R2: 2->24 R3: 3->25 R4: 4*5->25 R5: 6*7*8*24->26 R6: 9*24->26 R7: 10*24->27 R8: 11*27->28 R9: 12*13*24->30 R10: 12*14*24->31 R11: 12*15*16*17*27->32 R12: 13*18*27->33 R13: 15*16*19*25->34 R14: 19*20*21*25->35 R15: 22*23*25->29

      ④實驗流程圖

      開始初始化欲加入的事實的個數(shù)及事實令i=1取出規(guī)則i的前提條件部分Ni=i+1事實庫中有相應(yīng)的事實Y取出規(guī)則i結(jié)論部分結(jié)論為新事實Y將該規(guī)則加入到事實庫中該事實是結(jié)論性事實Y將該規(guī)則的結(jié)論作為最終的結(jié)論結(jié)束NN ⑤實驗結(jié)果及分析

      如輸入如下事實:有羽毛、善飛、不怕風(fēng)浪。系統(tǒng)的推理過程如下:

      先從規(guī)則庫中取出第一條規(guī)則R1,檢查其前提是否可與事實庫中的已知事實相匹配。R1的前提是“有奶”,但事實庫中無此事實,故匹配失??;然后取R2,匹配失敗;接著取R3,該前提與已知事實“有羽毛”相匹配,故R3被執(zhí)行,并將其結(jié)論“鳥”作為新的事實加入到事實庫中。此時,事實庫的內(nèi)容變?yōu)椋河杏鹈⑸骑w、不怕風(fēng)浪、鳥;此后,R4~R14均匹配失敗,接著取R15,該前提“善飛+不怕風(fēng)浪+鳥”與已知事實相匹配,R15被執(zhí)行,并推出“該動物是海燕”。由于“海燕”已是目標(biāo)集合中的一個結(jié)論,即已推出最終結(jié)果,故問題求解過程結(jié)束。

      下面是程序運行的結(jié)果:

      【實驗程序】

      #include #define N 23 void main(){

      int i,j,k,a,b,c;int num;int fact[N],temp[N];int flag=1;while(flag==1){ printf(“動物的特征如下:n”);printf(“1有奶

      2有毛發(fā)

      3有羽毛

      4會飛

      20黑白色n21會游泳

      22善飛

      23不怕風(fēng)浪n”);

      printf(“請輸入描述該動物特征的個

      數(shù):”);

      scanf(“%d”,&num);

      printf(“請輸入對這只動物的特征描述的序號(按序號由小到大):n”);

      for(i=0;i

      }

      //********************************for(i=0;i

      if(fact[i]==1)scanf(“%d”,&a);fact[i]=a;會飛

      5生蛋n6有爪

      7有犬齒

      8目盯前方

      9吃肉

      10有蹄n11反芻食物

      12黃褐色

      13黑色條紋

      14黑色斑點

      15長腿n16長脖子

      17暗斑點

      18白色

      19不

      {

      fact[num]=24;num++;printf(“使用規(guī)則1,新增加的 }

      }

      //********************************k=0;

      for(i=0;i

      }

      if(temp[0]==4&&temp[1]==5){

      fact[num]=25;num++;

      printf(”使用規(guī)則4,新增加的事實if(fact[i]==4){

      }

      if(fact[i]==5){

      }

      temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;事實為: 哺乳動物n“);

      } //********************************for(i=0;i

      if(fact[i]==2){

      fact[num]=24;num++;printf(”使用規(guī)則2,新增加的 } break;

      事實為: 哺乳動物n“);

      } //********************************for(i=0;i

      if(fact[i]==3){

      fact[num]=25;num++;printf(”使用規(guī)則3,新增加的 } break;

      為:鳥n“);

      }

      //********************************

      k=0;

      for(i=0;i

      if(fact[i]==6)事實為:鳥n”);

      break;

      } {

      } if(fact[i]==7){

      } if(fact[i]==8){

      } if(fact[i]==24){

      } temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;

      }

      //********************************k=0;

      for(i=0;i

      }

      if(temp[0]==9&&temp[1]==24){

      fact[num]=26;num++;

      printf(“使用規(guī)則6,新增加的事實if(fact[i]==9){

      }

      if(fact[i]==24){

      }

      temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;

      為:食肉動物n”);

      fact[num]=26;num++;printf(“使用規(guī)則5,新增加的事實if(temp[0]==6&&temp[1]==7&&temp[2}

      //********************************k=0;

      for(i=0;i

      if(fact[i]==10){ ]==8&&temp[3]==24)

      {

      為:食肉動物n”);

      }

      } temp[k]=fact[i];k++;continue;

      }

      }

      break;

      if(temp[0]==11&&temp[1]==27){

      fact[num]=28;num++;

      printf(“使用規(guī)則8,新增加的事實if(fact[i]==24){

      } temp[k]=fact[i];break;

      為:偶蹄動物n”);

      }

      //********************************k=0;

      for(i=0;i

      if(fact[i]==12){

      }

      if(fact[i]==13){

      }

      if(fact[i]==24){

      temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;if(temp[0]==10&&temp[1]==24){

      fact[num]=27;num++;printf(“使用規(guī)則7,新增加的事實

      為:有蹄動物n”);

      } //********************************k=0;for(i=0;i

      if(fact[i]==11){

      } if(fact[i]==27){ temp[k]=fact[i];

      temp[k]=fact[i];k++;continue;

      } }

      }

      } if(temp[0]==12&&temp[1]==13&&tempif(temp[0]==12&&temp[1]==14&&temp[2]==24)

      {

      fact[num]=30;//num++;printf(“使用規(guī)則9,新增加的事實

      [2]==24)

      {

      fact[num]=31;//num++;

      printf(”使用規(guī)則10,新增加的事實為:老虎n該動物為老虎n“);

      為:金錢豹n該動物為金錢豹n”);

      }

      //********************************k=0;

      for(i=0;i

      if(fact[i]==12){

      }

      if(fact[i]==15){

      }

      if(fact[i]==16){

      temp[k]=fact[i];k++;

      temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;} //********************************k=0;for(i=0;i

      if(fact[i]==12){

      } if(fact[i]==14){

      } if(fact[i]==24){ temp[k]=fact[i];break;

      temp[k]=fact[i];k++;continue;

      temp[k]=fact[i];k++;continue;

      } } continue;

      }

      }

      continue;if(fact[i]==17){

      } if(fact[i]==27){

      } temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;

      if(fact[i]==18){

      }

      if(fact[i]==27){

      }

      temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;

      if(temp[0]==12&&temp[1]==15&&tempif(temp[0]==13&&temp[1]==18&&temp[2]==16&&temp[3]==17&&temp[4]==27)

      {

      fact[num]=32;//num++;printf(“使用規(guī)則11,新增加的事實

      [2]==27)

      {

      fact[num]=33;//num++;

      printf(”使用規(guī)則12,新增加的事實為:長頸鹿n該動物為長頸鹿n“);

      為:斑馬n該動物為斑馬n”);

      }

      //********************************k=0;

      for(i=0;i

      if(fact[i]==15){

      temp[k]=fact[i];k++;} //********************************k=0;for(i=0;i

      if(fact[i]==13){ temp[k]=fact[i];k++;

      } } continue;

      for(i=0;i

      }

      if(temp[0]==19&&temp[1]==20&&temp

      if(fact[i]==19){

      }

      if(fact[i]==20){

      }

      if(fact[i]==21){

      }

      if(fact[i]==25){

      }

      temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;if(fact[i]==16){

      } if(fact[i]==19){

      } if(fact[i]==25){

      } temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;

      if(temp[0]==15&&temp[1]==16&&temp[2]==19&&temp[3]==25)

      {

      fact[num]=34;//num++;printf(“使用規(guī)則13,新增加的事實

      為:鴕鳥n該動物為鴕鳥n”);

      } //********************************k=0;

      [2]==21&&temp[3]==25)

      {

      fact[num]=35;

      //num++;printf(“使用規(guī)則14,新增加的事實

      }

      } 為:企鵝n該動物為企鵝n”);

      } //********************************k=0;for(i=0;i

      if(fact[i]==22){

      } if(fact[i]==23){

      } if(fact[i]==25){ temp[k]=fact[i];break;temp[k]=fact[i];k++;continue;temp[k]=fact[i];k++;continue;

      if(temp[0]==22&&temp[1]==23&&temp

      [2]==25)

      {

      fact[num]=29;//num++;

      printf(“使用規(guī)則15,新增加的事實

      為:海燕n該動物為海燕n”);

      }

      //********************************if(fact[num]<29)

      printf(“現(xiàn)有事實無法推斷出結(jié)

      果!n”);

      printf(“n”);

      printf(“繼續(xù)請按1,退出按其它數(shù)字

      鍵:”);

      }

      scanf(“%d”,&c);if(c==1)

      flag=c;

      else break;} 【小結(jié)或討論】

      本系統(tǒng)的規(guī)則庫是靜態(tài)的,不能動態(tài)增加新的規(guī)則。這使得在規(guī)則變化的情況下不能及時改變,但是該系統(tǒng)已經(jīng)能基本滿足需要,對輸入的事實能給出相應(yīng)的回答,判斷出是何種動物。

      讀書的好處

      1、行萬里路,讀萬卷書。

      2、書山有路勤為徑,學(xué)海無涯苦作舟。

      3、讀書破萬卷,下筆如有神。

      4、我所學(xué)到的任何有價值的知識都是由自學(xué)中得來的?!_(dá)爾文

      5、少壯不努力,老大徒悲傷。

      6、黑發(fā)不知勤學(xué)早,白首方悔讀書遲。——顏真卿

      7、寶劍鋒從磨礪出,梅花香自苦寒來。

      8、讀書要三到:心到、眼到、口到

      9、玉不琢、不成器,人不學(xué)、不知義。

      10、一日無書,百事荒廢?!悏?/p>

      11、書是人類進(jìn)步的階梯。

      12、一日不讀口生,一日不寫手生。

      13、我撲在書上,就像饑餓的人撲在面包上?!郀柣?/p>

      14、書到用時方恨少、事非經(jīng)過不知難。——陸游

      15、讀一本好書,就如同和一個高尚的人在交談——歌德

      16、讀一切好書,就是和許多高尚的人談話?!芽▋?/p>

      17、學(xué)習(xí)永遠(yuǎn)不晚。——高爾基

      18、少而好學(xué),如日出之陽;壯而好學(xué),如日中之光;志而好學(xué),如炳燭之光。——劉向

      19、學(xué)而不思則惘,思而不學(xué)則殆?!鬃?/p>

      20、讀書給人以快樂、給人以光彩、給人以才干?!喔?/p>

      下載人工智能_實驗報告word格式文檔
      下載人工智能_實驗報告.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        人工智能相關(guān)材料

        應(yīng)用: 個人助理(智能手機上的語音助理、語音輸入、家庭管家和陪護機器人) 產(chǎn)品舉例:微軟小冰、百度度秘、科大訊飛等、Amazon Echo、Google Home等 安防(智能監(jiān)控、安保機器人)......

        《人工智能》教學(xué)大綱

        人工智能原理及其應(yīng)用 一、 說明 (一)課程性質(zhì) 隨著信息社會和知識經(jīng)濟時代的來臨,信息和知識已成為人們的一個熱門話題。然而,在這個話題的背后還蘊含著另外一個更深層的問題......

        人工智能心得體會

        人工智能心得體會 人工智能心得體會1 李開復(fù)號稱最會說話的計算機男神,曾經(jīng)是微軟谷歌的副掌門,現(xiàn)在是創(chuàng)新工廠的大bo,在微博有超過半個億粉絲。第一此認(rèn)識到他和人工智能這個......

        人工智能觀后感

        人工智能觀后感 剛才看了 讓我對斯皮爾博格這位大導(dǎo)演更加欽佩 不想深層歸類 什么 科幻倫理災(zāi)難 也不懂得 或許 更愿意相信 這是真的 或者再實際一點 這是一個寓言 影片中......

        人工智能辯論

        人工智能 正方一辯:人工智能是基于數(shù)學(xué)、邏輯學(xué)、統(tǒng)計學(xué)之上,通過經(jīng)驗積累得到學(xué)習(xí)能力,從而協(xié)助人們進(jìn)行某項工作的操作系統(tǒng)。人工智能與人類智能有著本質(zhì)區(qū)別和根本界限。人......

        人工智能(推薦閱讀)

        人工智能 課程設(shè)計中期報告 題目:一字棋游戲 班級:計算機技術(shù) 2014級 成員:樊祥錳(2014704101) 段紹鵬(2014704100) 范程斌(2014704102) 指導(dǎo)老師:張 云 目錄 第一章 項目建議書 1.1......

        人工智能理論

        人工智能理論 模塊化開發(fā),劃分層次模塊,提出理論,論證理論是否可行,編碼實現(xiàn)。 電影《異次元駭客》對計算機從業(yè)者的啟發(fā): 1、 建造以三維數(shù)據(jù)(x,y,z)為基礎(chǔ)的虛擬世界,并為每個......

        人工智能教案

        人工智能教案 教學(xué)目標(biāo): 知識目標(biāo):了解人工智能(AI)的定義。知道常見的人工智能應(yīng)用。 技能目標(biāo):能夠分析“AI會取代人類嗎?”這個問題。 情感目標(biāo):能夠?qū)I產(chǎn)生興趣,理性認(rèn)識AI。......