GAMES104:17 游戏引擎的玩法系统:高级AI-学习笔记

news2024/10/23 9:56:58

文章目录

  • 课前QA
  • 一,层次任务网络(Hierarchical Tasks Network,HTN)
    • 1.1 HTN Framework
    • 1.2 HTN Task Types
      • 1.2.1 Primitive Task基本任务
      • 1.2.2 Compound Task符合任务
    • 1.3 Planning
    • 1.4 Replan
    • 1.5 总结
  • 二,目标导向行为规划Goal-Oriented Action Planning(GOAP)
    • 2.1 GOAP Structure
      • 2.1.1 Goal Set
      • 2.1.2 Action Set
    • 2.2 Backward Planning
    • 2.3 Build States-Action-Cost Graph
    • 2.4 GOAP 总结
  • 三,蒙特卡洛树搜索Monte Carlo Tree Search(MCTS)
    • 3.1 States and Actions
    • 3.2 Simulation 的基础概念
    • 3.3 Iteration Steps迭代
      • 3.3.1 Selection — Expandable Node
      • 3.3.2 Expansion and Simulation
    • 3.3 MCTS 总结
  • 四,机器学习基础Machine Learning Basic
    • 4.1 Markov Decision Process(MDP)马尔可夫决策过程
  • 五,Build Advanced Game AI
    • 5.1 State
    • 5.2 Actions
    • 5.3 Rewards
    • 5.4 NN architectures
    • 5.5 Training Strategy
    • 5.6 Hybrid混合策略


课前QA

  • 怎么看待 AI 读取玩家操作指令:可以简单读取一下,让 AI 更智能,但不能给太高权限(收集所有信息)
  • AI行为的预算:AI 可以低频地更新底层的行为(比如1s一次),高频地更新细节的行为,根据权重和优先级调整,比如单机的ai时间预算可以比较高
  • 能不能将 AI 计算用网络服务器计算:可以,专门计算 AI的服务器或者分布式计算都可以,但是需要信息上传的时间,分布式还需要上传多份

一,层次任务网络(Hierarchical Tasks Network,HTN)

层次任务网络是经典的游戏 AI 技术。

  • 上一课的行为树更像是一个无脑的反应机器,其根据设定功能行为,是有构的;
  • 而HTN是从任务或目标出发,把目标分为几个步骤,步骤内可以包含不同选项,并根据自身状态选择合适的行为一次完成步骤,完全类似人的思考过程,可以更好地表达 AI 自身的意志和驱动力。

1.1 HTN Framework

在这里插入图片描述
World State :AI 对世界的主观认知(而不是真实世界的客观描述),反馈到Planner
Sensors :传感器、感知器,从游戏中抓取状态
HTN Domain:层次化树状 task
Planner :制定的计划 task
plan runner:执行计划,在 task 结束后更新 World State

1.2 HTN Task Types

1.2.1 Primitive Task基本任务

primitive task 一般表示一个具体的动作或行为。见上图左,每个 primitive task 都有 precondition( world state properties)、action 以及 effects (改变properties)三个要素。

1.2.2 Compound Task符合任务

见上图右,compound task 由很多method构成,每个method都有自己的precondition;我们把这些方法按照一定的优先级组织起来并且在执行时按照优先级高到低的顺序进行选择(更像||的逻辑)。每个method还可以包含其它的 primitive task 或者 compound task,当方法内所有的 task 都执行完毕则表示任务完成。(感觉是行为树的拓展包装)

在这里插入图片描述

1.3 Planning

接下来就可以进行规划了,我们从 root task 出发不断进行展开逐步完成每个任务。

  1. 从 root task 开始检查 precondition,选择一个满足条件的 compound task

  2. 对这个当前指向的 compound task 展开

    在这个展开的 task 中,先把 world state 拷贝一份,然后检查 precondition,如果满足,就假设这个 task 里的 action 全部可以执行成功,并把其 effect 修改到拷贝的 world state里(带着目的预测)。如果执行时发现不能成功执行,再层层返回false,去选择下一个task

  3. 重复第二步直到没有 task 为止

