Hiển thị kết quả từ 1 đến 9 / 9
  1. #1
    Tham gia
    11-03-2003
    Location
    Nha Trang
    Bài viết
    4
    Like
    0
    Thanked 0 Times in 0 Posts

    Nước đi trong cờ tướng.

    Cho mình hỏi tí, trong chương trình VSCCPW, chương trình làm cách nào để biết được là nó phải đi quân nào để mà cho có lợi cho nó, cụ thể hơn là hàm nào trong chương trình đảm nhận trách nhiệm quyết định đi quân nào trong nước tiếp theo. Các bạn có thể giải thích giùm mình được không.
    Quote Quote

  2. #2
    Tham gia
    08-03-2003
    Bài viết
    16
    Like
    0
    Thanked 0 Times in 0 Posts
    Chương trình này viết bởi thầy Nguyên. Thầy này có trang chủ mới là http://www.nchess.com. Bên đó có cả forum đấy. Bạn nên sang đó hỏi trực tiếp thầy Nguyên thì hơn.

  3. #3
    Tham gia
    03-09-2002
    Location
    Tò mò quá !
    Bài viết
    421
    Like
    0
    Thanked 14 Times in 2 Posts

    Re: Nước đi trong cờ tướng.

    Bài viết được gửi bởi nguyennghivn
    Cho mình hỏi tí, trong chương trình VSCCPW, chương trình làm cách nào để biết được là nó phải đi quân nào để mà cho có lợi cho nó, cụ thể hơn là hàm nào trong chương trình đảm nhận trách nhiệm quyết định đi quân nào trong nước tiếp theo. Các bạn có thể giải thích giùm mình được không.
    Bạn thân mến ! Hì hì, mình thì khoái cờ và cũng từng ngồi code, và cũng đang học về AI, xin mạn phép trả lời bạn, nếu không đúng thì ... bỏ qua !

    Về nguyên tắc, trong các trò đối kháng, thường sử dụng 1 thuật toán vét để tìm ra nước đi tốt nhất. Dĩ nhiên là có level chứ không thể vét cạn được ! Vì sao thì chắc bạn biết rồi. Mỗi nước đi khi tính toán sẽ được gọi hàm lượng giá lên để cho biết điểm, tuỳ vào điểm của nước đi nào là tốt nhất, máy sẽ chọn nước đi đó. Thuật toán thường sử dụng là thuật toán Alpha_Beta. Bạn có thể tìm đọc thấy thuật toán căn bản này trong các sách về Trí Tuệ Nhân Tạo.

    Hiện nay, các chương trình chơi cờ giỏi, thường kết hợp Open-Book(file database lưu trữ các thế biến đã biết ) trong Khai cuộc nhằm tăng tốc độ tính toán và chọn được nước đi tối ưu nhất.
    Đã có nhiều cải tiến cho thuật toán Alpha_Beta, chủ yếu là bạn phải viết hàm lượng giá cho thật tốt, vì đó là sự quyết định cuối cùng cho 1 nước đi, và điều này thật sự không hề dễ dàng, cần kết hợp rất nhiều thứ , cả lượng, cả chất và cả kinh nghiệm !

    Chúc bạn viết được c.t đánh cờ hạ bệ được VSCCP !

  4. #4
    Tham gia
    08-03-2003
    Bài viết
    16
    Like
    0
    Thanked 0 Times in 0 Posts
    Hạ VSCP chắc không khó, tớ đánh thắng được chương trình này trong vòng 20 nước. Hi vọng vài tháng nữa chương trình của tớ viết viết cũng hạ đuợc nó

    Nhưng nghe nói chương trình cờ Robot là của thầy này và nó chơi bên clubxiangqi hay lắm, thường có điểm đứng đầu top 100. Tớ thử chơi với nó 5 ván rồi thì thua cả 5

  5. #5
    Tham gia
    11-03-2003
    Location
    Nha Trang
    Bài viết
    4
    Like
    0
    Thanked 0 Times in 0 Posts

    Chào !

    Cám ơn các bạn đã trả lời, đúng là chương trình dùng thuật toán Alpha Beta, giải thuật này dùng để duyệt trên cây trò chơi, trong giải thuật này có gọi đến hàm Eval, trong hàm Eval lại gọi hàm Bonus, nếu mình không nhầm thì 2 hàm này sẽ làm nhiệm vụ tìm ra nước đi mà máy cảm thấy có lợi cho nó nhất. Nhưng cái mà mình muốn hỏi là 2 hàm này nó hoạt động như thế nào. Còn về VSSCC mình có viết lại thành chương trình có giao diện to hơn và thêm một số chức năng như 2 người chơi, máy tự chơi, có duyệt thêm độ sâu nữa. Bạn nào có thích thì mình gửi cho.

  6. #6
    Tham gia
    08-03-2003
    Bài viết
    16
    Like
    0
    Thanked 0 Times in 0 Posts
    Bạn nên tìm mấy cái bài báo trên PCW về giải cờ tướng ấy. Đọc thì sẽ hiểu phần cơ bản. Còn để cái tiến để nó chơi hay hơn thì mệt đấy.

  7. #7
    Tham gia
    12-04-2003
    Location
    Doveton
    Bài viết
    48
    Like
    0
    Thanked 0 Times in 0 Posts
    Thân chào bạn nguyennghivn
    Nghe bạn nói bạn sẽ cho người nào thích cái software cờ tướng, vậy thì bạn có thể vui lòng cho gởi cho tôi 1 cái được không, địa chỉ: thancao@hotmail.com. Rất cám ơn bạn.

  8. #8
    Tham gia
    11-03-2003
    Location
    Nha Trang
    Bài viết
    4
    Like
    0
    Thanked 0 Times in 0 Posts

    Hi

    Mấy bài trên PC World minh cũng đã đọc rồi, mình cũng nghiên cứu các hàm này rồi nhưng không hiểu, bữa nay đưa hai thủ tục này lên hi vọng bạn nào có thể giải thích giùm mình.
    short CBoard::Eval()
    {
    short i, s = 0;
    for(i=0; i<BOARD_SIZE; i++) {
    if (m_color[i]==DARK) s += pointtable[m_piece[i]][DARK][i];
    else if (m_color[i]==LIGHT) s -= pointtable[m_piece[i]][LIGHT][i];
    }
    if (m_side==LIGHT) s = -s;
    return s + Bonous();
    }
    short CBoard::Bonous()
    {
    short i, s, bn[2][7] = {{-2, -3, -3, -4, -4, -5, 0},
    {-2, -3, -3, -4, -4, -5, 0}};

    for (i = 0; i < 2; i++) { // Scan DARK and LIGHT
    if (m_materialnumber[i][BISHOP] < 2) {
    bn[1-i][ROOK] += 4;
    bn[1-i][KNIGHT] += 2;
    bn[1-i][PAWN] += 1;
    }

    if (m_materialnumber[i][ELEPHAN] < 2) {
    bn[1-i][ROOK] += 2;
    bn[1-i][CANNON] += 2;
    bn[1-i][PAWN] += 1;
    }
    }

    if (m_color[0]==DARK && m_color[1]==DARK && m_piece[0]==ROOK && m_piece[1]==KNIGHT)
    bn[DARK][6] -= 10;
    if (m_color[7]==DARK && m_color[8]==DARK && m_piece[8]==ROOK && m_piece[7]==KNIGHT)
    bn[DARK][6] -= 10;
    if (m_color[81]==LIGHT && m_color[82]==LIGHT && m_piece[81]==ROOK && m_piece[82]==KNIGHT)
    bn[LIGHT][6] -= 10;
    if (m_color[88]==LIGHT && m_color[89]==LIGHT && m_piece[89]==ROOK && m_piece[88]==KNIGHT)
    bn[LIGHT][6] -= 10;

    s = bn[m_side][6] - bn[m_xside][6];

    for (i=0; i < 6; i++)
    s += m_materialnumber[m_side][i] * bn[m_side][i]
    - m_materialnumber[m_xside][i] * bn[m_xside][i];
    return s;
    }

  9. #9
    Tham gia
    17-12-2008
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •