资源简介
这是清华人工智能的一个作业,用Alpha Beta算法求解一个剪枝问题,里面有严格的文件输入和输出,以及算法实现的全过程。
代码片段和文件信息
/**
* 实现Inter.java接口中的函数
* 不要添加 package语句
*/
import java.util.*;
import java.io.*;
public class AbPruning implements Inter{
/**
* 不要定义static 的变量
*/
final int MAX_INT=32767; //定义最大整数
final int MIN_INT=-32768; //定义最小整数
final int MAX=1; //极大层节点标志
final int MIN=0; //极小层节点标志
/**
* 以下结构定义了树结构的一个节点。
*/
public class Node
{
private String name; //节点名
private int value; //节点的值,在实际博弈程序中并不需要该值,这里为了显示得到的每个节点
//的倒推值,设置了该域。
private int leval;//节点处在极大层,还是在极小层
private String pFather;//该节点的父亲名字是什么
private ArrayList pChildren;//该节点的子节点
Node(String name)
{
this.name=name;
value=-1;
pFather=new String();
pChildren=new ArrayList();
}
}
private ArrayList NodeTree;
private String jianzhi[]; //存储剪枝的结果
private int count;
public void getStrategy(String inputFile){
/**说明:
这里是你的实现,对输入文件中描述的博弈树进行alpha-beta剪枝并输出剪枝后的结果
输入输出格式见作业文档,输出用系统标准输出System.out
your code here
*/
NodeTree=new ArrayList();
jianzhi=new String[20];
count=0;
readTree(inputFile);
/*for(int i=0;i {
System.out.print(NodeTree.get(i).name+“ “+NodeTree.get(i).value+“ “+NodeTree.get(i).pFather);
for(int j=0;j System.out.print(“ “+NodeTree.get(i).pChildren.get(j));
System.out.println();
}*/
Alph_Beta(NodeTree.get(0).name); //根节点开始用Alpha_Beta算法
//System.out.println(count);
String bestRoute=““;
for(int i=0;i {
if(NodeTree.get(0).value==NodeTree.get(search(NodeTree.get(0).pChildren.get(i))).value)
{
bestRoute=NodeTree.get(0).name+“ “+NodeTree.get(0).value+“ “+NodeTree.get(search(NodeTree.get(0).pChildren.get(i))).name;
break;
}
}
System.out.println(bestRoute);
for(int i=0;i {
System.out.println(jianzhi[i]);
}
}
void Alph_Beta(String str) //如考参数为节点名
{
boolean flag=false;
Node nNode=NodeTree.get(search(str));
/*System.out.print(nNode.name+“ “+nNode.leval+“ “+nNode.pFather);
for(int j=0;j System.out.print(“ “+nNode.pChildren.get(j));*/
if(nNode.leval==MAX) //当前节点是极大点
{
for(int i=0;i {
Alph_Beta(nNode.pChildren.get(i));//递归对子节点进行算法计算
if(nNode.value {
nNode.value=NodeTree.get(search(nNode.pChildren.get(i))).value;//将子节点的值给父亲节点
if(Beta(str))//是否在极大点出执行Beta剪枝
{
//在此处执行剪枝,则该节点后面的兄弟节点都被剪去
jianzhi[count]=str+“:“;
for(int j=i+1;j {
//System.out.println(nNode.pChildren.get(j));
jianzhi[count]=jianzhi[count]+“ “+nNode.pChildren.get(j);
flag=true;
}
if(flag==true)
{
co
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7495 2009-11-25 16:06 新建文件夹\AbPruning.java
文件 152 2009-11-11 00:59 新建文件夹\Inter.java
文件 287 2009-11-25 16:05 新建文件夹\Test.java
文件 472 2009-09-23 00:08 新建文件夹\tree1.txt
文件 1187 2009-09-23 00:08 新建文件夹\tree2.txt
目录 0 2009-11-30 19:49 新建文件夹
----------- --------- ---------- ----- ----
9593 6
- 上一篇:基于Fisher的人脸识别程序
- 下一篇:二手交易平台软件
评论
共有 条评论