最后输出的plan里就只有Primitive Task,再把plan交给runner执行

  • Run plan:依次执行 task,直到所有 task 都成功或者有一个 task 失败(游戏时动态的,可能决策时可以,执行到这里时又不行了)

1.4 Replan

  • 需要重新计划的情况:
    1. 在Run plan时有task执行失败,就需要重新计划;
    2. 计划成功执行完后,或者没有task时,需要计划下一步动作;
    3. world state被修改后被sensor感应到时,也需要重新计划

1.5 总结

  • 优点:HTN 和 BT 非常相似,但是是BT的高阶版本,但HTN更加灵活、符合人的直觉、也更易于设计师进行掌握;可以带着目的预测,任务计划也更长程
  • 缺点:由于用户行为不可预测,因此task很容易失败或满足不了precondition;并且world state与任务effect影响对设计师是挑战(比如忘记设置某个条件;或者如果 task 链路过长但是环境变化很快,那么 AI 的行为就会变化很快,看上去振动一样)

二,目标导向行为规划Goal-Oriented Action Planning(GOAP)

GOAP方法更加自动化,并且不同于向前planning,GOAP是backward planning;因此和前面介绍过的方法相比 GOAP 一般会更适合动态的环境。-----虚幻的EQS就是基于GOAP

2.1 GOAP Structure

GOAP 的整体结构与 HTN 非常相似,只是 domain 被替换为 goal set 和 action set。

在HTN中,所谓“目标Goal”是几个task集合成的,写在注释里的;而在GOAP中“目标”有非常严格的数学定义,可以数学表达;并且在HTN中的计划,而在GOAP中应该叫“规划”
在这里插入图片描述

2.1.1 Goal Set

goal set 表示 AI 所有可以达成的目标。在 GOAP 中需要显式地用相应的状态来定义。

Goal有Precondition、Priority优先级、States状态集合三个属性,状态集合就是用来描述目标的。
在这里插入图片描述

2.1.2 Action Set

action set 类似 primitive task ,它表示 AI 可以执行的行为,它包含precondition、effct和cost三个属性。其中cost是由开发者定义的代价权重,用于排序优先级(代价低的优先)

action set 没有树状结构,所以要用 cost 来选 action

2.2 Backward Planning

GOAP在规划时会从目标来Backward倒推所需要执行的动作,反向规划是一种类似人类的思考方式:
1.在优先级排序的目标序列中选取第一个precondition已经满足的目标goal。
2. 然后查询实现目标需要满足的状态state,筛选目前world state中没有满足的state,存入“待满足state”堆栈。
3. 依次获取堆栈里的state,并找到其满足其对应的action,加入plan堆栈
4. 如果action也有未满足的state需求,也把这些state加入存入“待满足state”堆栈,(递归),直到所有的状态需求都得到了满足。

在这里插入图片描述

GOAP 中除了“能够达成目标”以外,最核心的点就在于如何选择最小代价路径达成目标,包括选择目标和选择action。这个问题可以转换为路径规划为题,可以用代价图来求解。

2.3 Build States-Action-Cost Graph

有向图里的节点是state 的组合,起点是 goal 的 states,终点是当前states;不同节点之间的有向边表示可以执行的动作,边的权重则是动作的代价。

这样整个规划问题就等价于在有向图上的最短路径问题。

在这里插入图片描述

这里可以通过上节课提过的A* 算法来求解(用未满足状态的个数来进行启发式计算???),这样不能保证找到最优的最短路,但也因此带给游戏更多真实性

2.4 GOAP 总结

  • 优点:比起HTN更加动态灵活(HTN容易导致precondition与effect混乱),并更够解耦 AI 的目标与行为
  • 缺点:比BT、FSM、HTN都慢(HTN最快),并且state与action的定义非常复杂

三,蒙特卡洛树搜索Monte Carlo Tree Search(MCTS)

上边的方法听起来都是程序设定好的行为,和真正的AI没啥关系,接下来就会讲到机器学习驱动的ai了。不过先介绍一下本节的蒙特卡洛树搜索方法作为过渡,它介于设定程序与真AI之间。AlphaGo 就是基于 MCTS 来实现的。

