设计面向游戏的人工智能(四):发挥游戏人工智能的最大价值--线程化

基于规则系统的人工智能在游戏中的应用 首先介绍一下RBS(Rule Based System)。从字面上很容易看出,这是指基于规则的系统,和神经元网络不同,这是人工智能的另一个分支。该系统用来解决问题的方法是基于如下形式的一个过程:其中当前状态作为输入,兰色区域为人工智能处理的过程,输出为事件,同时事件本身又会影响着状态的变化。这篇文章讲着重讲解关于匹配和结果过滤的算法理论和具体的C/C++实现。 要做匹配,首先就应该确定匹配的格式, 阅读详情

转自:https://www.gameres.com/443020.html

 

之前的所有本系列文章一直都在为本文奠定基础。我们希望,您现在能够清楚地了解到游戏人工智能 (AI) 是什么,并知道如何将其用于您的游戏中。如今,极具挑战性的任务是,最大程度地提升您系统的性能。

无论您的系统有多好,但若它拖慢游戏速度,则一切毫无意义。高效的编程和优化窍门所起作用比较有限;若您的目标超出了单内核的限制,那么您只能进行并行处理(见图 1)。
 


图 1:在 Blizzard Entertainment 的《星际争霸 2》* 中,大量单元在同一时间运行自己的人工智能。多线程是最佳的处理方法。

若进行处理时所用的系统具有一颗以上处理器或一颗多核处理器,您可将工作分配给多颗处理器。有两种分配方式:任务并行化和数据并行化。

任务并行化

将您的应用进行多线程化处理的最轻松方法是,将它分解为多个特定的任务(见图 2)。我们通常只使用几种方法对组成游戏引擎的不同任务进行封装,以便其它系统可与它们进行通信。
 


图 2:功能并行化让每个子系统利用各自的线程和内核。遗憾的是,具有多个内核而非任务的系统并未得到充分利用。

一个最好的例子是,该游戏引擎的音频系统。音频不需要与其它系统进行交互。它只是按照命令进行工作,即按需播音和混音。通信功能是用于播放和停止声音的调用,可使音频自动、完美地适用于功能并行化。使用线程分析工具为该工作提供帮助,并通过您想在其自己的线程中运行的代码段之前和之后进行的调用,音频系统可被分解成自己的线程。

让我们来了解下,您的人工智能系统如何运用该功能并行化。根据您的游戏需要,您可能会有很多不同的任务,您可为它们提供自身线程。我们来了解下其中三种任务:路径查找、战略人工智能和实体系统本身。

路径查找

您可以以这样的方式实施您的路径查找系统,即每个搜索路径的实体可随时按需调用自己的路径。尽管本方法会起作用,但它意味着,每当有路径被请求时,引擎就要等待路径查找器。若您将路径查找重组为自己的系统,您可将它分解成它自己的线程。路径查找器将会像资源管理器那样运行,在资源管理器中,新资源就是路径。

想查找路径的任何实体都可发出路径查找请求,然后再立刻从路径查找器取回一个“搜查令 (ticket)”。该搜查令就是一种路径查找系统用来查找路径的特殊句柄。这时实体可继续运行直至游戏循环到下一帧。实体可查验搜查令是否有效。若有效,实体找回路径;否则,它可在继续等待时继续实施所需的任何操作。

在路径查找系统中,搜查令用于记录跟踪路径请求,而系统则对路径请求进行处理,不必担心系统性能会受到影响。该类系统有一种积极效果,即自动跟踪发现的路径。所以,当收到对先前所发现的路径的请求时,路径查找器可为现有路径提供搜查令。在任何具有很多实体路径的系统中,该方法都非常高效,因为任何路径一被找到就可能会被再次需要。

战略人工智能

如上篇文章所述,全面管理游戏的人工智能系统与自身的线程匹配完美。它能分析游戏场并给不同实体发送命令,当实体靠近游戏场时,它可分析命令。

在自身线程中的实体系统将很难为决策图搜集信息。这些发现可发送到战略人工智能系统,作为对决策图的最新请求。当战略人工智能更新时,它可解析这些请求,更新该决策图并进行判断调用。无论这两个系统(战略人工智能和实体)是否同步都是可以的:即使不同步,它们也不会影响人工智能的决策。(我们是在谈论 1/60 秒,玩家不会注意到人工智能反应中的单帧延迟。)

