PDA

View Full Version : Nước đi trong cờ tướng.



nguyennghivn
19-03-2003, 15:44
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.

congnu
26-03-2003, 10:26
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.

DragonPhoenix
17-04-2003, 13:29
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 !

congnu
19-04-2003, 19:34
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ó :D

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 :(

nguyennghivn
22-04-2003, 16:23
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.

congnu
26-04-2003, 23:53
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.

than
28-04-2003, 15:37
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.

nguyennghivn
02-05-2003, 14:40
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;
}

DAHALARDY
16-01-2009, 06:10
california labor board california labor board (http://sedrelolo.hostinginfive.com/california-labor.html) intel motherboard (http://sedrelolo.hostinginfive.com/intel.html) webmap http (http://deerheni.oamm.info/sitemap.htm) http://deerheni.oamm.info/article517.htm
model girl natural (http://deerheni.oamm.info/article876.htm) http://henlipn.hostinginfive.com/qasoloel.html
oe mail recovery 1.7.6 ****** oe mail recovery 1.7.6 ****** (http://ptakosit.hostinginfive.com/20090108-oe-mail-recovery.html) link (http://quacasit.hostinginfive.com/sitemap.htm) mason storm video mason storm video (http://quacasit.hostinginfive.com/article192.htm) http://sedrelolo.hostinginfive.com/sitemap.html
sitemap (http://koracdron.hostinginfive.com/sitemap.html) http://cpaspfoks.hostinginfive.com/blood-pressure-2009-01-09.htm