MCTS是一种自动plannning的方法,表现更多样。思路是在进行决策时首先模拟成千上万种可行的动作,然后从这些动作中选择最好的那个来执行(就像下围棋一样)。
MCTS 的核心是 Monte Carlo方法(Monte Carlo method),它指出定积分可以通过随机采样的方法来进行估计。

3.1 States and Actions

以围棋为例,MCTS 会根据当前棋盘上的状态来估计落子的位置(也根据规则来,不是纯随机)。

从数学的角度来看,我们把棋盘上棋子的位置称为状态(state),同时把落子的过程称为行为(action)。这样就形成了有向图中的一个step,如下图。

在这里插入图片描述
如果把数以百万计的模拟落子行为表现在图里,就会形成一个行为树(state space/tree),并在这个行为树中计算最优解。并且每走一步,都会重建这个行为树(优化:以下一步的节点重建树,重用一些node),以确保未来都是最优解
在这里插入图片描述

3.2 Simulation 的基础概念

模拟(simulation)是 MCTS 中的重要一环,指的是AI利用当前的default policy策略快速地完成整个游戏过程。

default policy 相当于预先存好的棋谱,根据这个棋谱我可以立即查到胜率,然后根据策略多次模拟计算胜率(赢得次数/模拟总次数)。
(就算根据策略路径模拟到win的结果,但实际也不一定能赢。)

  • Backpropagate:当一条路径模拟结果是失败后,会把结果从下向上传递来更新整个决策分支上的胜率
    在这里插入图片描述

3.3 Iteration Steps迭代

  1. 选择一个最有希望,且没有被完全展开的节点,
  2. 展开它,
  3. 并进行探索模拟
  4. 更新胜率
    在这里插入图片描述

但这样推演需要的算力太大了,如下图,才4步就有这么多。因此需要一些优化。在这里插入图片描述

3.3.1 Selection — Expandable Node

优先选择可拓展的节点,也就是可能性没有穷尽的 node。这里需要在两种策略中找到平衡:

  1. exploitation开发 :选择胜率高的节点
  2. exploration探索:选择模拟次数少的节点

这两种策略的权衡也是机器学习中的重点,更是我们人生选择需要权衡的地方~

那么怎么平衡呢?用UCB来评估:

  • 上界置信区间UCB (Upper Confidence Bounds)
    在这里插入图片描述
    这里还增加了一个常数C方便调整:

C 增大,访问少的更多被选中
C 减小,胜率高的更多被选中,更保守

  • 应用方法:每次都从根节点开始,层层寻找 UCB 最大的子节点,直到子节点还没模拟出结果(可拓展)
    在这里插入图片描述

3.3.2 Expansion and Simulation

对找到的节点探索时可以模拟一次或者一组,然后把模拟的结果自下而上进行更新。

迭代结束条件:超过规定次数或者内存不够时就结束

  • 然后只需要回到根节点选择一个最优的子节点进行执行即可。选择策略:
  1. max child 找 Q 最大(赢得次数最多)
  2. robust child 找 N 最大(模拟次数最多->因为在选择模拟节点是已经用UCB筛选过了)
  3. max-robust child 找 Q 和 N 最大,如果没有就继续拓展树
  4. secure child 综合考虑 Q 和 N–>下界置信区间LCB(Lower Confidence Bounds)

在这里插入图片描述

3.3 MCTS 总结

  • 优点:表现更多样化(有随机数),全自动决策,适合搜索空间巨大的决策问题
  • 缺点:计算复杂度大所以难以用在实时游戏中,并且复杂游戏中也难以定义状态和行为
  • MCTS适合回合制、行动导致的数值反馈明显的游戏

四,机器学习基础Machine Learning Basic

  • 为什么游戏ai需要机器学习