数据并行化

数据并行化非常优秀,并利用了具有多内核的系统。但是有一个很大的弊端:功能并行化可能并未充分利用所有的可用内核。当您拥有的内核数量多于任务时,您的程序将不再应用所有的可用处理能力(除非运行程序的平台对它进行了处理,但最好不要依赖专用于通用应用的功能)。输入数据并行化(见图 3)。
 

图 3:数据并行化,某单一功能可利用所有可用内核。


在功能并行化中,您利用一套完整的自动单元,并为它提供和它一起运行的自身线程。现在,您要将单一工作进行分解,并将其分配给不同线程来完成。这样做可达到与系统内核一起按比例扩大的优点。您有带八内核的系统?很好。有 64 位的吗?为什么没有?虽然功能并行化支持您先指定要线程化的代码段,再让其自由运行,但数据并行化可能还需一点额外工作以实现流畅运行。例如,您可能会使用内核线程(一种“主”线程),它可跟踪谁在处理什么任务。子线程将需向主线程请求“工作”,以确保避免将同一任务执行两次。

实际上,使用内核线程管理数据并行化是一种混合方法。内核线程正使用功能并行化,然后该线程在用于数据并行化的不同内核之间对数据进行分解。

实施

线程工具如 OpenMP* (在大部分操作系统中免费提供),可助您比过去更轻松地将代码分解成不同线程。只用编译指令标记可被分解的代码段,用 OpenMP 处理其余的代码段。要用工作模块分解事物,您只需把线程调用放入遍历所述资源的循环中。

在路径查找系统示例中,路径查找器会保存请求路径列表。然后它会依次遍历该列表并根据各个请求运行实际的路径查找功能,从而将它们保存在路径列表中。可将该循环线程化,从而将循环的每次迭代分解成不同的线程。这些线程将会在第一可用内核中运行,支持最大程度地利用可用的处理能力。当无任务可执行时,内核才会空闲。

用于多个请求以实施相同工作的那些系统潜力巨大。当这些请求被间隔开时,路径查找器会自动查验请求是否已得到处理。对于数据并行化,很可能会在同一时间发生对同一路径的多个请求,这会导致冗余,破坏整个线程点。

为解决该冗余及其它冗余问题,所述系统需跟踪记录正在进行的任务都有哪些,而且只有在它们完成之后才能把它们从请求队列中除去。所以,若收到的请求是针对已请求过的路径,就需要先进行检查,然后再返回到搜查令指定的现有路径。

不能随便生成新线程。该过程将涉及对操作系统 (OS) 的系统调用。当该操作系统要完成它时,它会完成所需代码,并创建线程。这可能会花费很多时间(相对于处理速度来说)。这就是为何我们不想生成更多线程。如果正在请求的工作已得到处理,那么切勿运行该任务。而且,如果该任务非常简单(例如从两个非常近的点位之间查找路径),则不值得对其进行过细分解。

下面介绍了路径查找功能线程将要进行的分解,并介绍了它如何将工作分解成数据线程:

请求路径(开始,目标)。从路径查找器外部调用该功能,以得到一条线程。该功能:

遍历完整的请求列表,确定该路径(或其相似路径)是否已被找到,然后再返回用于该路径的搜查令。

(若路径还未被找到)遍历主动请求列表以查找该路径;若该路径在该列表中,则该功能返回用于该待处理路径的搜查令。

生成一条新请求并返回新搜查令(若以上方法均无效)。

检查路径(“搜查令”)。通过使用该搜查令,该功能遍历完整的请求列表,并查找路径,其中该搜查令对该路径有效。它能够返回路径是否存在。

更新路径查找器()。这是 shepherd 功能,可处理路径查找线程的费用。该功能可执行以下任务:

解析新请求。相同路径的多个请求可通过不同内核同时生成。该段删除了冗余,并将多个搜查令(来自不同请求)分配至相同请求。

通过主动请求循环。该功能支持所有主动请求并对它们进行线程处理。每个循环开始和结束时,代码标记为线程。每个线程将会 (1) 查找请求的路径,(2) 借助分配的搜查令将它保存在完成的路径列表中,以及 (3) 将任务从主动列表中删除。

解决冲突

