当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 摘要:本文简单的介绍了计算机博弈算法。
 

 

 ·继承学习    »显示摘要«
    摘要:what 什么是继承?why 为什么要用继承?(继承有什么用?继承有什么优点?)how 怎么使用继承?when,where 什么时候,什么地方使用继承?if not 如果不使用继承,能否实现同样的设计,如果可以两个方案的区别又在什么地方what?继承是一个动词,相对与接口这一名词,理解上应该有所区别继承一种定义作为派生类基础的类的能力。派生类继承并可扩展基类的属性、方法和事件。派生类还可以用新的实......
    摘要:转:[ 分享] 我收集的ebook。自己肯定是看不完的,收集是为了给用的到的朋友。 http://www.itpub.net/259894.html ......


棋类游戏的智能模块设计――浅谈人工智能
上一页   ...       bestvalue=value;

      { 【程序编程相关:FedoraCore2正式版使用问题解决

      if(是初始局面) 【推荐阅读:[原创]用脚本控制Select的展开与折

      } 【扩展信息:VC数字图像处理编程讲座之四

        保存最佳走法;

    }

  }

  else

  {

    if(value<bestvalue)//取最小值

    {

      bestvalue=value;

    }

  }

}

return bestvalue;

}

这个极大极小搜索有些繁琐,需要根据当前走棋方来分别进行极大与极小搜索.考虑到对手的利益就是自己的损失,这样就引出了负极大搜索算法.它没有极大极小那么容易理解,但却很简洁,不用判断当前走棋方.但负极大中的估值却是对走棋方敏感的,因此函数参数中需要有一个走棋方的参数

long negamax(局面 p, ing side, int depth)//depth是搜索深度

{

  int bestvalue, value;

  if(depth<=0)//叶子节点

  {

返回估值(p, side);//直接返回对局面的估值

}

bestvalue=-inf;//初始最佳值设为负无穷

for(每一个合法的走法)//走法的生成与具体问题紧密相关,具体方法省略

{

  走一步棋;//局面p随之改变

  value= - negamax(p, opside, depth-1);//搜索子节点,注意前面的负号,opside是对手

  撤销刚才的一步;//恢复局面p

  if(value>bestvalue)//取最大值

  {

    bestvalue=value;

    if(是初始局面)

    {

      保存最佳走法;

    }

  }

}

return bestvalue;

}

看到这里,读者完全可以编写出一个黑白棋的智能模块来了.只要加上走法生成与估值函数就可以了.在压缩包里有我写的一个最简单的黑白棋智能模块程序,如果装了bcb6就可以直接编译.试验了.当然,为了说明原理,这个实例程序没有做优化,速度很慢.读者可以自己想办法优化它,比如用10*10的棋盘以避免边界检查,或者用一维数组来表示棋盘,用比特棋盘技术等,速度更快,我估计优化能提高性能至少30%.另外,估值部分也过于简单,棋力非常弱,同样读者可以自己编写估值函数来提高棋力.还有比如终局搜索等方面,读者也可以自己搜索相关的资料.

 

搜索算法的加强


...   下一页
 ·java中容易搞错的一些东东    »显示摘要«
    摘要:1)instanceof:实现了某接口的类的对象也是该接口的实例;某类的对象也是该类超类的实例。 2)native()修饰的方法没有方法体,用一个分号";"代替大括号。 3)main不是关键字。 4)system.exit(int value),也就是说,只要是int的,就能够使jvm退出system.exit(´a´);同样的是合法的。 5)&......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE