關於五子棋電腦AI演算法的一些思考

來源:互聯網
上載者:User

這個部分是一個重點,也是一個痛點,也是一個隊伍最有可能出彩的一部分。我看了一些資料,但是現在我有了新的想法。

 

大部分演算法中,都要進行兩步。第一步是優先順序的計算,然後是打分。但是我在想能不能通過某種數學模式把這兩種計算融合在一起。也就是說,我們能夠從所打的分中間識別出優先順序。這使我想到了數學十進位中的位。反正我最主要是從四個方向進行判定,所以某些優先順序低的,我們在給其打分的時候,就將它的分數設為處在其優先順序之上的十分之一。其實我覺得這裡只要大於其分數的八倍就可以,因為我最後選取最優位置的方法是累加法,算出分數和最高的位置,這樣的話,即使在四個方向上某較低優先順序都出現了,但是即使全加起來也不會超過較高優先順序的分數,這樣的話,如果出現優先順序較高的情況,那麼我們計算的結果必然是優先順序較高的分數最高。這樣,變省去了一些不必要的分類,使得演算法更直接,更容易理解。

 

首先我們先來看一下置棋時的優先順序分布以及我為其所指定的打分方案:

首先聲明的是,對於已經五子相連的情況,我們在此部分演算法中不再實現,因為這個時候勝負已經分出,我們調用checkboard類的judge的方法便可以了。這隻不過是在電腦AI後再將judge的代碼複製過去罷了。

我們的目的是給棋盤上的空位進行打分,進而算出分數最高的位置。那麼我在這裡想運用試探法,因為我覺得這樣的話代碼比較好寫。所謂試探法就是,我們找出棋盤上的所有空位,然後我們假設這個空位上放置的是白棋,然後看看相連的情況,然後打分,並將分數加至儲存該空位分數的變數;再假設這個空位上放置的是黑棋,然後再看相連的情況,然後打分,並將分數加至儲存該空位分數的變數;這樣遍曆完所有的空位的時候,我們便完成了打分工作,然後再比較空位的分數,選出分數最高的空位,該位置即為最優的位置。

下面是一些情況的優先順序排列:(假設我們是白棋)下列情況均為在該空位置棋之後:

在實現的時候,我們還需要定義兩個臨時的Checker指標變數,用來儲存相連的一串棋子前後的位置的狀態。color用來儲存棋子的顏色,count用來儲存相連的棋子的個數,temptr1與temptr2用來儲存兩端的棋子指標。文中的我們是電腦哦!

情況

所打分數

color=1&&count=5我們先贏,贏了再說

100 000 0000

Color=0&&count=5對方要贏,如果我們不能先贏,那麼一定得先阻攔

10 000 0000

Color=1&&count=4&&!temptr1&&!temptr2雙方均不會贏,如果我們能成活四,那麼敵方必輸,所以要先置棋

1 000 0000

Color=1&&count=4&&((!temptr1&&temptr2)||((temptr1)&&!temptr2))雙方均不會贏,那麼如果我們能成沖四,則要先置棋,牽著敵方的鼻子走,因為下過本步棋之後敵方一定會來阻止我們

100 0000

Color=0&&count=4&&!temptr1&&!temptr2雙方均不會贏,如果對方能成活四,那麼我們一定要優先阻攔,否則便會輸棋

10 0000

Color=1&&count=3&&!temptr1&&!temptr2雙方均不會贏,如果我們能成活三,則要優先這個位置

1 0000

Color=0&&count=4&&((!temptr1&&temptr2)||((temptr1)&&!temptr2))雙方均不會贏,如果敵方能成沖四,那麼我們要儘力阻攔

1 000

Color=1&&count=3&&((!temptr1&&temptr2)||((temptr1)&&!temptr2))雙方均不會贏,如果我們能成沖三,那麼要優先這個位置

1 00

Color=1&&count=2&&!temptr1&&!temptr2雙方均不會贏,如果我們能成活二,則要優先這個位置

1 0

Color=1&&count=2&&((!temptr1&&temptr2)||((temptr1)&&!temptr2))雙方均不會贏,如果我們能成沖二,那麼要優先這個位置

1

其他情況

0

這個演算法的主要思想是,對於敵方構不成威脅的情況,(即活四以下,但是這裡我們把沖四也算進來了,並賦予了較高的優先順序),我們暫不理會,而是一心想著自己怎麼能贏。這裡我們只能分成這麼多情況,因為假設我們的分數是long型的,那麼它的長度是32位,轉換成十進位,位元也就是10位,因而我選了最大的分數為1000 000 000,這樣剛好能滿足要求。

    但是這裡有個小小的問題,就是在剛開始落子的時候,怎麼落?我想這個時候我們可以事先設定某個空位的分值為髙值,落棋之後分數便置為0了。當對方先下的時候,我們就將第一個棋子放在對方棋子的周圍,啟動AI,這樣接下來問題便簡單了,因為一定會出現沖二,進而便是對方的活四,然後再防守,這樣一步步,便展開了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.