游戏人工智能开发之进阶版随机技术
来源:互联网 发布:java连接redis数据库 编辑:程序博客网 时间:2024/05/21 04:21
原文地址:游戏人工智能开发之进阶版随机技术
又get3种新的rand方式,简单又实用
分别为高斯分布随机,过滤随机,和perlin随机,perlin老朋友了,主要说说前两种。高斯分布随机(Gaussian Randomness)
高斯分布也叫正态分布(Normal distribution)或钟形曲线(bell curves),正态分布再熟悉不过了。它长这个样子:为什么要根据高斯分布来产生随机呢,这里要提到一个名词“中心极限定理(central limit theorem)”。中心极限定理:在自然界与生产中,一些现象受到许多相互独立的随机因素的影响,如果每个因素所产生的影响都很微小时,总的影响可以看作是服从正态分布的。中心极限定理就是从数学上证明了这一现象 。简单来讲就是:在现实生活中的随机性概率加起来是符合正态分布的。这就是我们为什么使用高斯分布随机的原因,就是为了时产生的结果更真实。
基于高斯分布的这种随机可以用于:速度,人的特性,随即一片森林的树木高低,人的身高,发射子弹的偏差,等等自然界常见的事情。
Unity中的实现代码:
- using UnityEngine;
- using System.Collections;
- public class Gaussian : MonoBehaviour
- {
- public int seed = 61829450;
- double sum = 0;
- long r = 0;
- // Use this for initialization
- void Start()
- {
- }
- // Update is called once per frame
- void Update()
- {
- if (Time.frameCount % 7== 0)
- {
- // seed = 61829450;
- sum = 0;
- for (int i = 0; i < 3; i++)
- {
- long holdseed = seed;
- seed ^= seed << 13;
- seed ^= seed >> 17;
- seed ^= seed << 5;
- r = holdseed + seed;
- sum += (double)r * (1.0 / 0x7FFFFFFFFFFFFFFF);
- }
- print( sum); //returns [-3.0, 3.0] at (66.7%, 95.8%, 100%)
- }
- }
- }
下图示普通伪随机和高斯随机分别模拟射子弹的偏差
高斯分布大部分的点都在中心,普通的伪随机分布的比较均匀,明显高斯分布更加真实。玩家当然也希望能射准,爆头率更高。
高斯分布的用途:
1. 速度
2. 加速度
3. 尺寸,宽度,高度,质量
4. 模拟视觉,反应时间
5. 子弹填充速度,开火速度
6. 刷新率,冷却率
过滤随机
过滤随机更讲求“公平”,也就是随的越乱就好。过滤是指,我们随机的数有时候太接近,或者差距太多的时候把这些数“过滤”掉,重新随机。有证据证明,当随机的表现非常小的时候,人类并没有感觉这是随机的。
举个例子,很多人不相信掷硬币的结果是随机的,因为你掷出的结果可能是这样的:
有大量的重复00000或11111紧挨在一起。如果你把暴击设为随机产生,随机结果如上图,敌人可能连续发动四五个暴击直接把你连死,这不是玩家想要的结果。但这确实是随机产生的啊,所以有的时候玩家的乐趣比真实性更重要。
二进制过滤
挡在下面几种情况的时候发生过滤:1. 如果新产生的数已经有四个了,重新随机一个新数
2. 如11001100,会被替换为11001101
3. 111000 或 000111,替换最后一个数
替换前替换后作对比:
过滤整数
1. 有两个重复的随机数,则重新随机新数2. 隔了一个数的重复,如“8, 3, 8” 或 “6, 2, 6”
3. 太多极限值出现,即太多大值和小值,如“6, 8, 7, 9, 8, 6, 9”
4. 10个数以内出现两组重复数如“5, 7, 3, 1, 5, 7”
5. 连续上升,或连续下降,如“3, 4, 5, 6”
6. 10个数之内重复次数过多,如“9, 4, 5, 9, 7, 8, 9, 0, 2, 9”
替换前替换后作对比:
过滤浮点小数
0-1之间的浮点数1. 两个连续数字相差小于0.02,如0.875 和0.856
2. 三个连续数字相差小于0.1,如0.345, 0.421, 和0.387.
3. 五个连续增加或连续下降,如0.342, 0.572, 0.619, 0.783, 和0.868.
4. 太多极限值出现,即太多大值和小值,0.325, 0.198, 0.056, 0.432, and 0.216.
总结
如果想要产生的结果更真实,就是用高斯分布随机。如果为了让玩家更开心,可以对产生的随机数进行过滤。
------by wolf96 http://blog.csdn.net/wolf96
原文地址:游戏人工智能开发之进阶版随机技术
0 0
- 游戏人工智能开发之进阶版随机技术
- 游戏人工智能开发之进阶版随机技术
- 游戏编程中的人工智能技术
- Unity3D研究院之游戏开发中的人工智能AI
- 游戏人工智能开发之人群的动态行为交互仿真
- 游戏人工智能开发之6种决策方法
- 游戏人工智能开发之6种决策方法
- 游戏人工智能开发之6种决策方法
- Unity3D研究院之游戏开发中的人工智能AI
- 游戏人工智能开发之6种决策方法
- 游戏开发中的人工智能 复习
- 【观察】从实践验证到技术输出 看戴尔人工智能进阶之路
- 游戏开发中的人工智能(一):游戏人工智能简介
- 游戏开发中的人工智能(十三):不确定状态下的决策:贝叶斯技术
- Uinty3D游戏开发技术之音频控制
- 游戏编程中的人工智能技术读书笔记(1)
- 游戏编程中的人工智能技术(4)
- 游戏编程中的人工智能技术--神经网络
- java.lang.ClassNotFoundException:
- 秒杀系统 咋做
- zoj 3329(经典概率dp)
- ios 即时通讯-xmpp
- Java中final、finally和finalize的区别
- 游戏人工智能开发之进阶版随机技术
- 让输入框在Android上全屏显示
- [笔试题目] 腾讯2015年9月基础研究笔试题
- eclispe freemarker ide 插件安装
- The Tower of Babylon
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- 面试题
- 用Arrays排列一字符数组,并查找一字符在其中位置。
- iOS面试常见的问题