【斗地主技巧】斗地主算法逻辑中的天之道转

2023-10-31 14:20

本文主要是介绍【斗地主技巧】斗地主算法逻辑中的天之道转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

********************************************************************

作者比较喜欢玩斗地主,所以经常搜集一些网友斗地主的心得,下面这一篇,我感觉写得不错,特转载,与网友分享。原文链接

棋牌游戏推荐:JJ比赛

我比较喜欢在这上面玩,可以赢话费,而且积累的金币其实是可以兑换成人民币的,网上有人回收。

********************************************************************

声明:本博客的文章,主要是探究斗地主游戏算法的计算机实现。顺便介绍其中的本质性内容。如有游客照此操练,输了家当,本博客概不负责。

 

  要在一轮斗地主游戏中获胜,手持的牌,需要具备一定的条件。首先是各中牌型需要有控制力,通常,炸弹、顶级牌型是有控制力的牌;其次,各种牌型的资源消耗要足够小。请看下面的例子,来深入理解这段话。

  为简化问题的描述,假设是双人游戏,用红方与黑方来表示。红方手持7、6、5三个单子,而黑方手持8、6、5三个单子,轮到红方出牌。在此残局中,红方先出6能获胜,出5、7都失败。看起来很简单,但为什么出6能获胜,这其中包含的道理是什么?

  要说清楚其中的道理,先要做点铺垫工作。

  首先我们假设,对于最小的单子3,当发出这张单子后,如果要收回控制权,那么手中必须要有顶级大牌,通常,对于单子,顶级大牌就是大王(暂时不考虑炸弹),这时,我们就定义,3消耗了一个完整资源,反过来,也就是说,3的资源产生能力为负值,我们用记号3(-1)来表示。括弧中的-1表示负资源。

  以此类推,单子5,6,7,8的资源产生能力简记为 5(-0.9)、6(-0.8)、7(-0.7)、8(-0.6)。这样假设后,通过简单累加括弧中数字,我们就可以得到红方与黑方的资源产生能力,如下,

  红方资源产生能力 = 5(-0.9) + 6(-0.8) + 7(-0.7) = -0.9 - 0.8 - 0.7 = -2.4
  黑方资源产生能力 = 5(-0.9) + 6(-0.8) + 8(-0.6) = -0.9 - 0.8 - 0.6 = -2.3

  另外,黑方的8,在此残局中,是顶级大牌,属于具有绝对控制权的一张牌,其资源产生能力是正的,算作+1,这样:
红方资源产生能力 = -2.4, 黑方资源产生能力 = -1.3.

  从上面的两个数字中可以看到,红方牌的资源产生能力比黑方弱,表面上看,红方似乎必败。当然,如果是黑方先手,黑红具有资源优势,只要黑方不先出8,红方是没有赢的可能的。这里,红方具有优先决定权,他需要决策出哪张牌。那么红方的决策依据是什么?

  我们来观察双方各自出掉一张牌后的,手中持有牌的资源产生能力,

红方

出牌/ 剩余牌的资源产生能力
5 -1.5
6 -1.6
7 -1.7

黑方
出牌/ 剩余牌的资源产生能力
5 -1.4 -0.4(加算牌张8的绝对控制力)
6 -1.5 -0.5(加算牌张8的绝对控制力)
8 -1.7 -2.7(加算牌张8的绝对控制力)

上述计算结果,我们用图表来表示,看得更清楚一点

斗地主算法逻辑中的天之道

  从上图,我们可以看到,当黑方某牌张消失后,黑方剩余牌的资源产生能力将严重恶化,至少不比红方占有,此变化点出现在第二手牌之后。这是黑方的死穴。这样,红方的决策目标就是寻找这样的死穴。
红方先手出5,黑方盖过6后,黑方剩余牌的资源产生能力仍然强于红方。而红方先手出6后,黑方的任何决策都将导致资源产生能力的严重恶化。这充分体现了老子在道德经中所描述的“天之道损有余而补不足”,用在此场合,就是要消耗对方的资源。

  实际上,在斗地主过程中,各位游客也都是这样实践的。这篇文章要说的一个规律是,手持三手同种牌型的先手方,出中间张,胜算概率最大。 

转载于:https://www.cnblogs.com/IT-sky/p/3861201.html

这篇关于【斗地主技巧】斗地主算法逻辑中的天之道转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/315941

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int