自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 Java游戏服务器开发流水账(7)网络通信简介

Java游戏服务器开发中,网络通讯是核心,涉及客户端与服务器间的数据交换。主要采用C/S架构,使用TCP或UDP协议,TCP适合需要可靠传输的场景,UDP则适合实时性要求高的游戏。数据格式包括文本协议(如JSON)和二进制协议(如Protobuf)。Java提供了多种网络编程API,如BIO、NIO、AIO,其中AIO基于回调机制,适合高并发场景。Netty和Mina是常用的高性能网络框架。网络优化策略包括减少延迟、提高吞吐量、降低带宽消耗和增强可靠性。安全与性能监控也是重要环节,包括防止DDOS攻击、数据

2025-05-13 13:03:12 941

原创 Java游戏服务器开发流水账(6)网关服务器简介

Java游戏服务器架构中的网关服务器是连接客户端与后端服务的关键组件,主要职责包括网络通信管理、协议解析与序列化、请求路由、负载均衡和安全防护。典型架构采用分层设计,客户端通过网关服务器集群与逻辑服务器集群通信,利用注册中心进行服务发现。核心功能实现基于Netty的高性能网络层,支持多协议解析和会话管理,使用Protobuf处理游戏协议,并通过服务注册与发现动态管理后端服务。安全防护措施包括IP限流、协议校验和数据加密,性能优化则涉及连接池、异步处理和数据压缩。部署架构包括客户端、CDN/WAF、负载均衡器

2025-05-12 13:07:32 1185

原创 Java游戏服务器开发流水账(5)Spring 在游戏开发中的使用简介

Spring框架及其衍生产品SpringBoot在游戏开发中扮演着关键角色,主要用于构建游戏的后端服务,支持Unity、UnrealEngine和HTML5等客户端。Spring在游戏后端架构中主要负责游戏逻辑核心处理、服务编排、数据持久化、实时通信以及安全与认证。通过SpringMVC、SpringWebFlux、SpringWebSocket和Netty等技术,Spring能够高效处理同步和非同步请求,实现实时状态同步和低延迟交互。此外,Spring还支持多种数据存储方案,包括关系型数据库、NoSQL和

2025-05-11 03:24:41 1350 1

原创 Java游戏服务器开发流水账(4)游戏的数据持久化

