Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

写一个gnu prolog程序用α-β搜索玩黑白棋(Reversi)

2 posters

向下  留言 [第1页/共1页]

wowsfsf



原题为英文,之后翻译
Write a program that uses alpha-beta search to play Othello. For the rules please
see http://en.wikipedia.org/wiki/Reversi
For the evaluation function use a weighted combination of the following three
parameters:
• Number of discs of given colour.
• Number of legal moves that one can make given the board position.
• Weights of the squares covered by the discs. Not all the squares have the
same value strategically. Squares on which the discs cannot be flipped ever
again should potentially have more weights.
A good evaluation function will use a suitable combination of the parameters
above. One of the goals of the projects is to determine the right choice of
parameters.
The program should be able to handle a time limit on each move. The time limit
can be addressed by performing an iterative deepening version of the alpha-beta
search. You may wish to use a depth parameter as the cutoff for the search.
Please submit the code, and a write-up (in pdf) containing the code description,
and the details of the evaluation function used.
1

yauhsien



岔岔题,请问这题目的来源是大学上课的project吗?

http://yauhsien.wordpress.com

wowsfsf



yauhsien 写道:岔岔题,请问这题目的来源是大学上课的project吗?
是的

yauhsien



先对一对题目需求:

wowsfsf 写道:原题为英文,之后翻译
Write a program that uses alpha-beta search to play Othello. For the rules please
see http://en.wikipedia.org/wiki/Reversi

且说要你写Prolog程序用a-b搜索玩黑白棋。玩法大概就是夹杀,大意说可以下子在同颜色棋子绕过一直线的许多不同颜色的棋子的对边,接着将夹杀的不同颜色棋子颜色翻转:例子如下,
代码:
无无白白白黑无
=> 无黑白白白黑无 (下子在黑的对边)
=> 无黑黑黑黑黑无 (夹杀的白棋子翻转为黑棋子)
有子可下就下,而没子可下,可以pass。当二方都没子可下时,就是统计二方棋子数目的时候。

wowsfsf 写道:
For the evaluation function use a weighted combination of the following three
parameters:
• Number of discs of given colour.
• Number of legal moves that one can make given the board position.
• Weights of the squares covered by the discs. Not all the squares have the
same value strategically. Squares on which the discs cannot be flipped ever
again should potentially have more weights.
A good evaluation function will use a suitable combination of the parameters
above. One of the goals of the projects is to determine the right choice of
parameters.
The program should be able to handle a time limit on each move. The time limit
can be addressed by performing an iterative deepening version of the alpha-beta
search. You may wish to use a depth parameter as the cutoff for the search.

这段说的应是当你有好几个下子的位置时,权重决定可以在什麽位置下子。要用 Prolog 写个评价函数,函数用到的权重组合有三个参数:
  1. 一个颜色的棋子数目。我想是指下子方的颜色。
  2. 合理的下子位置,这位子可以用棋盘座标表示。
  3. 已经下子的格子的重量。如果一个格子上的棋子不可能被翻转了,照理说是有比较多的重量。


最後说time limit这段,我没看清楚。什麽是a-b搜索的轮流深度版?说可以用走访深度决定要切断搜寻路线,我猜可能是要避免无穷反覆搜索。

wowsfsf 写道:
Please submit the code, and a write-up (in pdf) containing the code description,
and the details of the evaluation function used.

最後这段是功课的需求。把程序和说明写成PDF交上去,评价函数的细节要交待。

http://yauhsien.wordpress.com

wowsfsf



yauhsien 写道:先对一对题目需求:

wowsfsf 写道:原题为英文,之后翻译
Write a program that uses alpha-beta search to play Othello. For the rules please
see http://en.wikipedia.org/wiki/Reversi

