当前位置:首页 » 操作系统 » 打则算法

打则算法

发布时间: 2023-08-23 04:25:38

① 棋类游戏的算法有哪些

棋类游戏的算法有哪些

棋类游戏通常包含三大要素:棋盘、棋子和游戏规则,其中游戏规则又包括胜负判定规则、落子的规则以及游戏的基本策略。下面我来给大家讲讲各类棋类游戏的算法。

除了棋盘和棋子的建模,棋类游戏最重要的部分就是AI算法的设计。目前棋类游戏的AI基本上就是带启发的搜索算法,那么常用的搜索算法有哪些呢?

1. 博弈与博弈树

博弈可以理解为有限参与者进行有限策略选择的竞争性活动,比如下棋、打牌、竞技、战争等。根据参与者种类和策略选择的方式可以将博弈分成很多种,比如“二人零和、全信息、非偶然”博弈,也就是我们常说的零和博弈(Zero-sum Game)。所谓“零和”,就是有赢必有输,不存在双赢的结果。所谓“全信息”,是指参与博弈的双方进行决策时能够了解的信息是公开和透明的,不存在信息不对称的情况。比如棋类游戏的棋盘和棋子状态是公开的,下棋的双方都可以看到当前所有棋子的位置,但是很多牌类游戏则不满足全信息的条件,因为牌类游戏都不会公开自己手中的牌,也看不到对手手中的牌。所谓的“非偶然”,是指参与博弈的双方的决策都是“理智”的行为,不存在失误和碰运气的情况。

在博弈过程中,任何一方都希望自己取得胜利,当某一方当前有多个行动方案可供选择时,他总是挑选对自己最为有利同时对对方最为不利的那个行动方案。当然,博弈的另一方也会从多个行动方案中选择一个对自己最有利的方案进行对抗。参与博弈的双方在对抗或博弈的过程中会遇到各种状态和移动(也可能是棋子落子)的选择,博弈双方交替选择,每一次选择都会产生一个新的棋局状态。

假设两个棋手(可能是两个人,也可能是两台计算机)MAX和MIN正在一个棋盘上进行博弈。当MAX做选择时,主动权在MAX手中,MAX可以从多个可选决策方案中任选一个行动,一旦MAX选定某个行动方案后,主动权就转移到了MIN手中。MIN也会有若干个可选决策方案,MIN可能会选择任何一个方案行动,因此MAX必须对做好应对MIN的每一种选择。如果把棋盘抽象为状态,则MAX每选择一个决策方案就会触发产生一个新状态,MIN也同样,最终这些状态就会形成一个状态树,这个附加了MAX和MIN的决策过程信息的状态树就是博弈树(Game Tree)。

2. 极大极小值搜索算法

极大极小值(Min-Max)搜索算法是各种博弈树搜索算法中最基础的搜索算法。假如MAX和MIN两个人在下棋,MAX会对所有自己可能的落子后产生的局面进行评估,选择评估值最大的局面作为自己落子的选择。这时候就该MIN落子,MIN当然也会选择对自己最有利的局面,这就是双方的博弈,即总是选择最小化对手的'最大利益(令对手的最大利益最小化)的落子方法。作为一种博弈搜索算法,极大极小值搜索算法的名字就由此而来。

3. 负极大值搜索算法

博弈树的搜索是一个递归的过程,极大极小值算法在递归搜索的过程中需要在每一步区分当前评估的是极大值节点还是极小值节点。1975年Knuth和Moore提出了一种消除MAX节点和MIN节点区别的简化的极大极小值算法,称为负极大值算法Negamax。该算法的理论基础是:

max(a,b) = -min(-a, -b)

简单地将递归函数MiniMax()返回值取负再返回,就可以将所有的MIN 节点都转化为MAX节点,对每个节点的搜索都尝试让节点值最大,这样就将每一步递归搜索过程都统一起来。

4. “α-β”剪枝算法

