一.背景
随着互联网的发展,数据量的增大,很多对于数据的处理工作(例如一些推荐系统、广告推送等)都迁移到了云端,也就是分布式计算系统上。衍生了很多牛逼的分布式计算的计算模型,比较著名的就是MapReduce、MPI、BSP等。后来也产生了一些分布式计算系统,大家耳熟能详的Hadoop就是基于MapReduce实现的。

本文的主人公是Parameter Server,其实也不算是新宠了,这个模型已经被提出好几年了,只不过在国内还不是特别热。不过最近一些云服务巨头们开始了对于PS的深入开发和研究。

1.Map-Reduce处理LR
首先来看下Map-Reduce是如何解决逻辑回归(下文统一称为LR)的。首先是map的过程,将很大的数据切割成key-value的形式,我们在这里假设所有的数据都是稠密的。比如说你有100行数据,切割成5份,那么每一个worker就处理其中的20行数据。Reduce主要是负责统一worker的计算结果。下面具体到LR的算法实现来讲解下Map-Reduce的过程。

第一步:首先是进行map阶段对于长尾数据的分割,我们假设数据是稠密非稀疏的。逻辑回归的并行计算的数据分割,可以按行分、按列分或者行列一起分。分好的数据通过key-value的形式传到每一个worker中,对应上图的map phase阶段的worker。当然,map里也包含LR的计算逻辑,逻辑请大家看上面的资料自己学习下。分割图如下:

第二步:利用随机梯度(SGD)方法逼近最优解,在凸函数中LR是可以无限接近最优模型的,可以通过限定循环次数和收敛条件来实现。这其中就有一个问题,认真研究LR的同学可能会发现,如果我们使用SGD的话,因为worker之间虽然有一定的通信机制,但是并不是实时同步的,所以每一个worker并不知道对方的梯度是多少,形象的描述一下就是我们可以把SGD看成一个下坡问题。 

每个worker都在往终点方向下山(收敛模型),但是它们彼此间并不能实时协作,也就是说A不知道B爬到哪里,C不知道A爬到哪里。传入一个路径,我就接着向下爬一点,可能会走重复的路径。所以说Map-Reduce的SGD是一种范围的梯度。每个worker不一定一直往下走,可能走走停停甚至往后走一点,但是因为数据量巨大总是可以走到终点的。 但是这样就会浪费了很多效率,这也就是Parameter Server重点解决的问题。

第三步:负责reduce的服务器统一出一个模型输出。

Read more »

这是一套广告竞价系统的俩个大模块,还有两个,一个是SSP,一个是AdExchange。想要做的事情就是以拍卖的形式卖展现机会。

ssp跟adExchange说,我这有一次广告展现机会。

adExchange跟所有dsp说,我这有一个广告展现机会。

dmp说,这个广告要展现的用户是谁,男的女的,哪人,以前都干过啥,买过啥

dsp1说,我出1快

dsp2说,我出5毛

adExchange说,好,给dsp1,dsp1你把广告给我

dsp1说,XXXX

adExchange把XXXX给到SSP

DSP的受众定向精确到每个个体,而不是像传统媒体定向于某个人群。

Read more »

天天德州游戏在设计之初采用的是简体中文,现在要支持英文和繁体,游戏内支持玩家切换语言,游戏内多语言主要包括代码中写死的文本,如弹框或错误码描述,预制件中写的脚本以及图片中的文本。不同类型的文本实现不一样,思路是一致的,首先生成本地配置描述(不同语言的文本描述),在运行时脚本根据语言类型读取配置数据。

如下所示:

1、代码中写的文本提示:

翻译思路:在应用打包的过程中,生成本地数据库,根据数据库Key获取不同语言的文字描述,Key为命名空间_文件名_Num。

(1)扫描所有的CS文件,获取简体中文字符并生成表格:

生成后的Excel只包含文本ID和简体中文描述,对应的英文和繁体文本由产品配置

Read more »

什么是MMORPG的AI

玩MMORPG的地球人都知道,MMORPG的AI实在是弱智的要死。即使是在WOW这样顶级的游戏中,AI也是有限得掉渣,绝大部分NPC都像一个木桩一样,哪怕是精心设计的BOSS也就只有一些战斗AI。

尽管有很多人把动画,或者自动寻路之类的功能也叫做AI,但是我们并不讨论这种基本功能。我们讨论的AI是指,可以使得NPC好像一个真人一样活动的AI。拥有这样AI的NPC看起来就不再是那个只有血条和攻击力的模型,而给玩家的感受会是一个有信念、欲望和意图的生命。

从更广泛的意义上说,如果整个游戏世界是“高AI”的,那么这个游戏世界会充满着自由度。这意味着玩家可以在游戏中“创造”出前所未有的武器、科技甚至会有能力改变整个游戏世界外貌和文明。如果真正出现这样一款MMORPG,那么赢得粉丝们的惊声尖叫应该并不意外。

AI系统

一个典型的AI系统包括,感知,导航和决策三个字系统。对于游戏来说,感知系统是可以“作弊”的,不需要NPC去“感知”世界,系统可以直接告诉NPC世界是怎样的。而导航系统,不属于今天的讨论范围。而决策系统才是让NPC看起来可以有自己的意图和信念,所以我们接下来主要讨论一下决策系统。

在这里插入图片描述

AI决策系统的常见模型

最早,游戏AI决策系统往往是这样写的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
switch(自己)
{

       case "血量充足":

              打怪();

              break;

       case "快死了":

              补血();

              break;

       case "死了":

              游戏全局->Gameover();

              break;
}

Read more »

为了压缩手游安装包,采用BPG格式可以在保证效果的同时,缩小安装包。

在这里插入图片描述

Avatar和图标资源较小,低端机解码时间65ms,可以接受。加载较慢的是场景背景图,我们的场景背景是在切换场景的时候预加载并且会缓存,采用的是LoadAsync异步的方式,解码时间相对多一点,也不是十分明显。

在这里插入图片描述

Read more »

解决方法:

1.修改文件

  修改C:\Program Files\Beyond Compare 4\BCUnrar.dll ,这个文件重命名或者直接删除,则会新增30天试用期,再次打开提示还有28天试用期。

2.修改注册表

  ①在搜索栏中输入 regedit,打开注册表

  ②删除项目:计算机\HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4\CacheId

Read more »

1.将字体资源组织在工程目录下;

在这里插入图片描述

2.编辑工程文件(Art.bmfc),按照下图格式填写新字体资源文件路径和索引编码,编码不可重复,且与ArtFontTrans.cs 中新字体类型定义对应;

在这里插入图片描述

在这里插入图片描述

3.打开字体生成器,载入编辑完成的工程配置文件;

在这里插入图片描述

4.输出字体文件(.fnt)和字体资源打包大图(.png),将输出的文件复制到Unity工程资源目录(Fly2_Client\trunk\Client\UnityProject\Assets\Res\ArtFont);

在这里插入图片描述

在这里插入图片描述

Read more »

1、业务层消息管理:MessageBus

Model层实现了后台数据发送与接收处理(轻量的Controller层),当Model层接收到后台下发的数据后,对数据进行编码解并派发出业务层消息,Panel层监听到消息则执行对应的监听事件,更新UI表现层。MessageBus实现如下:
在这里插入图片描述

(1)单例数据标识消息:MessageFilter实现了接口MessageFilterBase,MessageBus通过MessageFilterBase接口操作每一个MessageFilter, T类型的MessageFilter是单例的,类型T既包含了数据也标识了唯一的业务消息,与麻将项目中的SetData类似。

(2)消息锁:MessageFilter包含一个消息锁变量isLocked,提供了设置和更新消息锁的接口setFilterLock与GetFilterLock,实现了某些特定的时机,锁住特定的事件。即在派发事件时,会先判断事件是否被锁住,如果被锁则不派发,等到下一帧锁被解开才触发事件。这种锁住某个特定事件的行为,客户端一般较少。客户端更多的是会在某个时间段,锁住所有的事件,比如场景切换或游戏内某些动画播放时,会锁住所有业务事件,如麻将项目中吃碰杠动画,等动画播放完后才能处理其他玩家的摸牌消息。在MessageBus中变量isLocked可以控制在某个事件段内锁住所有事件,通过LockEvent和UnLockEvent实现,一般不会调用LockFilterEvent去锁住某个特定的事件。

(3)多个事件与多个消息:有的消息被多个Panel监听,ListhandlerList记录该消息的所有监听事件,FireEvent执行时会遍历handlerList列表。msgList记录了消息数据,当一个消息被连续触发时,msgList会记录多个消息数据。FireEvent每次会取msgList中的第一条数据去执行。与麻将项目不同的是,麻将项目只存储了同一个消息的最新数据,当两条相同类型的消息到达时,以最新的数据为准,不执行过时的消息。

(4)消息注册销毁与自动执行:MessageBus中的ListfilterList存储了所有不同类型的消息,Register向单例数据MessageFilter中的handlerList添加事件,UnRegister移除handlerList中的事件。Post向msgList中添加消息,但不会立即执行。Send则立即执行handlerList中的事件。Update在全局的GameSystem中的Update被调用,每一帧去自动执行msgList中指定数量的消息。

Read more »

官方文档

Materials define how a surface should be rendered, by including references to the Textures it uses, tiling information, Color tints and more. The available options for a Material depend on which Shader the Material is using.

Shaders are small scripts that contain the mathematical calculations and algorithms for calculating the Color of each pixel rendered, based on the lighting input and the Material configuration.

Textures are bitmap images. A Material can contain references to textures, so that the Material’s Shader can use the textures while calculating the surface color of a GameObject. In addition to basic Color (Albedo) of a GameObject’s surface, Textures can represent many other aspects of a Material’s surface such as its reflectivity or roughness.

Read more »