您可能已注意到这一设置可能造成灾难性后果。所有需要写入请求队列的不同线程,或所有需要添加某些内容至已完成“桩”的数据线程,会导致写入冲突,即一个线程将某内容写入插槽 A,而另一个线程将其他内容同时写入插槽 A。该冲突会导致众所周知的“竞态条件”。

为避免写入冲突,代码段可标记为“关键”。当某内容标记为关键时,一次只有一个线程能够访问该代码段:所有想要执行相同操作(访问相同内容)的其他线程都需要等待。当多个线程相互阻止访问内容时,该行为会导致严重问题,如崩溃。该设置可切实避免崩溃。线程工作完成后,方便时可访问内存段,且无需关联其他线程可能需要的其他段。

保持系统同步

因此,您让所有的单独人工智能子系统实现了自主,使它们能够随意使用找到的所有可用计算资源。运行速度极快,但它们失去控制了吗?

游戏需要提供结构化用户体验。引擎必须能够保持系统同步。您不能让部分游戏元素先于其他元素运行 1-2 个帧。当敌人开始行动时,您不能让部队无所事事地等待路径。好父母需要公平对待子女。

主游戏引擎循环负责两类操作:渲染和更新。串行编程可帮助轻松保持相关系统同步。首先所有更新执行,然后渲染可绘制更新内容。此外,相关信息可能不易理解。

最终,移动更新(常常基于轨迹)的运行速度可能比渲染器快几帧。结果,动画会出现跳动情况,即实体可能呈现跳动和加速移动的情况。路径查找可能考虑实体位置快照,并可能运行无效数据。

各种系统的同步解决方案具有出色的简单性。事实上,它可应用于多数引擎。当主游戏循环得到更新时,它可跟踪全局时间索引。所有的线程将只需要处理当前(和过去,而非未来)的时间索引更新。

当有关当前时间索引的指定任务的工作全部完成,线程可处于睡眠状态,直到新的时间索引生成。这一行为不仅可帮助确保系统相互同步,而且可确保线程不会使用多余的内核。移动工作能够完美处理不断出现的碰撞和移动轨迹,并能在提前完成时共享处理能力。再次强调,您能够充分利用可用内核。

线程指南

以下是大家在设计多线程系统时需要了解的一些事情:

功能并行化:用于系统可以自主运行的情况。一些功能需要配置在系统中以解决冲突和冗余问题。

数据并行化:

用于实施批量操作的情况。

设计原则是确保回写保持最少程度,并在流程结束时发生。

对最新信息(可在其他线程中编辑)的依赖度最低,或避免这种依赖。(我的战略信息过时 1/60 秒会怎么样?)

确保您在工作时对于另一个系统的使用需求不会阻妨碍线程运行:“请求路径”,“检查路径”,而非“获取路径”。

线程失效时

有时,线程可能无法正常运行。借助 OpenMP 等工具,您可以轻松调整系统将即时把工作分解为线程的数量。借助英特尔® VTuneTM 性能分析器和英特尔® 线程调节器, 您能够清晰了解系统在不同并行化级别中的有效性。在下面这些案例中,您可能希望避免线程操作,然而:

极度复杂的系统。如果子系统关联过多其他系统,子系统或其他系统常常需要等待,此时,线程操作可能无济于事。此外,系统本身可能获益于重新设计。

原子工作负载。如果子系统的工作无法分解,您可能无法进行并行化处理。音频混合任务可能与线程一样可以发挥重要作用,但该任务工作需要将多种声音混合至最终传输至扬声器的频道。如果您的系统在混合之前对单个音频数据块进行了计算,那么它可能对其进行线程处理。

高昂费用。这些系统中部分需要实施额外的工作(如路径查找)。如果线程带来的效益不足以弥补相关费用,那么可能需要避免实施或禁用线程处理。这可能适用于具有较少元素(实体、路径等)的系统。

重复代码。在某些情况下,多个线程会使用相同代码,结果却造成代码部分浪费或被忽略。在工作开始之前,冗余检查一般能避免这种情况。

多颗处理器和多核处理器(和多颗多核处理器)能够显著增强线程处理的重要性。任何程序员的目标是充分利用可用的处理能力。系统人工智能愿景受到硬件发展现状限制可以理解,但不能因为硬件未得到充分利用而停滞不前。借助能够简化线程实施的现代工具,您完全应该设计支持线程处理的代码。