有很多资料将“α-β”剪枝算法称为“α-β”搜索算法,实际上,它不是一种独立的搜索算法,而是一种嫁接在极大极小值算法和负极大值算法上的一种优化算法。“α-β”剪枝算法维护了一个搜索的极大极小值窗口:[α,β]。其中α表示在搜索进行到当前状态时,博弈的MAX一方所追寻的最大值中最小的那个值(也就是MAX的最坏的情况)。在每一步的搜索中,如果MAX所获得的极大值中最小的那个值比α大,则更新α值(用这个最小值代替α),也就是提高α这个下限。

而β表示在搜索进行到当前状态时,博弈的MIN一方的最小值中最大的那个值(也就是MIN的最坏的情况)。在每一步的搜索中,如果MIN所获得的极小值中最大的那个值比β小,则更新β值(用这个最大值代替β),也就是降低β这个上限。当某个节点的α≥β时,说明该节点的所有子节点的评估值既不会对MAX更有利,也不会对MIN更有利,也就是对MAX和MIN的选择不会产生任何影响,因此就没有必要再搜索这个节点及其所有子节点了。

5. 估值函数

对于很多启发式搜索算法,其“智力”的高低基本上是由估值函数(评估函数)所决定,棋类游戏的博弈树搜索算法也不例外。

估值函数的作用是把一个棋局量化成一个可直接比较的数字,这个数字在一定程度上能反映取胜的概率。棋局的量化需要考虑很多因素,量化结果是这些因素按照各种权重组合的结果。这些因素通常包括棋子的战力(棋力)、双方棋子占领的空间、落子的机动性、威胁性(能吃掉对方的棋子)、形和势等。

6. 置换表与哈希函数

置换表(transposition table)也是各种启发式搜索算法中常用的辅助算法,它是一种以空间换时间的策略,使用置换表的目的就是提高搜索效率。一般情况下,置换表中的每一项代表者一个棋局中最好的落子方法,直接查找置换表获得这个落子方法能避免耗时的重复搜索,这就是使用置换表能大幅提高搜索效率的原理。

使用置换表最大的问题是置换表的组织和查找的效率。一般来说,置换表越大,查找的命中率就越高。但这个关系不是绝对的,当置换表大小达到一定规模后,不仅不会再提高命中率,反而会因为耗时的查找操作影响算法的效率。所以置换表不是越大越好,需要根据计算机的性能以及搜索的深度选择一个合适的大小。此外,为了查找操作更高效,通常都会用可直接访问的哈希表方式组织置换表,哈希函数的性能就成为影响置换表性能的重要因素。棋类游戏普遍采用Zobrist哈希算法。

② 求问DND规则中的 攻防伤害公式算法

1先攻检定:1d20+属性调整值(一般为敏捷)+其他调整值(如专长、环境、士气等)来确定攻击顺序。
2攻击/命中检定:攻方为1d20+基本攻击加值+属性调整值(一般为敏捷/力量)+体型调整值+其他调整值vs防守方的ac=10+防具调整值(盔甲+盾牌)+属性调整值(一般为敏捷)+体型调整值+其他调整值。如果攻方大于守方ac则命中,反之,未命中。
3伤害投骰:如果命中,伤害=武器伤害(如长剑1d8)+属性调整值+其他调整值(如附魔武器)+守方的伤害减免(如果有的话)
基本就是这样,副手、双持、重击等详细情况请阅读 玩家手册~
可以看出dnd中的ac是免伤,不是一般其他游戏的减伤。

③ 长沙麻将算法

1、长沙麻将详解:长沙麻将算法是胡牌+中鸟(一般两个鸟,中一个就按下面的计算方式乘以2,中两个就乘以3)。

2、小胡:闲家一番,庄家两番,然后再看中鸟。

3、大胡:大胡只有清一色、小七对、将将胡、碰碰胡、全求人、杠上花、海底捞。每个大胡算法是一样的,即闲家六番,庄家七番。然后再看中鸟。