Java游戏服务器的数据持久化涉及将动态游戏数据保存到持久存储介质中,以防止数据丢失并确保系统可靠性。核心目标包括数据完整性、性能优化和可扩展性。常用存储方案有:关系型数据库(如MySQL/PostgreSQL,适用于结构化数据,支持复杂查询和事务)、NoSQL数据库(如Redis/MongoDB,适合非结构化数据,读写性能高但事务支持有限)和文件存储(如JSON/XML,适合配置和日志)。关键技术实现包括ORM框架(如Hibernate/MyBatis)、缓存策略(本地和分布式缓存)、异步持久化(通过消息

2025-05-10 16:50:39 855

原创 Java游戏服务器开发流水账(3)游戏数据的缓存简介

游戏服务器数据缓存是一种关键技术,用于临时存储频繁访问的数据,以提升游戏性能、减轻数据库负担并优化玩家体验。常用的缓存技术包括Java内存、MemCache和Redis,其中MemCache仅支持字符串类型的键值对。缓存的主要优点包括提高游戏响应速度、减轻数据库负载和减少网络带宽压力。然而,缓存也面临数据一致性、内存空间限制和系统复杂性增加的挑战。缓存管理策略包括更新策略(即时或延迟更新)和淘汰策略(如LRU、LFU、FIFO)。实际应用中,缓存涉及玩家角色数据、游戏世界数据和配置数据等,具体实现需根据游戏

2025-05-09 19:38:45 1367

原创 Java游戏服务器开发流水账(2)开发中Maven的管理

Maven 是一款流行的 Java 项目管理工具,它基于项目对象模型(Project Object Model,POM)的概念来管理项目的构建、依赖和文档等。游戏服务器开发中也会使用.

2025-05-08 20:01:57 1638

原创 Java游戏服务器开发流水账(1)游戏服务器的架构浅析

新项目立项停滞,近期读老项目代码看到Java,读代码的要点笔记记录一下。

2025-05-07 13:29:44 1471

原创 游戏的TypeScript(6)TypeScript的元编程

元编程是 TypeScript 强大的特性之一,它允许开发者在编译时进行类型操作,提高代码的安全性和可维护性。通过合理使用泛型、条件类型、映射类型和装饰器等工具,可以创建出既灵活又类型安全的代码。TypeScript 的元编程是指在编译时对类型系统进行操作和扩展的编程技术。它允许开发者创建动态类型、自动生成类型定义,以及基于现有类型构建新类型。两者并非互斥,而是互补。TypeScript(TS)和 JavaScript(JS)的元编程虽然都涉及运行时代码操作,但实现方式和应用场景有显著差异。

2025-05-06 14:02:24 902

原创 游戏开发的TypeScript(5)TypeScript的类型转换

类型断言有<类型>值和值 as 类型这两种语法形式。非空断言操作符!可以断言某个值不为null或undefined。类型守卫能够在运行时缩小类型范围。要谨慎使用类型断言,避免引发运行时错误。在开发时,有必要才使用类型转换,优先考虑使用类型守卫和泛型等更安全的类型操作方式。

2025-05-05 21:28:31 1024

原创 游戏开发的TypeScript(4)TypeScript 的一些内置函数

cocos creator,laya,egret,phase,threejs,对ts都有良好的支持,如果感兴趣可以去官方获取相关资料进一步学习。在H5游戏开发中,TypeScript 的内置函数和类型系统特性可大幅提升开发效率和代码质量。TypeScript 的内置函数涵盖了 JavaScript 的所有原生功能,并通过类型系统增强了安全性。:利用接口、类和泛型构建健壮的游戏架构。:如类型断言、泛型、工具类型等。:使用数组方法处理游戏对象集合。:如类装饰器、方法装饰器。:异步加载和处理游戏资源。

2025-05-04 16:16:39 630

原创 游戏开发的TypeScript(3)匿名函数的常见和不常见用法

在 TypeScript 中,匿名函数是一种强大的工具,它继承了 JavaScript 的灵活性,并且通过类型系统增强了安全性和表达力。游戏开发,尤其是结构性框架的开发中经常使用这些特性。有些特性如果不了解规则看起来容易云里雾里,所以一般在游戏开发中逻辑代码中不会使用,但是在框架封装中使用,可以使执行更加高效。TypeScript 允许定义多个函数签名,增强类型安全。:条件类型、映射类型等与函数结合。:参数和返回值类型检查。:处理多种类型的灵活性。

2025-05-03 13:52:01 336

原创 游戏开发的Typescript(2)禁忌函数 - 类 eval()函数

在 TypeScript 里,eval()是个内置函数,其作用是对字符串形式的 JavaScript 代码进行解析并执行。

2025-05-02 04:08:11 1086

原创 游戏开发的TypeScript(1)TypeScript 的作用域|TypeScript编译原理

TypeScript 中的作用域规则和 JavaScript 基本一致,不过 TypeScript 增加了一些特性,像类型检查、访问修饰符(privateprotected)以及模块系统等,让作用域的管理变得更加严谨和安全。

2025-05-01 11:07:10 1426

原创 吴恩达强化学习复盘(13)小批量化和软更新(复盘完结)

小批量化是指在强化学习算法中,将经验样本(例如状态、动作、奖励等)分成小的批次,然后使用这些小批次来更新模型参数,而不是每次只使用一个样本进行更新。是一种用于提高学习效率和稳定性的技术。在强化学习中,软更新(Soft Update)是一种用于更新模型参数的技术,它与传统的硬更新(Hard Update)相对。软更新是指在每次学习步骤中,以较小的幅度将目标网络的参数向当前网络的参数进行更新。具体来说,不是直接将目标网络的参数替换为当前网络的参数(硬更新方式),而是通过一个加权平均的方式来更新目标网络参数。

2025-04-30 02:41:59 1385

原创 吴恩达强化学习复盘(12)近似Q函数|绝对贪婪策略

近似 Q 函数(Approximate Q - function)是强化学习中的一个重要概念。在强化学习中,智能体通过与环境进行交互来学习最优策略,以最大化长期累积奖励。Q 函数(也称为动作价值函数)表示在某个状态下采取某个动作后,智能体预期能获得的长期累积奖励。然而,在许多实际问题中,由于状态空间和动作空间可能非常大甚至是连续的,直接存储和计算每个状态 - 动作对的 Q 值是不现实的。因此,需要使用近似 Q 函数来对真实的 Q 函数进行近似估计。

2025-04-29 01:49:55 846

原创 吴恩达强化学习复盘(11)连续状态空间|深度Q网络

这是是一个能让用户在月球上着陆模拟飞行器的应用,它类似于一个被很多强化学习研究者使用的电子游戏。在这个应用中,用户的任务是在月球着陆器快速接近月球表面时,在适当的时间点燃推进器,使其安全降落在着陆台上。

2025-04-28 02:50:26 1509

原创 吴恩达强化学习复盘(10)随机环境下的Q函数简介

Q 函数表示在某个状态 s 下执行某个动作 a 后,智能体预期能获得的累计奖励的期望值。数学上,Q 函数被定义为:其中是在时刻获得的奖励,是折扣因子,用于权衡即时奖励和未来奖励的重要性,。

2025-04-27 12:14:33 860

原创 吴恩达强化学习复盘(9)火星车的强化学习理论基础|马尔可夫决策

强化学习中 的“策略(policy)” ,笔者自己的理解是大概在强化学习中采取行动的不同方式。在强化学习中,有多种采取行动的方式。根据奖励距离决定:可以决定总是走向更近的奖励,即如果最左边的奖励更近就往左走,如果最右边的奖励更近就往右走。根据奖励大小决定:另一种选择行动的方式是总是追求更大的奖励,或者总是追求更小的奖励(虽然追求更小奖励看起来不是个好主意,但也是一种可行的选择)。混合策略:还可以选择向左走,除非离较小的奖励只有一步之遥,在这种情况下就选择走向较小的奖励。策略的定义。

2025-04-26 12:14:14 1098

原创 吴恩达强化学习复盘(8)AI的道德约束|内容过滤算法

这一部分主要是关于开发者本身。(笔者个人观点:尽管有法律的约束,但是我个人认为法律约束只是界定了人类社会行为的道德下限,开发团队也应该有自己的道德约束)。尽管推荐系统对一些企业来说利润丰厚,但也存在使人们和社会状况变差的用例。在使用推荐系统或其他学习算法时,应致力于让社会和人们受益,避免造成伤害。在设计推荐系统时,从设定目标到决定推荐内容都有多种选择。例如,二元标签可依据用户是否参与、点击或明确喜欢某项目来设定;可以推荐用户最可能评五星的电影、最可能购买的产品等。

2025-04-25 11:56:42 1069

原创 吴恩达强化学习复盘(7)基于内容的推荐算法思路

基于内容的过滤算法(Content-Based Filtering Algorithm)是推荐系统中的一种常见方法,它主要是根据用户和物品的特征来进行推荐。

2025-04-24 13:55:08 1288

原创 吴恩达强化学习复盘(6)均值归一化|协同过滤算法简介

对于用户,可能知道他们的人口统计信息(年龄、性别、位置)、表达的偏好(喜欢或不喜欢某些电影类型),以及通过 IP 地址、访问设备(手机或桌面)、使用的浏览器等获取的线索,这些信息都与用户偏好可能相关。但协同过滤算法难以利用这些信息,尽管它在多个用户对多个项目进行评级的情况下是一种强大的算法,但仍存在这些局限性。均值归一化(Mean Normalization)主要目的是将数据集中的特征值进行转换,使得每个特征的均值为 0,并且特征值的范围在一个特定的区间内(通常是 [-1, 1] 或 [0, 1] )。

2025-04-23 11:32:45 1443

原创 吴恩达强化学习复盘(5)如何构建推荐系统

推荐系统,这一主题在学术界受到一定关注,但并不热门。但在商业领域的实际影响和应用案例数量远超其在学术界的受关注程度。比如以淘宝(在线购物)、B站(视频流媒体)、(美团)外卖网站等为例,这些网站或者app会根据用户情况推荐可能购买的商品、观看的电影或尝试的餐馆。对许多公司而言,推荐系统推动了很大一部分的销售,带来了显著的经济效益。二元标签的应用背景推荐系统和集体过滤算法的很多重要应用中,用户不再给出 1 到 5 星的具体评级,而是以二元标签的形式(即喜欢或不喜欢)来表达对物品的态度。

2025-04-22 13:48:09 945

原创 吴恩达强化学习复盘(4)异常检测系统开发中的关键思路

在开发异常检测系统时,若能有一种方法在系统开发过程中对其进行评估,就能更快速地做出决策、调整系统并实现改进。比如在选择不同特征、尝试不同参数(如 absalon)时,若有评估方法,就能更轻松地决定是否对算法进行更改,这种评估有时被称为实数评估,即通过计算一个数值来判断算法改进与否。数据假设与应用在实际的异常检测中,虽然主要讨论无标签数据,但假设存在一些标签数据(包含少量先前观察到的异常)是很有帮助的。

2025-04-21 11:07:32 1220

原创 吴恩达强化学习复盘(3)异常检测|高斯分布

曲线的中心由均值 μ 决定,曲线的宽度(标准差)由参数 σ 决定,σ² 是分布的方差。从概率角度解释,如果从分布中抽取大量样本(理论上无限个),并绘制非常精细的直方图,最终会得到钟形曲线。基于估计得到的高斯分布,如果新样本落在分布中心附近,P (X) 值较高,认为该样本与其他样本相似,不是异常;如果新样本落在远离中心的位置,P (X) 值较低,则认为该样本是异常的。,每个例子X有n个特征,是一个包含n个数字的向量。对于给定的 μ 和 σ 值,绘制该函数可得钟形曲线,曲线以 μ 为中心,宽度由 σ 决定。

2025-04-20 09:05:24 1291

原创 吴恩达强化学习复盘(2)K-Means初始化|K的选择|算法优化

假设我们有 m 个样本,每个样本是一个 n 维向量,要将这些样本划分为 K 个聚类。用表示样本所属的聚类编号(),表示第 k 个聚类的中心(也是一个 n 维向量)。那么,K-Means 算法的优化目标就是最小化畸变函数 J,其公式如下:表示样本到其所属聚类中心的欧氏距离的平方。是所有样本到其所属聚类中心的距离平方和。是为了取平均值,使得畸变函数的值与样本数量无关,便于比较不同数据集上的聚类效果。

2025-04-19 06:42:18 1051

原创 吴恩达强化学习复盘(1)聚类算法|K-Means算法

K - Means 算法名称中的 “K” 表示聚类的类别数量,是算法的一个输入参数,用户需要事先指定将数据划分为多少个类别。“Means” 表示均值,因为该算法的核心是通过计算每个聚类中数据点的均值(中心)来确定聚类的归属和更新聚类中心。

2025-04-18 12:13:18 770

原创 吴恩达深度学习复盘(19)XGBoost简介|神经网络与决策树

因为神经网络将输出 Y 计算为输入 X 的平滑或连续函数,即使串联多个不同模型,这些模型的输出也是可微的,所以可以使用梯度下降法同时训练它们;如果要构建由多个协同工作的机器学习模型组成的系统,训练多个神经网络比训练多个决策树更容易,这涉及到一些较技术的原因,在实际项目中会遇到。多年来,机器学习研究人员提出了许多构建决策树的方法,目前最常用的方法是对样本或决策树的实现收费。其中,XGBoost 是一种非常快速且易于使用的开源实现,已成功用于赢得许多机器学习竞赛和商业应用。但这两种方法各自的优缺点。

2025-04-17 11:32:32 1183

原创 吴恩达深度学习复盘(18)树集合与随机森林

随机森林构建过程大体上分3步数据采样:从原始训练数据集有放回地随机采样,生成多个与原始数据集大小相同的子数据集。这使得每个子数据集都有一定的随机性,不同子数据集包含的样本可能不同,有些样本可能在多个子数据集中出现,有些则可能未被采样到。构建决策树:对于每个子数据集,分别构建一棵决策树。在构建决策树的过程中,对于每个节点,随机选择一个特征子集,然后从该子集选择最优的特征进行分裂。这样,每棵决策树的生长都具有一定的随机性,使得不同决策树在特征选择和节点分裂上有所差异。组合决策树。

2025-04-16 12:31:40 1244

原创 吴恩达深度学习复盘(17)独热编码|回归树简介

在之前看到的示例中,每个特征只能取一个或两个可能的值,比如耳朵形状只有尖或,胡须只有有或无。但如果特征可以有两个以上的取值该如何处理呢?以宠物收养中心应用程序的新训练集为例,除了耳朵形状特征外,其他数据都相同。此时耳朵形状不再只有尖和松软两种,还可以是椭圆形,即耳朵形状(ESHI)特征仍是分类值特征,但从有两个可能值变为有三个可能值。当基于这个特征进行分割时,会创建数据的三个子集,并为树建立三个分支。这时候需要新的处理方式 - 独热编码。方法。

2025-04-15 12:00:39 860

原创 吴恩达深度学习复盘(16)决策树|节点纯度与熵

决策树算法在很多应用中被使用,机器学习比赛中会经常见到,但在流行病学领域未受到太多关注。决策树示例 —— 猫的分类以经营猫收养中心为例,通过动物的耳朵形状、脸型、是否有胡须等特征,来训练一个分类器判断动物是否为猫。数据集包含 10 个训练样本,其中 5 只猫和 5 只狗,输入特征为 X、R、B 三列(分别对应耳朵形状、脸型、是否有胡须),目标输出是判断该动物是不是猫(标签为 1 或 0)。这些特征是分类值,即只取几个离散值,如耳朵形状为尖或软,脸型为圆或不圆,胡须为有或无,这是一个二元分类任务。

2025-04-14 13:30:21 1034

原创 吴恩达深度学习复盘(15)精度和召回率

当机器学习应用中正负例比例严重失衡(远非 50:50)时,准确性这样的常用评估指标效果不佳。以训练二元分类器检测罕见疾病为例,假设测试集上错误率为 1%(正确率 99%),看似结果很好,但如果疾病罕见(如人群中只有 0.5% 的病人患病),一个简单的总是预测 “Y 等于 0”(即预测无病)的算法,其错误率可能更低(0.5%)。在正负例不平衡的情况下,很难根据准确率判断算法优劣。

2025-04-13 01:36:51 996

原创 吴恩达深度学习复盘(14)迁移学习|项目基本周期

迁移学习是一种机器学习技术,它允许我们将从一个任务中学习到的知识应用到另一个相关的任务中。其核心思想在于,很多情况下,从头开始训练一个模型需要大量的数据和计算资源,而迁移学习能够复用在已有数据上训练好的模型的部分或全部,从而减少新任务的训练成本,加快模型收敛速度,提升模型在新任务上的性能,尤其是当新任务的数据量有限时,迁移学习的优势更为明显。下面是一个使用 Python 和 Keras 库进行迁移学习的简单例子,我们将使用预训练的 VGG16 模型对猫狗图像进行分类。

2025-04-12 11:58:52 1076

原创 吴恩达深度学习复盘(13)机器/深度学习的训练迭代和误差分析

同样,对于检测钓鱼邮件相关的算法,也可以进行特定更改,如查看电子邮件中的url,编写特殊功能来识别链接到可疑url的情况,或者获取更多钓鱼邮件的数据来改进算法。总之,误差分析通过手动检查算法错误分类的例子,能为尝试改进算法提供灵感,同时也能判断某些类型的错误是否罕见,是否值得花费大量时间去修复。误差分析更易于处理人类擅长判断的问题,比如对于邮件,人类可以判断其是否正常以及算法出错的原因。然而,当将误差分析应用于能够解决的问题时,它有助于将注意力集中在更有希望尝试的方向上,避免几个月的无效工作。

2025-04-11 03:43:34 1011

原创 吴恩达深度学习复盘(12)数据拟合|高偏差和高方差

通过综合运用以上这些诊断方法,可以较为准确地判断模型是否存在高偏差或高方差问题,从而有针对性地采取改进措施,如调整模型复杂度、增加数据量、采用正则化方法等,以提高模型的性能和泛化能力。判断高偏差和高方差并没有绝对的数值标准,需要根据具体问题和数据特点来综合判断。同时,这只是一种初步的诊断方法,实际情况可能更为复杂,还需要结合模型的结构、数据的分布等因素进行深入分析。高偏差(high bias)和高方差(high variance)是两个重要的概念,它们用于描述模型在训练和预测过程中的表现特征。

2025-04-10 12:24:57 1080

原创 吴恩达深度学习复盘(11)构建系统前的评估诊断原理-训练集|交叉集|测试集

比如,对于十个训练样本,可将 60% 的数据放入训练集(样本数量记为 M 训练 = 6),20% 的数据放入交叉验证集(样本用 XCV 和 yCV 表示,数量记为 mCV = 2),20% 的数据放入测试集(样本用 X 测试和 y 测试表示,数量记为 M 测试 = 2)。对于不同大小和结构的神经网络模型,训练得到相应参数后,在交叉验证集上用 JCV 评估性能(对于分类问题,JCV 通常是算法错误分类的交叉验证例子的百分比),选择 JCV 最低的模型,最后用测试集评估所选模型的泛化能力。

2025-04-09 12:35:11 1389

原创 吴恩达深度学习复盘(10)SoftMax,多标签分类,卷积层简介

以输入为手写数字9的图像为例,在构建隐藏层时,卷积层的神经元不像密集层那样查看图像的所有像素,而是仅查看图像中的小矩形区域像素。- 下一层(隐藏的第二层)也可以是卷积层,如第一个单元看前一层的前5个激活,第二个单元看另外5个数字,最后一个隐藏单元看5到9。- 将心电图信号旋转90度后作为输入,构建第一个隐藏层时,让第一个隐藏单元只看x1到x20,第二个隐藏单元看x11到x30,以此类推,最后一个隐藏单元看x81到100,每个单元都只对心电图信号的一个小窗口有反应,这就是一个卷积层(该层有九个单元)。

2025-04-08 12:38:50 1157

原创 吴恩达深度学习复盘(9)多类分类与SoftMax回归

以前在进行手写数字识别(仅两个类别)时使用了特定架构的网络,现在若要对0到9这10个数字进行手写数字分类,需将新网络的输出层改为有10个单元的SoftMax输出层,有时也称为SoftMax输出层。检测工厂生产的有视觉缺陷的部件,观察制药公司生产的药片图片,判断其是否有拉伸效果、变色缺陷或芯片缺陷等,这些不同类型的缺陷就代表了多个类别,是多类分类问题的实际体现。在新网络中,给定输入X,前序计算(得到隐藏层的激活值)和之前一样,接着计算输出层的激活值。的函数),这是SoftMax激活函数的独特属性。

2025-04-07 21:02:14 963

原创 吴恩达深度学习复盘(8)神经网络中激活函数的建模

神经网络中的不同神经元可以选择不同的激活函数,上层(输出层)有上曾的激活函数,隐藏层有隐藏层的激活函数。Sigmoid函数,Tanh函数,ReLU函数,Leaky ReLU函数,Softmax函数

2025-04-06 13:21:43 1350

原创 吴恩达深度学习复盘(7)一个简单训练示例

本篇简单讲解简单的神经网络训练。通过回顾逻辑回归模型训练,了解神经网络训练的相关内容。比如训练步骤、损失函数、优化算法以及深度学习库的使用,了解训练过程中的相关概念。

2025-04-05 12:35:02 959

原创 吴恩达深度学习复盘(6)神经网络的矢量化原理

在NumPy中,除了常规的转置理解方式外,还可以使用这样的函数来计算转置,该函数会将矩阵的列横向排列。- 给出矩阵,通过(np指NumPy库)这样的代码计算矩阵。python在一些代码中可能会看到这种写法,这也是计算矩阵乘法的另一种方式,使用np.dot更清晰。

2025-04-04 13:57:16 938

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除