⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 局面评估函数——简介(一).htm

📁 象棋程序设计全资料集(介绍编写象棋程序的方法思路)
💻 HTM
📖 第 1 页 / 共 2 页
字号:
  <DT><STRONG>  </STRONG><FONT face="Times New Roman"><STRONG>(2) 
  </STRONG></FONT><STRONG>空间</STRONG><FONT 
  face="Times New Roman"><STRONG>(Space)</STRONG></FONT><STRONG>:</STRONG>在某些棋类中,棋盘可以分为一方控制的区域,另一方控制的区域,以及有争议的区域。例如在围棋中,这个思想被充分体现。而包括国际象棋在内的一些棋类也具有这种概念,某一方的区域包括一些格子,这些格子被那一方的棋子所攻击或保护,并且不被对方棋子所攻击或保护。在黑白棋中,如果一块相连的棋子占居一个角,那么这些棋子就不吃不掉了,成为该棋手的领地。空间的评价就是简单地把这些区域加起来,如果有说法表明某个格子比其他格子重要的话,那么就用稍复杂点的办法,增加区域重要性的因素。 

  <DT>  
  <DT><STRONG>  </STRONG><FONT face="Times New Roman"><STRONG>(3) 
  </STRONG></FONT><STRONG>机动</STRONG><FONT 
  face="Times New Roman"><STRONG>(Mobility)</STRONG></FONT><STRONG>:</STRONG>每个棋手有多少不同的着法?有一个思想,即你有越多可以选择的着法,越有可能至少有一个着法能取得好的局势。这个思想在黑白棋中非常有效,国际象棋中并不那么有用。<FONT 
  face="Times New Roman">(</FONT>它也曾被使用,但现在国际象棋程序设计师们把它从程序中去掉了,因为它看起来对整个局面的评价质量没什么提高。<FONT 
  face="Times New Roman">)</FONT> 
  <DT>  
  <DT><STRONG>  </STRONG><FONT face="Times New Roman"><STRONG>(4) 
  </STRONG></FONT><STRONG>着法</STRONG><FONT 
  face="Times New Roman"><STRONG>(Tempo)</STRONG></FONT><STRONG>:</STRONG>这和机动性有着密切的联系,它指的是在黑白棋或连四子棋中<FONT 
  face="Times New Roman">(</FONT>以及某些国际象棋残局中<FONT 
  face="Times New Roman">)</FONT>,某方被迫作出使局面变得不利的着法。和机动性不同的是,起决定作用的是着法数的奇偶而不是数量。 
  <DT>  例如,考虑下面的连四子棋局面: 
  <DT>  
  <DIV align=center>
  <CENTER></DIV>
  <DT><IMG height=192 src="局面评估函数——简介(一)_files/evalue_intro2.gif" width=224> 
  </CENTER>
  <DIV></DIV>
  <DT>  
  <DT>  <FONT 
  color=#0000ff>【连四子棋的规则是:每个着子都必须位于某列的最底下一个空格,获胜条件是直线、横线或斜线有四个子相连。可以把连四子棋想象成带重力的五子棋。】</FONT> 

  <DT>  <FONT face="Times New Roman">1</FONT>、<FONT 
  face="Times New Roman">3</FONT>、<FONT face="Times New Roman">4</FONT>、<FONT 
  face="Times New Roman">7</FONT>列已经填满,因此只能在<FONT 
  face="Times New Roman">2</FONT>、<FONT face="Times New Roman">5</FONT>、<FONT 
  face="Times New Roman">6</FONT>列落子。第<FONT 
  face="Times New Roman">6</FONT>列的着子是中立的,哪方都不能利用该列得胜或失利。黑方控制第<FONT 
  face="Times New Roman">2</FONT>列,即红方不能在这里落子,因为这样可以让黑连成四子<FONT 
  color=#0000ff>【注意第</FONT><FONT face="Times New Roman" 
  color=#0000ff>3</FONT><FONT color=#0000ff>列到第</FONT><FONT 
  face="Times New Roman" color=#0000ff>5</FONT><FONT 
  color=#0000ff>列,已经有</FONT><FONT face="Times New Roman" 
  color=#0000ff>3</FONT><FONT color=#0000ff>个黑子形成斜线】</FONT>。任何一方都不能在第<FONT 
  face="Times New Roman">5</FONT>列着子,因为对方可以马上胜利<FONT 
  color=#0000ff>【注意该列倒数第</FONT><FONT face="Times New Roman" 
  color=#0000ff>3</FONT><FONT color=#0000ff>行的空格,任何一方走到该格,都会在第</FONT><FONT 
  face="Times New Roman" color=#0000ff>4</FONT><FONT 
  color=#0000ff>列到第</FONT><FONT face="Times New Roman" 
  color=#0000ff>7</FONT><FONT color=#0000ff>列</FONT><FONT face="Times New Roman" 
  color=#0000ff>(</FONT><FONT color=#0000ff>红方斜线,黑方横线</FONT><FONT 
  face="Times New Roman" color=#0000ff>)</FONT><FONT 
  color=#0000ff>连成四子】</FONT>。如果接下来是红先走,那么在第<FONT 
  face="Times New Roman">6</FONT>列走了<FONT 
  face="Times New Roman">3</FONT>步之后,黑方被迫走第<FONT 
  face="Times New Roman">2</FONT>列放弃对该列的控制,又是<FONT 
  face="Times New Roman">3</FONT>步后只能走第<FONT 
  face="Times New Roman">5</FONT>列让红方取得胜利。但是如果下一步是黑走,那么<FONT 
  face="Times New Roman">3</FONT>步之后会迫使红方输棋。 
  <DT>  像这种连四子棋的残局中,偶数空格的列是无关紧要的,重要的是计算只有一方可以走的奇数列。如果一方控制更多的奇数列,那么他就可能赢。如果双方控制的奇数列一样多,如上面的棋盘所示<FONT 
  face="Times New Roman">(</FONT>没有一列受红方控制,而黑方只控制一个偶数列<FONT 
  face="Times New Roman">)</FONT>,那么中立列的数量就非常重要了——如果它是奇数那么先走的一方会赢,如果它是偶数那么先走的一方会输。当然,这个简单的分析是建立在掌握复杂局势的基础上的,需要知道一方是如何控制某列上方的格子的。 

  <DT>  像围棋这样的游戏,并不存在这样严格的奇偶规则,但是哪方有“主动权”<FONT 
  color=#0000ff>【即“先手”】</FONT>仍然很重要,一方能选择走哪里,而另一方只能在同一个地方被迫应对。走一系列着子,每步都赢得一块小的地盘并让对手被迫应着,然后再来走棋以取得大地盘并让对手获得主动权,这通常是个好的思路。<FONT 
  color=#0000ff>【这里指的是在收官阶段,先走先手的小官子,然后再走后手的大官子。】</FONT> 
  <DT><FONT color=#0000ff>  【这里有一个中国象棋的排局,也包括类似奇偶性的主动权问题:</FONT> 
  <DT>  
  <DIV align=center>
  <CENTER></DIV>
  <DT><FONT color=#0000ff><IMG height=234 
  src="局面评估函数——简介(一)_files/evalue_intro3.gif" width=210></FONT> </CENTER>
  <DIV></DIV>
  <DT>  
  <DT><FONT color=#0000ff>  在这个局面中,双方的兵</FONT><FONT face="Times New Roman" 
  color=#0000ff>(</FONT><FONT color=#0000ff>卒</FONT><FONT face="Times New Roman" 
  color=#0000ff>)</FONT><FONT color=#0000ff>都不能离开原位,否则对方平帅</FONT><FONT 
  face="Times New Roman" color=#0000ff>(</FONT><FONT color=#0000ff>将</FONT><FONT 
  face="Times New Roman" color=#0000ff>)</FONT><FONT 
  color=#0000ff>即可造成铁门栓杀。双方的中炮不能离开中线,而三七路炮也不能离开该线,否则对方就会有闷宫杀。这样的棋型只能有一种取胜方法——用自己的两个炮顶住对方的两个炮,迫使对方让开兵</FONT><FONT 
  face="Times New Roman" color=#0000ff>(</FONT><FONT color=#0000ff>卒</FONT><FONT 
  face="Times New Roman" color=#0000ff>)</FONT><FONT color=#0000ff>或三七路炮。</FONT> 

  <DT><FONT 
  color=#0000ff>  这就衍生出一个数学游戏:有两堆石子,双方轮流从石子中拿去几颗,每次只能从一堆石子中拿走至少一颗石子,先拿完最后一堆者获胜。这个游戏的诀窍是:始终让对方面临两堆石子一样多的窘境。上面这个象棋局面中,两路炮之间的空格就好比两堆石子的数量,现在先走一方占有主动,因为两堆石子数量不一样多,他只要走一步让两堆石子数目一样就可以了。以红方先走为例,红方杀法及其黑方最顽强的抵抗如下:</FONT> 

  <DD>  
  <DD><FONT face="Times New Roman" color=#0000ff>1. </FONT><FONT 
  color=#0000ff>炮七进四 炮3进1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>2. </FONT><FONT 
  color=#0000ff>炮五进一 炮3进1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>3. </FONT><FONT 
  color=#0000ff>炮五进一 炮3进1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>4. </FONT><FONT 
  color=#0000ff>炮五进一 炮3进1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>5. </FONT><FONT 
  color=#0000ff>炮五进一 炮3退1</FONT> 
  <DT><FONT color=#0000ff>  若黑走炮3平5,则仕五进六、前炮平2、炮七平五做杀无解</FONT><FONT 
  face="Times New Roman" color=#0000ff>(</FONT><FONT 
  color=#0000ff>若黑走炮2平5解杀则构成长将</FONT><FONT face="Times New Roman" 
  color=#0000ff>)</FONT><FONT color=#0000ff>。</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>6. </FONT><FONT 
  color=#0000ff>炮七进一 炮3退1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>7. </FONT><FONT 
  color=#0000ff>炮七进一 炮3退1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>8. </FONT><FONT 
  color=#0000ff>炮七进一 炮3退1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>9. </FONT><FONT 
  color=#0000ff>炮七进一 卒6平7</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>10. </FONT><FONT 
  color=#0000ff>帅五平四 卒7进1</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>11. </FONT><FONT 
  color=#0000ff>帅四进一 卒7平8</FONT> 
  <DD><FONT face="Times New Roman" color=#0000ff>12. </FONT><FONT 
  color=#0000ff>兵四进一</FONT> 
  <DT>  
  <DT><FONT 
  color=#0000ff>  红方第一步若不走炮七进四,不管进哪个炮,主动权都让给了黑方,走炮七进八可以守和,其他着法都会让黑取胜。可见,主动权这一问题在很多棋类中都是存在的,然而这个知识写入棋类程序中很有难度。】</FONT> 

  <DT>  
  <DT><STRONG>  </STRONG><FONT face="Times New Roman"><STRONG>(5) 
  </STRONG></FONT><STRONG>威胁</STRONG><FONT 
  face="Times New Roman"><STRONG>(Threat)</STRONG></FONT><STRONG>。</STRONG>对手是否会有很恶劣的手段?你有什么很好的着法?例如在国际象棋或围棋中,有什么子可能要被吃掉?在五子棋或连四子棋中,某一方是否有可以连起来的子?在国际象棋或西洋棋中,有没有子将会变后或变王?在黑白棋中,一方是否要占角?这个因素必须根据威胁的远近和强度来考虑。 

  <DT>  
  <DT><STRONG>  </STRONG><FONT face="Times New Roman"><STRONG>(6) 
  </STRONG></FONT><STRONG>形状</STRONG><FONT 
  face="Times New Roman"><STRONG>(Shape)</STRONG></FONT><STRONG>。</STRONG>在围棋中,如果连起来的一串子围成两个独立的区域<FONT 
  face="Times New Roman">(</FONT>称为“眼”<FONT 
  face="Times New Roman">)</FONT>,那么它们就是安全的。在国际象棋中,并排的兵通常要比同一列的叠兵强大。形状因素是非常重要,因为局面的长远价值在几步内不会改变,也不会因为搜索而变化,这正是形状因素需要衡量的。<FONT 
  face="Times New Roman">(</FONT>搜索可以找到短期的手段来改进局面,所以评价本身需要包括更多的长远眼光,使得搜索可以察觉到。<FONT 
  face="Times New Roman">)</FONT><FONT color=#0000ff>【在中国象棋中,空头炮</FONT><FONT 
  face="Times New Roman" color=#0000ff>(</FONT><FONT 
  color=#0000ff>指被对手摆空头炮</FONT><FONT face="Times New Roman" 
  color=#0000ff>)</FONT><FONT 
  color=#0000ff>和窝心马是不好的形状,不太深的搜索不会察觉到它们的坏处,但是长远来看是这些形状会存在严重弊端,大多数程序的评价函数会直接对空头炮和窝心马进行罚分。】</FONT> 

  <DT>  
  <DT><STRONG>  </STRONG><FONT face="Times New Roman"><STRONG>(7) 
  </STRONG></FONT><STRONG>图案</STRONG><FONT 
  face="Times New Roman"><STRONG>(Motif)</STRONG></FONT><STRONG>。</STRONG>一些常见的具有鲜明特点的图案,蕴涵着特殊的意义。例如在国际象棋中,象往往可以吃掉边兵,却会被边上的兵困住。当象被困住时,对手可能还需要很多步才会吃掉它,因此被困的情形不容易被计算机的搜索程序所发现。有些程序通过特殊的评价因素来警告电脑,吃掉那个边兵可能会犯错误。在黑白棋中,在角落的邻近格子上放一个子来牺牲一个角,往往是非常有用的,这样当对手占领这个角时,就可以在这个子的边上放一个提不掉的子,从而在另一个角上取得优势。 

  <DIV align=left></DIV>
  <DT>  
  <DIV></DIV>
  <DIV align=center>
  <CENTER></DIV>
  <DT><IMG height=104 src="局面评估函数——简介(一)_files/evalue_intro4.gif" width=256> 
  </CENTER>
  <DIV></DIV>
  <DT>  
  <DT>  上图中,白方牺牲了右下角。 
  <DT>  当黑方走右下角时,白方在边上走子,然后赢得了左下角。<FONT 
  color=#0000ff>【黑方只得到一个角,而白方得到了一个角连同边线上的</FONT><FONT face="Times New Roman" 
  color=#0000ff>6</FONT><FONT color=#0000ff>子,白大优。】</FONT> 
  <DT>  对这种牺牲做特别的评价也许是很有必要的,它可以决定是否需要做牺牲,或者来衡量边线上的子是否能抵挡这种牺牲手段。 
  <DT>  
  <DT>  原文:<A href="http://www.ics.uci.edu/~eppstein/180a/990114.html" 
  target=_blank><FONT 
  face="Times New Roman">http://www.ics.uci.edu/~eppstein/180a/990114.html</FONT></A> 

  <DT>  译者:黄晨 <FONT face="Times New Roman">(</FONT><A 
  href="mailto:webmaster@elephantbase.net"><FONT 
  face="Times New Roman">webmaster@elephantbase.net</FONT></A><FONT 
  face="Times New Roman">)</FONT> 
  <DT>  类型:全译加译注 </DT></DL>
<DIR>
<LI>上一篇 <A 
href="http://www.elephantbase.net/computer/advanced_instability.htm">高级搜索方法——搜索的不稳定性</A> 

<LI>下一篇 <A 
href="http://www.elephantbase.net/computer/evalue_intro2.htm">局面评估函数——简介<FONT 
face="Times New Roman">(</FONT>二<FONT face="Times New Roman">)</FONT></A> 
<LI>返 回 <A href="http://www.elephantbase.net/computer.htm">象棋百科全书——电脑象棋</A> 
</LI></DIR>
<DIV align=center>
<CENTER>
<TABLE border=0>
  <TBODY>
  <TR>
    <TD>
      <P align=center><A href="http://www.elephantbase.net/" target=_blank><IMG 
      height=31 src="局面评估函数——简介(一)_files/elephantbase.gif" width=88 
      border=0></A></P></TD></TR>
  <TR>
    <TD><A href="http://www.elephantbase.net/" target=_blank><FONT face=Arial 
      size=2><STRONG>www.elephantbase.net</STRONG></FONT></A></TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -