中國象棋人工智能實現

中國象棋在我看來最難的人工對戰中電腦怎能走這個問題,以下爲本人淺見,希望各位多多包涵!

1.初步嘗試

電腦的優勢在於強大的計算能力,雖然其不知道怎麼走合適,但是它能夠模擬的將每一種走法都走一遍,選最優的走法來走。我們的思路就有了,首先需要解決兩個問題:

(1)怎麼判斷局面最優?

(2)怎麼模擬走?

第一個問題可以用每一個棋子的重要程度來打分,比如將最重要,所以給1000分,而車次之給100分,炮80等等

第二個問題因爲每一箇中國象棋實現方式不同,所以我分享一下本人代碼

電腦模擬走一步的代碼:

mov Board::getbestmove()
{
    /*
     * 1.獲取所有可能走的步數
     * 2.試着走一下
     * 3.看看局面怎麼樣
     * 4.選擇最好的走法
    */
    QVector<mov> canstep;
    canstep = getallstep();
    int maxscore = -100000;
    mov ret;
    for(auto it = canstep.begin();it!=canstep.end();it++)
    {
        mov step = *it;
        fakemove(step);             //模擬走一步
        int score = ctscore();        //計算局面分
        unfakemove(step);            //返回
        if(score>maxscore)            //計算最大的局面分
        {
            maxscore = score;
            ret.equal(step);
        }
    }
    qDebug()<<"get best move!!!";
    return ret;                        //得到最好走法
}

以上代碼可以實現電腦模擬走一步的場景,但是缺點也顯而易見。就是目光短淺,只考慮到自己走一步,並沒有考慮到對手走的一步,例如:我要吃電腦車,它會看着我吃,它只是遍歷了自己走一步局面分最大的走法,但是沒有考慮我走一步會造成的影響。

2.電腦模擬走兩步的走法

我們可以這樣設計--在電腦走一步後考慮我再走一步的結果,就是模擬兩步,比如輪到電腦走有n種走法,電腦走了一步人又有n種走法,在這n*n種選擇中再選最有利的---也就是局面分最大的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章