•Alpha-Beta剪枝(Alpha-Betapruning)对于一般的最大最小搜索,即使每一步只有很少的下法,搜索的位置也会增长非常快;
在大多数的中局棋形中,每步平均有十个位置可以下棋,于是假设搜索九步(程序术语称为搜索深度为九),就要搜索十亿个位置(十的九次方),极大地限制了电脑的棋力。
于是采用了一个方法,叫“alpha-beta剪枝”,它大为减少了检测的数目,提高电脑搜索的速度。
各种各样的这种算法用于所有的强力Othello程序。
(同样用于其他棋类游戏,如国际象棋和跳棋)。
为了搜索九步,一个好的程序只用搜索十万到一百万个位置,而不是没用前的十亿次。
•估值这是一个程序中最重要的部分,如果这个模块太弱,则就算算法再好也没有用。
我将要叙述三种不同的估值函数范例。
我相信,大多数的Othello程序都可以归结于此。
棋格表:这种算法的意思是,不同的棋格有不同的值,角的值大而角旁边的格子值要小。
忽视对称的话,棋盘上有10个不同的位置,每个格子根据三种可能性赋值:黑棋、白棋和空。
更有经验的逼近是在游戏的不同阶段对格子赋予不同的值。
例如,角在开局阶段和中局开始阶段比终局阶段更重要。
采用这种算法的程序总是很弱(我这样认为),但另一方面,它很容易实现,于是许多程序开始采用这种逼近。
基于举动力的估值:这种更久远的接近有很强的全局观,而不像棋格表那样局部化。
观察表明,许多人类玩者努力获得最大的举动力(可下棋的数目)和潜在举动力(临近对手棋子的空格,见技巧篇)。
如果代码有效率的话,可以很快发现,它们提高棋力很多。
基于模版的估值:正如上面提及的,许多中等力量的程序经常合并一些边角判断的知识,最大举动力和潜在举动力是全局特性,但是他们可以被切割成局部配置,再加在一起。
棋子最少化也是如此。
这导致了以下的概括:在估值函数中仅用局部配置(模版),这通常用单独计算每一行、一列、斜边和角落判断,再加在一起来实现。
估值合并:一般程序的估值基于许多的参数,如举动力、潜在举动力、余裕手、边角判断、稳定子。
但是怎么样将他们合并起来得到一个估值呢?一般采用线性合并。
设a1,a2,a3,a4为参数,则估值s:=n1*a1+n2*a2+n3*a3+n4*a4。
其中n1,n2,n3,n4为常数,术语叫“权重”(weight),它决定了参数的重要性,它们取决于统计值。
2017/8/17 10:01:12 884KB 黑白棋 算法 论文
1
clearall;closeall;fs=8e5;%抽样频率fm=20e3;%基带频率n=2*(6*fs/fm);final=(1/fs)*(n-1);fc=2e5;%载波频率t=0:1/fs:(final);Fn=fs/2;%耐奎斯特频率%用正弦波产生方波%==========================================twopi_fc_t=2*pi*fm*t;A=1;phi=0;x=A*cos(twopi_fc_t+phi);%方波am=1;x(x>0)=am;x(x<0)=-1;figure(1)subplot(321);plot(t,x);axis([02e-4-22]);title('基带信号');gridoncar=sin(2*pi*fc*t);%载波ask=x.*car;%载波调制subplot(322);plot(t,ask);axis([0200e-6-22]);title('PSK信号');gridon;%=====================================================vn=0.1;noise=vn*(randn(size(t)));%产生乐音subplot(323);plot(t,noise);gridon;title('乐音信号');axis([0.2e-3-11]);askn=(ask+noise);%调制后加噪subplot(324);plot(t,askn);axis([0200e-6-22]);title('加噪后信号');gridon;%带通滤波%======================================================================fBW=40e3;f=[0:3e3:4e5];w=2*pi*f/fs;z=exp(w*j);BW=2*pi*fBW/fs;a=.8547;%BW=2(1-a)/sqrt(a)p=(j^2*a^2);gain=.135;Hz=gain*(z+1).*(z-1)./(z.^2-(p));subplot(325);plot(f,abs(Hz));title('带通滤波器');gridon;Hz(Hz==0)=10^(8);%avoidlog(0)subplot(326);plot(f,20*log10(abs(Hz)));gridon;title('Receiver-3dBFilterResponse');axis([1e53e5-31]);%滤波器系数a=[100.7305];%[10p]b=[0.1350-0.135];%gain*[10-1]faskn=filter(b,a,askn);figure(2)subplot(321);plot(t,faskn);axis([0100e-6-22]);title('通过带通滤波后输出');gridon;cm=faskn.*car;%解调subplot(322);plot(t,cm);axis([0100e-6-22]);gridon;title('通过相乘器后输出');%低通滤波器%==================================================================p=0.72;gain1=0.14;%gain=(1-p)/2Hz1=gain1*(z+1)./(z-(p));subplot(323);Hz1(Hz1==0)=10^(-8);%avoidlog(0)plot(f,20*log10(abs(Hz1)));gridon;title('LPF-3dBresponse');axis([05e4-31]);%滤波器系数a1=[1-0.72];%(z-(p))b1=[0.140.14];%gain*[11]so=filter(b1,a1,cm);so=so*10;%addgainso=so-mean(so);%removesDCcomponentsubplot(324);
2016/5/8 20:09:29 589KB matlab PSK 调制与解调
1
Type-C3.1母头90度四脚端子SMDIP24pinAD.PcbLib格局A1~A12为SMD贴片引脚B12~B1为DIP插脚带3D视图Type-C3.1母头四脚90度卧式
2016/6/7 23:30:55 211KB PcbLib Type-C3.1_24Pin
1
#include#includeusingnamespacestd;intchoice;inta=0,b=0,c=0,d=0;intuser_input;voidS(intColor){HANDLEhCon=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,Color);}voidwait(){Sleep(100);user_input=getchar();}voidcls(){Sleep(100);system("cls");}intmain(intargc,char*argv[]){S(172);start:cls();gotoa1;gameover:printf("游戏结束。
");printf("按回车键继续");user_input=getchar();gotostart;a1:printf("现在游戏开始。
");user_input=getchar();printf("一天,你正在开飞机经过一片雪山区。
");wait();printf("忽然你的操作系统失控了,飞机直直地坠入山中。
");wait();printf("你朝两旁看了看,左边是雪地,右边是树林。
而你正前方是悬崖,所以你不得不转弯。
\n1-左转。
\n2-右转。
\n");s1:wait();switch(user_input){case'1':gotoa8;case'2':gotoa13;default:gotos1;}a2:cls();printf("你下了飞机,走向树林。
");wait();printf("过了一会儿,你感到又饿又冷,就喝了一点威士忌,坐下休息。
");wait();printf("但是,威士忌并没有让你觉得温暖。
你只是觉得很冷、很冷。
\n");gotogameover;a3:cls();printf("你吃了一些果实,还摘了一些放在口袋,想晚一点吃。
");wait();printf("过了一会儿,你的肚子剧烈的痛起来。
这时,你才意识到,果子有毒!\n");gotogameover;a4:cls();printf("你能否要继续往隧道里走?\n1-是。
\n2-不了。
\n");s4:wait();switch(user_input){case'1':gotoa18;case'2':gotoa22;default:gotos4;}a5:cls();printf("你能带三件东西下飞机。
请选择:\n1-香蕉、打火机、外套。
\n2-威士忌、外套、匕首。
\n");s5:wait();switch(user_input){case'1':gotoa10;case'2':gotoa2;default:gotos5;}a6:cls();printf("你走到了隧道里,隧道里很黑,忽然你被一个东西绊倒了。
\n");wait();printf("你爬起来,看了看地上的东西,原来是一条麻绳。
\n1-捡起来。
\n2-置之不理。
\n");s6:wait();switch(user_input){case'1':gotoa11;case'2':gotoa23;default:gotos6;}a7:cls();printf("你呆在飞机里,感到越来越冷,你不得不离开了飞机。
\n");gotoa5;a8:cls();printf("随着“噗”地一声闷响,你的飞机安全降落在雪地上。
");wait();printf("你要离开飞机去找东西吗?\n1-离开。
\n2-待着。
\n");s8:wait()
2020/2/14 7:27:53 1.84MB C++ 代码类 游戏 生存
1
运行环境操作系统:WindowsXP。
Java平台:JDK1.5。
Web服务器:Tomcatv5.5.23,下载地址:http://tomcat.apache.org/。
数据库服务器:MySQLv5.0.45,下载地址:http://www.mysql.com/。
开发平台:EclipseSDKv3.2.2,下载地址:http://www.eclipse.org/download/index.jsp。
Eclipse插件TomcatPluginsv3.2.1,下载地址:http://www.eclipse-plugins.info/eclipse/index.jsp。
Eclipse插件ResourceBundleEditorv0.7.7,下载地址:http://resourcebundleeditor.com/。
Eclipse插件MyEclipsev5.5.1,下载地址:http://www.myeclipseide.com/Spring采用2.0版本Hibernate采用3.0版本======================================================请注意:如出现中文乱码,检查如下配置能否正确。
(1)MySql数据库能否是utf-8格式(在安装时选择支持多语言),数据能否正常。
(2)项目能否为utf-8格式(同时看看的源代码文件中,中文能否乱码)。
(3)JSP页面能否是utf-8格式。
(4)在web.xml能否配置了编码过滤器。
(5)数据源配置的url(?useUnicode=true&characterEncoding=UTF-8),具体请看项目实例。
如果上面5步都没问题,你就不存在中文乱码问题。
======================================================数据库使用的是MySQL,其版本为5.0.45版本。
数据库的用户名及密码均为root。
使用的时候,请参考附件数据库导入一节。
或将需要用到的某章的数据库目录复制到“mysql安装根目录\data”文件夹下就可以了。
★★★★★★★★★★★★★★★★★★★★★★★★★该实例来源下面这本书《精通JavaEE项目案例-基于EclipseSpringStrutsHibernate》本书下载链接,电驴,迅雷皆可ed2k://|file|%E7%B2%BE%E9%80%9AJava.EE%E9%A1%B9%E7%9B%AE%E6%A1%88%E4%BE%8B-%E5%9F%BA%E4%BA%8EEclipse.Spring.Struts.Hibernate%E5%85%89%E7%9B%98%E6%BA%90%E7%A0%81.rar|70436209|475e7c3548acf955e89e378e760cf894|h=caud4x2auasf3pl2ln27e35fjw2jwxyb|/
2021/6/15 19:01:25 19.28MB Spring Struts Hibernate Java
1
采用Adams嵌入原子势(EAM),利用分子动力学方法对单晶A1的熔化过程进行了模仿,分析了A1样品体熔化过程中结构、能量的变化及表面熔化过程中固一液界面的移动情况。
模仿的结果表明:对于A1样品体熔化过程,体系的体积和内能在1205K发生突变;通过计算1000-1200K下A1的表面熔化速度,得出热力学熔点为985K,与存在的实验结果基本吻合。
2022/9/7 12:04:52 2.48MB 自然科学 论文
1
CAD全套模板,内容非常全面,A1到A4带有边框,图层款式,文字款式都设置完好。
2022/9/3 13:08:49 122KB CAD 模板
1
经过判断//成功实现粗略差速intDirmin=257;intDirmax=387;intAccmin=160;intAccmax=885;constintxpin=A1;//x-axisconstStringXHEADER="X:";voidsetup(){//putyoursetupcodehere,torunonce:Serial.begin(9600);pinMode(A1,INPUT);//设置9号口为输出端口:pinMode(A0,INPUT);//设置10号口为输出端口:pinMode(9,OUTPUT);//设置9号口为输出端口:pinMode(10,OUTPUT);//设置10号口为输出端口:}voidloop(){intDir=analogRead(xpin);//Serial.print(XHEADER+analogRead(xpin));//Serial.print(analogRead(A0));//8Serial.println();//putyourmaincodehere,torunrepeatedly:intAcc=analogRead(A0);intAcc_2=map(Acc,Accmin,Accmax,0,255);intDir_2=map(Dir,Dirmin,Dirmax,0,255);//Serial.print(Dir);//Serial.println();if(Dir_2>=0&&Dir;_2136&&Dir;_2=120){analogWrite(9,Acc_2);analogWrite(10,Acc_2);}delay(300);//延时300毫秒}
2015/9/8 16:55:13 1KB arduin 小车
1
A学员系统:选择学员系统后直接让用户输入用户名密码进行登录登录后显示下面菜单Q.退出A1修改密码A2直接随机生成一套试题答题A3查询所有考试成绩A4导出所有考试成绩用户模块:登录、退出、修改密码考试模块:开始考试、查询成绩、导出成绩B管理员系统:选择管理员系统之后直接提示用户输入用户名密码,登录后显示下面菜单Q.退出B1添加考试学员B2删除考试学员B3修改考试学员B4查询考试学员B5添加考题B6修改考题B7删除考题B8查询考题按照id或者查询所有的B9批量导入考题
2015/5/24 10:36:29 2.19MB 数据库 客户端 服务端
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