总结

开发有趣的、可高效运行的动态人工智能系统非常简单。首先应该提升效率和实施优化。通过合理组织系统以充分利用任务和数据并行化,您能够帮助确保系统实现最大运行速度,并能够随着标配计算内核的日益增多不断扩展以满足行业需求。

如本系列文章所述,游戏人工智能的人工特征比智能特征更为显著。程序员有责任创建系统代理功能,以模拟真实对手的行为。从低级规则和路径查找到高级战术与战略人工智能,基本组件并不会过度复杂。

relay_subgraph_partition_one_slide.pptx 立即下载

相关推荐

triton-inference-server-ge-backend

新版本特性 v2.3.0 支持对全局、session、graph 的options进行添加,从而进一步调优模型,相关案例请参考 性能调优方法论。 支持采用分档模式将符合条件模型转化为静态图,提高吞吐性能。 补充如何采用分档模式+锁核+调整精度,进一步提高性能。 在AscendHub下载镜像时需确认好版本,若使用旧版本镜像,需要手工下载源码编译生成新的backend后才能支持新特性。 版本特性 v2.2.0 支持从onnx文件读取模型输入输出信息, config中若无指定input,output,将会自动从文件中读取; 调整动态图在多实例下使用多Session方式,提高并发吞吐(显存占用会增高); 支持动态batch场景小batch动态合并特性,配合多Session,提高吞吐; 补充调优方法论以及cnclip模型的最佳实践; 支持多模型特性,可支持同时拉起多个模型,提高显存利用率; 支持非0轴动态shape场景; 支持TensorFlow的pb文件。

设计面向游戏的人工智能(三):战术和战略人工智能 (AI)

转自:https://www.gameres.com/442680.html 上次谈到游戏主角(智能代理,简称 IA)时,他们已经能够观察周围情况并能够判断前进方向。在本文中,我将向大家介绍如何提高代理的智能级别。代理现已能够处理即时情况。现在,大家正在努力实现人工智能。人工智能具有丰富功能,能够处理各种工作。战术人工智能战术人工智能的作用是协调游戏中智能代理组的工作。这种人工智能的实施对...

It's time 1783

2007-2025年36家商业银行绿色信贷余额数据(2025年无缺失)

1、指标覆盖区间为2007年至2025年 2、数据取自各银行年度报告及社会责任报告 3、核心指标为绿色信贷余额 4、涉及银行包括:苏农银行、中国银行、紫金银行、杭州银行、华夏银行、邮储银行、青岛银行、兴业银行、苏州银行、农业银行、宁波银行、上海银行、江阴银行、招商银行、长沙银行、北京银行、无锡银行、民生银行、浙商银行、常熟银行、成都银行、工商银行、郑州银行、光大银行、南京银行、建设银行、浦发银行、贵阳银行、渝农商行、西安银行、交通银行、江苏银行、中信银行、张家港行、平安银行、青农商行

设计面向游戏的人工智能(第 4 部分)

发挥人工智能的最大价值:线程化之前的所有本系列文章一直都在为本文奠定基础。我们希望,您现在能够清楚地了解到游戏人工智能 (AI) 是什么,并知道如何将其用于您的游戏中。如今,极具挑战性的任务是,最大程度地提升您系统的性能。无论您的系统有多好,但若它拖慢游戏速度,则一切毫无意义。高效的编程和优化窍门所起作用比较有限;若您的目标超出了单内核的限制,那么您只能进行并行处理(见图 1)。 图 1:在 Blizzard Entertainment 的《星际争霸 2》* 中,大量单元在同一时间运行自己的人.

wangchewen的博客 195

2019-2026年 中国分行业进出口数据 xlsx

数据整理中国各细分行业海关进出口数据,包括中国对各个国家进口、出口数据,中国各个行业进出口数据,各国贸易数据是了解每个国家市场的最基础和重要信息。数据非面板数据,时间、行业分类有缺失。 标 日期 采购商国家/地区 供应商国家/地区 采购商 供应商 采购商地址 供应商地址 通知人 通知人地址 制造商 原产国 目的国 起运港 目的港 HS编码 产品描述 唛头 数量 数量单位 重量 金额($) 单号 集装箱号 品牌

后端开发 Docker4.99.0 AppleSilicon 苹果芯片 Mac 安装包

