亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 怎樣編制黑白棋(1).txt

?? c語言的常用函數以及一些小游戲代碼,如文曲星小游戲、五子棋游戲等
?? TXT
字號:
怎樣編制黑白棋(1)

    黑白棋程序設計是用編程的方法教會電腦下黑白棋,使之可以與對手對抗,一較棋力高下。由于黑白棋的算法設計在各種棋類游戲中是比較簡單的,所以編程相對要容易,而棋力則可以達到非常的強,一般都可以擊敗它的設計者。黑白棋程序Logistello已于1997年大比分擊敗世界冠軍Takeshi Murakami。現在,人類玩者幾乎不可能擊敗強力的黑白棋程序,如Hannibal、Logistello、Wzebra、Keyano等。看來,要想擊敗他們,只有依靠自己的程序了。:)      
  
那么,怎樣設計黑白棋程序呢?以下將以Pascal語言為例加以說明。





    現在有如圖示的這樣一個棋局,輪到電腦下棋。現在它發現有這樣三個地方可以下:e3,c3,c5。這三種下法分別會形成三種局面:A、B、C。如果是人在下棋,就會思考:那一種下法更好呢?比如A被別人占角,B沒什么變化,C占了別人的角。當然棋手會選擇下C。電腦也是如此,它會對每一種棋局評一個分,比如它判斷,如果被別人占角,就減80分,相反占別人的角就加80分。那么A=-80分,B=0分,C=80分。電腦會選擇下C。電腦程序對棋局評分的部分,稱為“估值函數”(Evaluation Function)。真正的估值函數當然不會這么簡單。它會用到技巧篇提到的如行動力、潛在行動力、余裕手、邊角判斷、穩定子等綜合因素來判斷。具體的估值函數,我會在“估值函數”一節中詳細講述。 
  

初始棋局(-1)

------------------+------------------

|                 |                 |

e3                c3                c5

(A)               (B)               (C) 

  

  

    接下來,如果人就這么判斷。那么它頂多也就是個初學者。為什么呢?因為它不會推理,碰到對手棄角之類的戰術,如“邊角判斷”中示例的一些情況,就輸得一塌糊涂了。當然,可以告訴電腦,碰到“邊角判斷”中的幾種情況,就如何如何下。但是,真實的棋局是非常復雜的,電腦(也包括人腦)幾乎不可能對動態的棋局給出靜態的評估。因為實際對局總會出現這樣那樣的情況,是無法預先估計的。碰到這些情況,人就會向后推幾步,看一看會是怎樣的一個局面。一些棋類大師往往可以推十幾步甚至更深。電腦也是如此。 

    還是剛才那一幅圖的演化。 

  

-

-

-

電腦下棋

-

-

對手下棋

-

 
 初始棋局

------------------+------------------

|                 |                 |

e3                c3                c5

-----+-----        ----+----        -----+-----

|  |  |  |  |      |  |  |  |      |  |  |  |  |

 f2 f3 f4 f5 f6     c2 d3 e6 f5     b6 c6 d6 e6 f6 

+84+36+12 +5 -1    +11 -1 +6 +6     +6 +0 -5 +3 +5 

 
 

  

    電腦在自己下棋以后,把對手的下棋情況也推理出來。然后加以評分。(最下一排是電腦評估的得分)這一次電腦又如何下呢?這時電腦假設對手是高手。如果電腦下e3,對手就會下對電腦最不利的情況f6。同樣,電腦下c3,對手就會下d3,電腦下c5,對手就會下d6。這三種情況,c5是最不好的(因為c5的下一步d6的得分最低),c3與e3一樣。因此電腦會下c3或者e3。用程序化的語言這樣描述: 

    電腦從棋盤初始狀態出發,以后雙方輪流下子,形成一種倒樹狀結構。樹的層數就是電腦搜索的深度。在樹狀結構的葉子節點,對棋盤狀態進行估值,即估計形式的好壞。得出一個分值。將此分值賦給葉子節點,之后,如果父節點該電腦下棋,則將子節點的最大節點值賦給其父,如果父節點該對手下棋,則將子節點的最小節點值賦給其父。(就是說,四級節點把最大值賦給三級節點,三級節點把最小值賦給二級節點,二級節點把最大值賦給根節點...)以此類推,得到根節點的值。具有和根節點一樣值的二級節點即為電腦該下的位置。 

    這里讀者會有個疑問:電腦為什么要假設對手是高手?這是因為,如果你認為對手不是高手,但是不能說對手每一步都會下錯。比如你送對手一個角吃。對手如果吃掉了,豈非損失慘重?當然,如果你確定對手不會吃你的角,你也可以下,但是前提就是“你確定對手不會吃你的角”。也就是你完全明白對手的戰術。所以說如果一個程序完全了解另一個程序(或人)的下法,它也可以用針對性的下法,這將會更具成效。 

  
 
  
   如上圖所示棋局,設電腦為白棋,推理深度為2,可以形成如下的樹:(數字為節點值)