之前的游戏 AI 的行为的所有 action 都是设计师设计好的,但是深度学习得到的 action 可能是设计师意想不到的,可以提供无限可能性和更多新鲜感。尽管目前基于机器学习的游戏 AI 技术大多还处于试验阶段,但已经有一些很优秀的项目值得借鉴和学习,包括 DeepMind 的 AlphaStar 以及 OpenAI 的 Five 等。

  • machine learning 的四种类型:
    1. Supervised Learning监督学习:本质是分类器,是从标注数据总学习分类(有猫、没猫)
    2. Unsupervised Learning无监督学习:本质是聚类,是从无标注数据中学习分类
    3. Semi-supervised Learning半监督学习:从大量无标注数据一小点有标注数据中学习分类
    4. Reinforcement Learning强化学习:在reward激励函数和反馈函数的相互作用下,自己学习形成合理的策略policy。

强化学习是游戏 AI 技术的基础,其难点在于激励经常是滞后的导致难以学习。

4.1 Markov Decision Process(MDP)马尔可夫决策过程

它是强化学习的理论基础。在 MDP中智能体对环境的感知称为状态(state),环境对于智能体的反馈称为奖励(reward)。MDP 的目标是让智能体通过和环境不断的互动来学习到如何在不同的环境下进行决策,这样的一个决策函数称为策略(policy)。

在这里插入图片描述

  • MDP 数学模型
  1. 环境是变化的,从某一个状态到另一个状态是有概率失败的,所以用𝑝 (𝑠′ |𝑠, 𝑎) 表达采取动作 a 后状态从 s 转到 s’ 的概率
  2. 决策(Policy)中可能有多种行为,𝜋 (𝑎 |𝑠) = 𝑃 (𝐴𝑡 = 𝑎 |𝑆𝑡 = 𝑠) 是在状态 s 下采取行为 a 的概率
  3. 在计算总reward时,因为策略是不靠谱的,所以认为在第一步时得到的奖励是一定的,但在后续的steps中得到的奖励就要逐步乘以一个系数,如 G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 … … G_t = R_{t+1} + γR_{t+2}+γ^2R_{t+3}…… Gt=Rt+1+γRt+2+γ2Rt+3……「马尔科夫过程核心:把事情变成离散的step by step」
  • 后续再根据概率、reward的数学模型,用比如梯度优化法,去优化policy

五,Build Advanced Game AI

在游戏中构建ai决策最重要的事构建游戏的Observation,也就是能够定量化表达游戏中所有的状态,使之可以被电脑感知,在此基础上再利用ai进行决策。

  • 深度强化学习(deep reinforcement learning, DRL)决策过程
    1. State:对世界状态的描述,如资源,友军,敌人,血量等
    2. Action:直接对游戏对象做出操作,也有模拟人类操作的(鼠标点击等)
    3. Reward:大到胜负,小到各种动作奖励
    4. NN design:神经网络的拓补结构和选型及结构,根据游戏机制不同
    5. Training Strategy:神经网络的训练策略

5.1 State

s t a t e = m a p + g a m e s t a t i s t i c s + u n i t s + p l a y e r d a t a state = map + game statistics + units + player data state=map+gamestatistics+units+playerdata
智能体可以直接从游戏环境获得的信息包括地图、统计数据、场景中的单位以及资源数据等。

  • Maps

Heights高地
Visibility: fog of war视野:战争迷雾
Creep
Entity owners
Alerts警报
Pathable可寻路
Buildable可建造

  • Units Information一帧中每个unit块中的信息

在这里插入图片描述

5.2 Actions

在 AlphaStar 中智能体的行为还取决于当前选中的单位。
在这里插入图片描述

5.3 Rewards

奖励函数的设计对于模型的训练以及最终的性能都有着重要的影响。

在 AlphaStar 中使用了非常简单的奖励设计,智能体仅在获胜时获得+1的奖励;并判断相同情况下 AI 的操作和人类的操作的比较,如果不一样就给惩罚(在AlphaStar中这个操作相关的反馈总体在-1~1之间,有自己的权重)。

而在 OpenAI Five (dota)中则采用了更加复杂的奖励函数,与打塔、受伤害、杀英雄等等都相关,这样就可以让ai有各种行为倾向。

5.4 NN architectures