本资源为 Docker Desktop 4.99.0 苹果芯片(Apple Silicon)专用安装包,原生适配 M 系列 Mac,可快速搭建本地容器开发环境,支持镜像拉取、容器编排、项目打包部署。适合后端开发、运维、全栈开发者,用于本地微服务、测试环境、项目容器化开发。

人工智能在游戏领域的应用

举围棋这个例子,非常简单的几条规则可以创造一个上下几千年的人们探索一生还远远无法穷尽的世界。对于更复杂的规则,有了AI的帮助,就更加神奇和伟大了。更何况AI还可以用来帮助创造新的世界,比如说游戏内容生成。以后借助AI的力量,在社会资源极大丰富之后,可以探索截然不同的世界,并将这个世界的体验保存下来,不管这个世界是现实的还是虚拟的,是不是制造出来的概念或是所谓“真实“存在的事物。毕竟,谁能保证现...

测试 1万+

milvus-v2.6.25镜像文件

milvus-v2.6.25镜像文件

AI之路(一)——程序、进程、多线程

程序、进程和线程的概念、区别;使用进程、线程的意义 进程: process 线程: thread 程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是说进程是系统进行资源分配和调度的一个独立单位,每个进程都有自己单独的地址空间。所以说程序与进程的区别在于,程序是指令的集合,是进程运行的静态描述文本,而进程则是程序在系统上顺序执行时的动态活动。 ...

达摩院院长的博客 1334

在WPS/Office中免费使用AI,快速提升办公效率!​

《免费解锁WPS/Office AI办公神器教程》摘要: 本教程详解如何通过第三方插件OfficeAI免费实现WPS/Office智能办公,突破官方付费限制。从安全设置到安装配置,手把手教学,涵盖文档生成、PPT美化、Excel图表等核心功能。关键优势包括零成本、全场景支持及云端/本地双模式切换,并附常见问题解决方案。注意需使用WPS 2024+版本,安装时需临时关闭杀毒软件。教程强调工具来源合法性,建议商用购买正版授权。(149字)

杜哥无敌的博客 2304

PT32F030与MT6826S SPI通讯实战:从硬件连接到数据交互全流程解析

本文详细解析了PT32F030与MT6826S通过SPI通讯的全流程,包括硬件连接、电路设计、SPI外设初始化配置以及数据交互协议实现。通过实战案例和代码示例,帮助开发者快速掌握PT32F030与MT6826S的SPI通讯技术,实现精准的角度和速度数据采集。

weixin_29189373的博客 420

发挥游戏人工智能的最大价值:线程化

文 / Donald Kehoe之前的所有本系列文章一直都在为本文奠定基础。我们希望,您现在能够清楚地了解到游戏人工智能 (AI) 是什么,并知道如何将其用于您的游戏中。如今,极具挑战性的任务是,最大程度地提升您系统的性能。无论您的系统有多好,但若它拖慢游戏速度,则一切毫无意义。高效的编程和优化窍门所起作用比较有限;若您的目标超出了单内核的限制,那么您只能进行并行处理(见图 1)。 图 1:在 Blizzard Entertainment 的《星际争霸 2》* 中,大量单元在同一时间运...

wubaohu1314的博客 358

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 771

英特尔AI医疗实战曝光:10倍加速辅助诊断、准确度高达90%

转载自:机器之心(ID:almosthuman2014)作者:力琴本文6078字14图,建议阅读16分钟。本文介绍英特尔AI医疗落地解决方案。深耕医疗健康领域 20 年,...

THU数据派 1983

PCIe中ACS知识小记

虚拟机内部的访问数据显而易见是带的GPA地址。而目前几乎所有的PCIe 设备都带ACS control,所以它们可以单独assign给不同的VM,但是随之而来的就是即使两个GPU同时assign给同一个VM,由于ACS的存在,他们之间也不会有真正的物理层面的P2P访问。每一个TLP都自带一个address(寻址类TLP),同时每一个endpoint,PCIe switch都自带一段BIOS配置的地址空间范围,一旦这个TLP的address落入某个设备的地址范围,那么这个TLP就属于这个设备并消费。

Summer的博客 5077

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战

本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。

weixin_30897079的博客 279

游戏AI—行为树研究及实现01