初始棋局

-

-

白棋下棋之后

-

-

黑棋下棋之后

估值
 初始棋局(-1)

------------------+------------------

|                 |                 |

e3(-1)            c3(-1)            c5(-5)

-----+-----        ----+----        -----+-----

|  |  |  |  |      |  |  |  |      |  |  |  |  |

 f2 f3 f4 f5 f6     c2 d3 e6 f5     b6 c6 d6 e6 f6 

+84+36+12 +5 -1    +11 -1 +6 +6     +6 +0 -5 +3 +5 
 
結果:應該下e3或c3 
 
具體實現的偽算法類似于經典的八皇后問題。

最大最小搜索:

var
  DepthMax: Integer;           //最大搜索深度
  max: Double;                 //最佳估值
  max_x, max_y: Integer;       //最佳值所在位置的x和y坐標

function MiniMax(Depth: Integer; Board: TBoard): Double; 
var
  I, J: Integer;
  Value, t: Double;
begin
  if Depth = 0 then                                     //根節點depth=DepthMax;葉子節點depth=0;
  begin
    Result := 估值;                                     //葉子結點估值返回
    Exit;
  end;
  if 電腦下棋 then                                      //電腦下棋的節點
    Value := -MaxInt                                    //節點賦初值,初始化為一個不可能達到的最小值
  else                                                  //對手下棋的節點
    Value := MaxInt;                                    //節點賦初值,初始化為一個不可能達到的最大值

  對于每一個合法的可下棋的位置(i,j) do
  begin
    保存棋局;
    下棋;
    t := MiniMax(depth - 1, Board);                     //遞歸調用
     
    if 電腦下棋 and (value < t) then                    //選擇節點中最大或是最小的值
      Value := t
    else if Value > t then
      Value := t;

    if (depth = DepthMax) and (Value > max) then        //如果值大于根節點值則賦值
    begin
      max := value;
      max_x := i;                                       //x坐標
      max_y := j;                                       //y坐標
    end;

    恢復棋局;
  end;
  Result := value;
end;
 
    進一步,假設從對手角度考慮形式判斷函數為g,則有g = -f。這樣,在深度優先搜索中,電腦下棋的結點時考慮取子結點中f最大的,而對手下棋的結點中取f最小的,也就是g最大的,這樣兩者就完全統一成取最大值。而在返回值時,只需要把符號改變一下,就可以把f和g值相互轉換了。這被稱為負最大搜索,它比最小最大搜索來得簡單。這樣,函數就簡化成如下形式: 
負最大搜索: 
function NegaMax(Depth: Integer; Board: TBoard): Double;
var
  I, J: Integer;
  Value, t: Double;
begin
  if Depth = 0 then                               //根節點depth=DepthMax;葉子節點depth=0;
  begin
    Result := 估值;                               //葉子結點估值返回
    Exit;
  end;
  
  Value := -MaxInt;                                //節點賦初值,初始化為一個不可能達到的最小值 
  對于每一個合法的可下棋的位置(i,j) do
  begin
    保存棋局;
    下棋;
    t := -MiniMax(depth - 1, Board);              //遞歸調用

    if t > Value then
      Value := t;

    if (depth = DepthMax) and (Value > max) then  //如果值大于根節點值則賦值
    begin
      max := value;
      max_x := i;                                 //x坐標
      max_y := j;                                 //y坐標
    end;

    恢復棋局;
  end;
  Result := value;