4、多大胡:会有多大胡的情况,比如清一色的杠上花,龙七对,碰碰胡的全求人的杠上花,那么算法就是这样的,一个大胡在没有算鸟的情况下算一盒,两个大胡就是两盒,三个就是三盒,再算中鸟。

麻将起源

1、我们俗称“饼”,它其实是一个粮仓屯(土话)的正上方俯视图,也就是说”筒“是一个抽象的截图。大家可以结合搜一个粮仓图(暂没有找到合适的俯视图给大家)。储粮食的时候,人们用席子围成一个桶状的立柱空间,粮食储存在里面,为了防漏雨,顶是两圈草垫以同心圆叠盖结成。

2、因此,从粮仓的正上方俯视下来,我们看到的抽象事物就是一个“筒”,两个粮仓就是两个“筒”,以此类推到“九筒”。后来因打仗传到南方后,叫法上出现了“饼”的读音,是一种看图说话的缘故,但这个错误也很普遍地沿袭了下来,让人们对麻将的历史理解越来越远。

基础

1、一般长沙麻将需要任意花色2、5、8序数做将,才能胡牌。

2、少数特殊牌型可以不需要任意花色2、5、8序数做将也能胡牌,后文会详细说明。

3、可吃、碰、杠,其中杠牌比较特殊分为“补杠”和“开杠”2种。

4、补杠胡牌时不算杠上花,开杠只有在听牌时才能开杠,开杠后不可以更改听张。

5、可自摸、放炮,有人胡牌时,立刻算扎鸟。

番型

1、长沙麻将的特色玩法,跟其他地方麻将,有着一种特殊的区别,那就是多一种起手胡。

2、起手胡是几种特殊牌型,当麻友们正好起手拥有这几种牌型,即可算做胡牌,(算完后继续打牌)。

3、起手一共分为4种番型,分别是四喜、板板胡、缺一门、六六顺。

4、四喜:起手手中有四张一样的牌。

5、板板胡:起完牌后,手中没有一张花色的2、5、8将牌。

6、缺一色:起手手上筒索万任意缺一门。

7、六六顺:起手手中有2个刻字。

牌型

1、烂胡子:就是屁胡+1番。

2、全球人:四副牌全是吃碰杠,胡他家打出的牌,6番。

3、碰碰胡:不必详细解释,一般麻友都懂,6番。

4、清一色:同一花色牌胡牌,不需要2、5、8做将,也是6番。

5、七对:手中7个对子自摸胡牌,6番。

④ 十三张扑克算法

积分规则算法如下:

1、牌面大小顺序:A>K>Q>J>10>9>8>7>6>5>4>3>2。

2、牌型大小顺序:一条龙>同花顺>四条>葫芦>同花>顺子>三条>两对>对子>散牌(乌龙)。

3、赢一墩:同一墩,大于其他某个玩家,自己加1注(头墩加1注,中墩加2注,底墩加3注)。

4、输一墩:同一墩,小于其他某个玩家,自己减1注(头墩减1注,中墩减2注,底墩减3注)。

5、强碰(打和):同一墩,与其他玩家大小一样,自己加0注。

游戏规则:

四人中一人为庄家,(也可以四人对比,) 庄家把除去大小王的一副牌牌分成四份,每份十三张。开牌前,各闲家向庄家下注。

各人把十三张牌排成三段(道),称头(道)、二道及尾(道)。头有三张,二道及尾各五张。头道必须小于二道,二道必须小于尾道,否则称为“相公”。凡“相公”者全赔。

头段因为只有三张牌,因此不算顺、花。只可能是不成花式(称无头),一对或三条。各人排好牌后,打开牌跟庄家比较大小。头跟头比,二道跟二道比,尾跟尾比。

比较时,先比牌型。牌型相同时,比点数。部分玩法的规则,比点数时由最大点数的牌比起,相同时比第二大的牌,如此类推。倘若完全相同,比最大点数牌的花色。