1.概念介绍 行为树上节点的类型有:三大类,分别是Composite,Decorator,Leaf。 Composite定义了执行框架,最简单的就是Sequence,序列执行的节点流,如果一个节点执行失败,就返回,其余节点就不再执行,显然这种节点,对于完整性要求的事务非常合适。 和Sequence相似正好相反的是 Selector,这种框架是,当子节点只要有一个成功,就返回,其余节点不再...

嘿嘿 8169

BCIC IV 2a数据集实战:从MATLAB导入到EEG信号分析全流程

本文提供了BCIC IV 2a数据集从MATLAB导入到EEG信号分析的完整实战流程。详细解析了数据集结构,区分了EEG与EOG信号,并演示了信号可视化、基础预处理(滤波、分段、基线校正)等关键步骤,帮助脑机接口研究者快速上手处理这一经典运动想象数据集。

weixin_29047919的博客 469

AI时代的游戏革命:华为云的进击方案

玩游戏这件事,今天已经成为了我们生活中的日常。但假如我们回想一下十几年时间里游戏经历的变化,相信大家都会认同“翻天覆地”这个词绝不为过。十几年前,笔者玩的还是小霸王和超级玛丽,到了今天PC和主机游戏的画面已经无限炸裂,手游成为随时随地可以发生的娱乐方式。电竞和游戏周边产业也几何级增长。在这些变化背后,隐藏着的其实是基础信息设施的不断进化。从PC、移动设备到云计算,每一次游戏的升级基本都与科技基础的

脑极体 552

微信开发 - 最新第三方网站接入微信登录、微信支付时,本地 redirect_uri 参数错误导致无法调试的解决方案(微信开放平台)完美解决每次都需要部署到线上测试,在本地使用本地 ip 就能轻松调试

redirect_uri参数错误,微信第三方登录,没有服务器时的测试方法,微信开放平台的回调域名怎么设置为本地域名IP,微信登录微信支付每次调试都需要放到服务器上怎么办,微信登录支付业务在本地调试不了怎么办,在本地怎么测试微信支付和登录,微信第三方登陆本地测试,怎么在本地进行测试,微信回调域怎么设置为本地IP,微信扫码登录redirect_uri参数错误,微信开放平台,微信开放平台开发的第三方登录和支付,vue2,nuxt2,vue3,nuxt3,uniapp,微信开放平台,公众号,微信支付,微信登录授权,

🏆 前端领域优质创作者 8791

YOLO26涨点改进 | NeurIPS2025最佳论文!注意力改进篇| 引入Gated Attention门控注意力模块、太牛了!直接拯救了大模型的发展,助力目标检测、图像分割、图像分类有效涨点

本文提出了一种基于门控注意力机制(GatedAttention)的YOLO26模型改进方法。该方法在标准softmax注意力机制中引入头部特定的sigmoid门控,通过增强注意力机制使模型更聚焦于关键信息。实验表明,该模块能显著提升模型性能,特别是在复杂背景和密集目标场景中,同时减少无关区域关注并提高检测精度。门控机制引入的非线性和稀疏性不仅提升了推理效率,还改善了训练稳定性,使模型能采用更大学习率并增强扩展性。此外,该方法有效缓解了"注意力下沉"现象,增强了模型对长距离目标的感知能力。

Ai缝合怪、助力小伙伴高效发论文 652

7种游戏AI实现思路

状态机 行为树 GOAP 算法组合比如五子棋的包括极大值极小值算法,深度搜索算法,估值函数,Alpha Beta 剪枝算法 机器学习正正的AI

Sky.Allen的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

多线程AI会死循环

多线程AI会死循环的,我看到一个人在前面,我就转左, 她看到我在前面,她转右。刚好相撞。。那我们又打算换个方向。。发现依然相撞。。 结果我们不停改变转向也无法改变这个死循环。 直到某天我想到了。对方可能根据我的转向也反方向转。 但刚好那天,她也刚好明白了这个道理。。那还是死循环。 最后我们学会了跟对方沟通. 你好,我等一下将会转右,不如你往你的右边转吧。。 死循环终于得以破解。 ...

体力无边,干倒一切。 657

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 设计面向游戏的人工智能(三):战术和战略人工智能 (AI)
下一篇: 开放世界游戏中的大地图的实现——程序技术篇
shawscz
博客等级 码龄20年 38粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值