end;

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2023国产精品| 国产精品色哟哟网站| 91久久一区二区| 91香蕉视频污在线| 一本到高清视频免费精品| 色天天综合久久久久综合片| 99精品视频在线观看| 色拍拍在线精品视频8848| 91久久一区二区| 欧美精品亚洲一区二区在线播放| 欧美日韩国产天堂| 久久伊人蜜桃av一区二区| 久久看人人爽人人| 国产精品动漫网站| 香蕉成人伊视频在线观看| 裸体一区二区三区| 国产91精品露脸国语对白| 91麻豆国产福利精品| 欧美日韩色一区| 久久你懂得1024| 一区二区三区免费观看| 视频一区免费在线观看| 国产一区 二区| 色噜噜久久综合| 精品国产一区二区三区久久影院| 国产视频一区二区在线观看| 国产精品护士白丝一区av| 1000精品久久久久久久久| 午夜欧美在线一二页| 国产一区二区三区香蕉| 一本色道久久综合亚洲91| 欧美精品在线观看播放| 久久精品人人做人人爽97| 亚洲欧美日韩一区| 免费人成精品欧美精品| 成人国产一区二区三区精品| 欧美专区日韩专区| 久久精品欧美一区二区三区不卡 | 国产精品欧美久久久久一区二区| 一区在线观看视频| 捆绑变态av一区二区三区| 91麻豆蜜桃一区二区三区| 精品电影一区二区| 亚洲成人精品影院| www.成人在线| 欧美成人激情免费网| 一区二区三区欧美视频| 国产成人日日夜夜| 日韩三级精品电影久久久| 亚洲精品一二三区| 成人美女在线观看| 久久综合久久综合久久| 视频在线观看一区| 99国产精品久久久| 中文字幕第一区综合| 激情深爱一区二区| 8v天堂国产在线一区二区| 综合久久综合久久| 成人av网站免费| 久久久不卡网国产精品一区| 日本视频一区二区三区| 欧美亚洲国产bt| 亚洲欧美日韩国产综合在线| aaa欧美大片| 国产精品国产三级国产普通话三级| 精品一二三四在线| 日韩欧美国产一区二区三区| 亚洲va欧美va国产va天堂影院| 色综合夜色一区| 欧美综合亚洲图片综合区| 国产精品福利一区二区| av中文字幕亚洲| 亚洲精品日日夜夜| 色屁屁一区二区| 午夜精品福利在线| 欧美裸体一区二区三区| 日韩国产精品久久久| 欧美一二区视频| 国精产品一区一区三区mba视频 | 国产成人免费网站| 日本一区二区不卡视频| 粉嫩一区二区三区性色av| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 加勒比av一区二区| www国产亚洲精品久久麻豆| 韩国成人福利片在线播放| 精品福利一区二区三区免费视频| 国产一区二区三区四| 国产精品女上位| 欧美视频在线观看一区二区| 五月激情综合色| 国产亚洲综合性久久久影院| 成人性生交大片| 樱花影视一区二区| 欧美一区二区三区不卡| 激情久久五月天| 国产精品乱子久久久久| 亚洲精品一区二区三区99| 国产精品一区三区| 一区二区三区加勒比av| 欧美一区二区成人6969| 国产凹凸在线观看一区二区| 夜夜夜精品看看| 欧美videossexotv100| www.爱久久.com| 天堂精品中文字幕在线| www国产成人| 色天使色偷偷av一区二区| 精品系列免费在线观看| 中文字幕一区二区三区四区| 欧美精品自拍偷拍| 不卡高清视频专区| 午夜不卡av免费| 成人欧美一区二区三区| 在线观看91精品国产麻豆| 国产91露脸合集magnet| 日韩国产在线观看| 中文字幕制服丝袜成人av| 91精品国产色综合久久不卡蜜臀| 国产成人亚洲综合a∨婷婷| 香蕉久久夜色精品国产使用方法 | 日韩一区二区三区四区五区六区 | 亚洲精品视频在线看| www国产亚洲精品久久麻豆| 欧美丝袜丝交足nylons图片| 粉嫩蜜臀av国产精品网站| 五月综合激情日本mⅴ| 中文字幕在线不卡一区 | 国v精品久久久网| 日韩电影在线一区二区三区| 亚洲人成网站影音先锋播放| 久久久久久久久久久久久久久99| 欧美特级限制片免费在线观看| av不卡在线观看| 懂色一区二区三区免费观看| 久久精品免费观看| 五月天久久比比资源色| 一区二区三区 在线观看视频| 国产精品素人视频| 久久午夜国产精品| 精品国产凹凸成av人导航| 5566中文字幕一区二区电影| 在线观看日韩电影| 一本色道久久加勒比精品| 成人动漫一区二区| 成人精品视频一区| 91小视频免费看| 99精品桃花视频在线观看| 99久久精品免费| 99久免费精品视频在线观看| 国产精品1区2区3区在线观看| 韩国av一区二区三区在线观看| 久久精品国产99国产精品| 美女视频一区二区三区| 毛片一区二区三区| 裸体一区二区三区| 国产一区二区三区综合| 国产精品一区在线观看乱码 | 91精品国产高清一区二区三区蜜臀 | 欧美性猛片aaaaaaa做受| 一本久久综合亚洲鲁鲁五月天| www.亚洲精品| 欧美日韩一区在线| 欧美日韩一区高清| 777xxx欧美| 久久日韩粉嫩一区二区三区| 久久亚洲精品小早川怜子| 国产精品久久久久久亚洲毛片 | 亚洲视频 欧洲视频| 亚洲欧美另类久久久精品 | 国产亚洲欧美在线| 亚洲特级片在线| 亚洲一区二区三区在线| 免费观看久久久4p| 成人性生交大片免费看视频在线| aa级大片欧美| 91精品国产综合久久久蜜臀图片| 精品国产免费视频| 亚洲欧洲日本在线| 日韩高清在线电影| 成人在线视频一区二区| 欧美系列日韩一区| 久久久久国产精品人| 国产精品电影一区二区三区| 亚洲va欧美va国产va天堂影院| 国产综合久久久久久鬼色| 91视频一区二区三区| 9191成人精品久久| 最新国产精品久久精品| 免费观看日韩电影| 成人国产在线观看| 欧美精品18+| 中文字幕一区二区三区精华液 | 亚洲男同性视频| 寂寞少妇一区二区三区| 在线观看一区日韩| 国产欧美精品一区二区色综合朱莉| 一区av在线播放| 福利一区在线观看| 日韩三级电影网址|