部分玩法的规则订成对庄家稍为有利:只比点数最大的一只牌。倘若相同,一律由庄家胜。任何一方遇上以下的组合通吃,称为“报到”。

⑤ 珠算的算法口诀

珠算四则运算皆用一套口诀指导拨珠完成。加减法,明代称“上法”和“退法”,其口诀为珠算所特有,最早见于吴敬《九章算法比类大全》(1450)。乘法所用的“九九”口诀,起源甚早,春秋战国时已在筹算中应用。北宋科学家沈括在其《梦溪笔谈》卷十八中介绍“增成法”时说:“唯增成一法稍异,其术都不用乘除,但补亏就盈而已。假如欲九除者增一便是,八除者增二便是,但一位一因之”。“九除者增一”,后来变为“九一下加一”,“八除者增二”后来变为“八一下加二”等口诀。可见“增成法”就是“归除法”的前身。杨辉在《乘除通变算宝》中,叙述了“九归”,他在当时流传的四句“古括”上,添注了新的口诀三十二句,与现今口诀接近。元代朱世杰的《算学启蒙》(1299,卷上)载有九归口诀三十六句,和现今通行的口诀大致相同。14世纪中丁巨撰算法八卷(1355),内有“撞归口诀”。总之,归除口诀的全部完成在元代。有了四则口诀,珠算的算法就形成了一个体系,长期沿用了下来。

⑥ 算法与程序的区别与联系

算法和程序的区别是:

(1) 两者定义不同。算法是对特定问题求解步骤的描述,它是有限序列指令。而程序是实现预期目的而进行操作的一系列语句和指令。

说通俗一些算法是解决一个问题的思路,程序,是解决这些问题所具体好写的代码。算法没有语言界限。他只是一个思路。为实现相同的一个算法,用不同语言编写的程序会不一样。

(2)两者的书写规定不同。程序必须用规定的程序设计语言来写,而算法很随意。算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些逻辑判断。

简单算法举例 例:求 1*2*3*4*5

步骤 1 :先求 1*2 ,得到结果 2 。

步骤 2 :将步骤 1 得到的乘积 2 再乘以 3 ,得到结果 6 。

步骤 3 :将步骤 2 得到的乘积 6 再乘以 4 ,得到结果 24 。

步骤 4 :将步骤 3 得到的乘积 24 再乘以 5 ,得到最后结果 120 。

算法与程序的联系 :

算法和程序都是指令的有限序列 ,但是程序是算法,而算法不一定是 程序。程序 = 数据结构 + 算法。算法的主要目的在于为人们提供阅读了解所执行的工作流程与步骤。数据结构与算法要通过程序的实现,才能由计算机系统来执行。可以这样理解,数据结构和算法形成了可执行的程序。

(6)打则算法扩展阅读

算法的要素:

一、数据对象的运算和操作:计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:

1、算术运算:加减乘除等运算。

2、逻辑运算:或、且、非等运算。

3、关系运算:大于、小于、等于、不等于等运算。

4、数据传输:输入、输出、赋值等运算。

二、算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

热点内容
安卓内存很大为什么还是卡 发布:2025-03-07 05:43:53 浏览:533
什么配置的车厉害 发布:2025-03-07 05:43:06 浏览:455
魅族应用加密 发布:2025-03-07 05:41:51 浏览:652
c盘windows文件夹多大 发布:2025-03-07 05:35:58 浏览:614
长江存储净资产 发布:2025-03-07 05:35:50 浏览:217
gridview加载数据库 发布:2025-03-07 05:20:31 浏览:371
miui默认存储位置 发布:2025-03-07 05:20:30 浏览:848
hookandroidapi 发布:2025-03-07 05:19:33 浏览:461
存储器的主要指标 发布:2025-03-07 05:16:55 浏览:871
comtaobaotaobao文件夹 发布:2025-03-07 04:53:18 浏览:693