在这里插入图片描述
上图是 AlphaStar体系结构图,其中使用了不同种类的神经网络来处理不同类型的输入数据,

  • 对于定长输入(比如资源数量、等级等)使用了 MLP(Multi-Layer Perception);
  • 对于图像数据(比如2d 地图、可走可建造图)使用了 ResNet(属于卷积神经网络CNN);
  • 对于非定长的序列(比如场上的不同种类的敌人数量)使用了 Transformer;
  • 这些encoder之后一起放到 LSTM (Long-Short Term Memory)进行处理,LSTM可以记忆历史数据并反馈到策略中
  • 最后再逐操作模块decoder。
    「有些游戏还有Raycast数据(模拟人的视角)、Mesh数据等需要处理」

5.5 Training Strategy

如果一个空白模型暴力去学习以上这些复杂的逻辑内容去做决策,那需要的算力、时间、金钱都难以承受。因此就需要一定的训练策略,比如先将大量人类操作行为投入,用监督学习的方式先训练出一个差不多的策略模型,再去优化。

比如AlphaStar 的训练过程中首先使用了监督学习的方式来从人类玩家的录像中进行学习,然后再用强化学习的方法来进行自我训练(自己的自己的变种、旧版本等去打,相当于双手互搏),来寻找全局最优解(而不是局部最优解)。

在这里插入图片描述

  • 强化学习or监督学习?

试验结果分析表明基于监督学习训练的游戏 AI 其行为会比较接近于人类玩家,但基本无法超过人类玩家的水平;而基于强化学习训练的 AI 则可能会有超过玩家的游戏水平,不过需要注意的是使用强化学习可能需要非常多的训练资源。

因此对于游戏AI到底是使用监督学习还是使用强化学习进行训练需要结合实际的游戏环境进行考虑。对于奖励比较密集的环境可以直接使用强化学习进行训练,而对于奖励比较稀疏的环境则推荐使用监督学习。
在这里插入图片描述

5.6 Hybrid混合策略

在控制一些宏观行为的时候可以使用神经网络,在控制细节行为的时候可以用设计师配置的行为树等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在ECS实例上搭建WordPress博客平台

WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress搭建自己的网站,也可以用作内容管理系统(CMS)。本教程介绍如何在不同操作系统的ECS实例上,手动搭建WordPress网…

SonarQube快速实践

SonarQube快速实践 1. 简介 SonarQube 是一个本地部署的代码分析工具,旨在检测30多种编程语言、框架和基础设施即代码(IaC)平台中的代码问题。通过直接集成到您的持续集成(CI)流水线中或在我们支持的DevOps平台之一上…

转行AI产品经理,第二步怎么走

之前写了一篇文章《转行AI产品经理,第一步怎么走》,好多小伙伴私信我,和我聊了一些细节,我感觉有必要再聊一聊,转行AI产品经理,第二步怎么走。 在上一篇文章里我们聊了一个小糖人游戏,从而得出…

用AI怎样来迭代优秀的学习法,AI+费曼学习法的妙用!

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 AI工具集1:大厂AI工具【共23款…

Quartus Ⅱ仿真 2.三人表决电路

奥里给,一起加油啊,我会陪着你们的! 仿真波形: 输出结果: 介绍: 三人表决电路是一种数字逻辑电路,用于实现三个输入信号的多数表决。在这种电路中,如果至少有两个输入为高电平&a…

MySQL-事物隔离级别

1. MySQL事物的四种隔离级别 1.1 读未提交(READ UNCOMMITTED) READ UNCOMMITED提供了事物之间最小限度的隔离,除了幻读和不可重复读取的操作外,处于这个隔离级别的事务可以读到其它事务还未提交的数据。 1.2 读已提交&#xf…

利用 Direct3D 绘制几何体—7.编译着色器

在 Direct3D 中,着色器程序必须先被编译为一种可移植的字节码。接下来,图形驱动程序将获取这些字节码,并将其重新编译为针对当前系统 GPU 所优化的本地指令 [ATI1]。我们可以在运行期间用下列函数对着色器进行编译。 HRESULT D3DCompileFrom…

创建型模式-----(单例模式)

目录 基本概念 饿汉式: 懒汉式: 上锁双判空版本 std::call_once版本: C11标准后局部静态变量版本: 项目中单例模板的应用 基本概念 单例模式:在程序运行期间只有一份,与程序生存周期一样,…