且说要你写Prolog程序用a-b搜索玩黑白棋。玩法大概就是夹杀,大意说可以下子在同颜色棋子绕过一直线的许多不同颜色的棋子的对边,接着将夹杀的不同颜色棋子颜色翻转:例子如下,
代码:
无无白白白黑无
=> 无黑白白白黑无 (下子在黑的对边)
=> 无黑黑黑黑黑无 (夹杀的白棋子翻转为黑棋子)
有子可下就下,而没子可下,可以pass。当二方都没子可下时,就是统计二方棋子数目的时候。

wowsfsf 写道:
For the evaluation function use a weighted combination of the following three
parameters:
• Number of discs of given colour.
• Number of legal moves that one can make given the board position.
• Weights of the squares covered by the discs. Not all the squares have the
same value strategically. Squares on which the discs cannot be flipped ever
again should potentially have more weights.
A good evaluation function will use a suitable combination of the parameters
above. One of the goals of the projects is to determine the right choice of
parameters.
The program should be able to handle a time limit on each move. The time limit
can be addressed by performing an iterative deepening version of the alpha-beta
search. You may wish to use a depth parameter as the cutoff for the search.

这段说的应是当你有好几个下子的位置时,权重决定可以在什麽位置下子。要用 Prolog 写个评价函数,函数用到的权重组合有三个参数:
  1. 一个颜色的棋子数目。我想是指下子方的颜色。
  2. 合理的下子位置,这位子可以用棋盘座标表示。
  3. 已经下子的格子的重量。如果一个格子上的棋子不可能被翻转了,照理说是有比较多的重量。


最後说time limit这段,我没看清楚。什麽是a-b搜索的轮流深度版?说可以用走访深度决定要切断搜寻路线,我猜可能是要避免无穷反覆搜索。

wowsfsf 写道:
Please submit the code, and a write-up (in pdf) containing the code description,
and the details of the evaluation function used.

最後这段是功课的需求。把程序和说明写成PDF交上去,评价函数的细节要交待。
时间限制那段应该可以翻译为
这个程序可以处理每一步移动的时间限制
这个时间限制可以通过一个迭代加深版的α-β搜索来执行
可以使用一个深度参数作为搜索的中止

yauhsien



谈基本的,我会把Othello/Reversi表达为
代码:
disc(black,4,5).
disc(black,5,4).
disc(white,4,4).
disc(white,5,5).

不过因不喜欢动态增添事实,我会先定义游戏以以下方式开始:
代码:
:- game([disc(black,4,5),
          disc(black,5,4),
          disc(white,4,4),
          disc(white,5,5)]).

http://yauhsien.wordpress.com

yauhsien



wowsfsf 写道:
时间限制那段应该可以翻译为
这个程序可以处理每一步移动的时间限制
这个时间限制可以通过一个迭代加深版的α-β搜索来执行
可以使用一个深度参数作为搜索的中止

你能译这个词,可知道译出来是什麽意思吗?

重点不在於你中文如何讲这个题目,而是你如何理解这个题目。像这题目,我可以提供我的解答,但知道假如我提供了解答之後,不会有什麽帮助。

由题目可见的讯息是:
  1. 出题者暗示你要跟他学一种默认的程序写法。
  2. 要写这一题,你要先读维基百科的Othello条目以及a-b搜索法条目,并且你要能把a-b搜索法对应到Othello所需的搜索场合。


他要的搜索,是说一个棋盘已经摆了一些棋子时,假设为黑子方出手,则要在几个可以下子的点之间,判断那一个点可以下子。方法就是给已在棋盘上的子定下各个权重,而每个可能下子的点都搜寻八个方向,把总共可以翻面的直线 (纵、横、斜) 加为总和等等。

然後你会问我,是否有gnu prolog的答案?

我的回答是,老师要你练习a-b搜索,你该做的是早该把a-b搜索树做过很多次gnu prolog的练习,之後你心底自然会有答案。

所以,在此是虽然我能给我的解答,但这样晒自己的解答根本没有意义,因为不会有人指出我的程序哪里写错、哪里写得表达不正确、以及怎样写得比较有效率,只会让人收走答案之後默默走人。

http://yauhsien.wordpress.com

返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题