对比学习论文随笔 1:正负样本对(Contrastive Learning 基础论文篇)

为了阅读的流畅,当前针对相同的代理任务按时间顺序进行梳理,涉及仅使用正负样本思想且优化目标一致的「基础」论文(2018-2020),编码器均采用 ResNet。 文章目录 前言对比学习和代理任务(Pretext task&#…

浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系

前言 在OpenStack平台上,采用bcache加速ceph分布式存储的方案被广泛用于企业和云环境。一方面,Ceph作为分布式存储系统,与虚拟机存储卷紧密结合,可以提供高可用和高性能的存储服务。另一方面,bcache作为混合存储方案&…

Java笔试06

在Java中,异常可以分为两大类:编译时异常(编译时检查异常)和运行时异常(非编译时检查异常)。 编译时异常(Checked Exceptions)是指在编译时期必须被捕获或声明抛出的异常。这些异常…

字节流写入文件

一、创建输出流对象表示的文件三种方式 方法一: FileOutputStream fos new FileOutputStream("fos.txt",true);//最简便方法二: FileOutputStream fos new FileOutputStream(new File("fos.txt"));方法三; File f ne…

Python | Leetcode Python题解之第502题IPO

题目: 题解: class Solution:def findMaximizedCapital(self, k: int, w: int, profits: List[int], capital: List[int]) -> int:if w > max(capital):return w sum(nlargest(k, profits))n len(profits)curr 0arr [(capital[i], profits[i]…

HTML作业

作业 复现下面的图片 复现结果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><form action"#"method"get"enctype"text/plain"><…

Java程序设计:spring boot(7)——数据访问操作

目录 1 查询操作 1.1 接口方法定义 1.2 映射文件配置 1.3 UserService 1.4 UserController 2 添加操作 2.1 接口方式定义 2.2 映射文件配置 2.3 添加 commons-lang3 依赖 2.4 AssertUtil ⼯具类 2.5 ParamsException ⾃定义异常 2.6 UserService 2.7 ResultInfo …

UDP传输协议Linux C语言实战

文章目录 1.UDP简介1.1特点1.2 UDP协议头部格式1.2.1 **UDP头部**&#xff1a;1.2.2 **头部意义**&#xff1a;1.2.3 **头部参数**&#xff1a; 1.3 UDP数据长度控制1.4 UDP协议建立框架 2. 函数介绍2.1 sendto函数2.2 recvform函数2.3 其他函数 3.实例3.1 通用结构体、IPV4结构…

算法的学习笔记—(牛客JZ50)

&#x1f600;前言 在处理字符串时&#xff0c;寻找第一个只出现一次的字符是一项常见的任务。本文将探讨几种有效的解法&#xff0c;包括使用 HashMap 和位集&#xff08;BitSet&#xff09;。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f970;第一个只出现…

软件分享丨豆包电脑端 AI 助手

豆包电脑端 AI 助手是由字节跳动推出&#xff0c;旨在为用户提供高效便捷的工作和学习体验。它能在工作、学习等场景中发挥重要作用&#xff0c;为用户提供智能辅助&#xff0c;下面简单介绍它的特点&#xff1a; 高效搜索&#xff1a;像优化后的百度&#xff0c;直接提问就能…

【本科毕业设计】基于单片机的智能家居防火防盗报警系统

基于单片机的智能家居防火防盗报警系统 相关资料链接下载摘要Abstract第1章 绪论1.1课题的背景1.2 研究的目的和意义 第2章 系统总体方案设计2.1 设计要求2.2 方案选择和论证2.2.1 单片机的选择2.2.2 显示方案的选择 第3章 系统硬件设计3.1 整体方案设计3.1.1 系统概述3.1.2 系…

C#通过异或(^)运算符制作二进制加密(C#实现加密)

快速了解异或运算符&#xff1a; 异或运算符在C#中用 “^” 来表示 口诀&#xff1a;相同取0&#xff0c;相异取1 简单加密解密winform示例&#xff1a; /// <summary>/// 异或运算符加密实现/// </summary>/// <param name"p_int_Num">初始值<…