算法:给出指定整数区间、期望值,得到最终结果

1,问题: 

在游戏中,我们经常会遇到以下情况:打开宝箱,获得x个卡牌碎片。

  但通常策划只会给一个既定的数值空间,和一个期望得到的值,然后让我们去随机。比如:

  问题A:在1~3之间的整数中随机,期望随机结果的平均值是1.175,如何实现?
  延伸:1~10之间,期望平均值是5.4呢?
  以上问题可以归纳为:m~n之间,期望值是q,求出最终结果。

  首先,我们可以问下AI,如何实现这个算法。以下是AI给出结果的截图:

  这种按照多元方程求解的方法,需要自己去随机给定概率,当然可以实现。但有没有更直接的方法呢?

2,求解过程:

  经过思考,我们可以用补偿算法的方式,来得到这个既定结果。这里需要引入一个补偿数的概念,补偿数由每次随机结果的偏差值累加而成。

  因为每次随机事件是独立的,我们引入问题A,得到如下随机结果:

第1次随机区间1~3,随机结果1,补偿数为 0.175 ;

第二次随机区间2~3,随机结果2,补偿数为-0.65;

第3次随机区间1~2,随机结果1,补偿数为-0.475,小于精度0.5,取随机数组结束。

随机数组为1,2,1;在其中随机取1位便是结果。

  我们可以验算下:(1+2+1)/3~=1.333,与1.175偏差小于0.5。代码编译:

  然后我们将以上思考过程改为函数如下:

 //获取所有的随机范围
    void GetAllRandom(float _expect, int _min, int _max, float _precision)
    {
        var _getList = new List<int>();
        GetRandomOnce(_getList, 0, 0f, _expect, _min, _max, _precision);


        var _f = 0f;
        var _str = "";
        foreach (var idx in _getList)
        {
            _f += idx;
            _str += idx + ",";
        }
        Debug.LogError("得到结果数组:" + _str + "\n平均值:" + (_f / _getList.Count));

        Debug.LogError("最终结果:" + _getList[Random.Range(0, _getList.Count)]);
    }



    /// <summary>
    /// 取到的随机数 数组
    /// </summary>
    /// <param name="_list">取值数组</param>
    /// <param name="_ranNum">随机次数</param>
    /// <param name="_compensate">补偿值:累加</param>
    /// <param name="_expect">期望值</param>
    /// <param name="_min">最小值</param>
    /// <param name="_max">最大值</param>
    /// <param name="_precision">精确度</param>
    /// 约束条件:
    /// 1,随机次数>n次,比如1~10之间随机,随机次数需要>10
    /// 2,最终补偿数需要误差小于1(精确度)   
    private void GetRandomOnce(List<int> _list, int _ranNum, float _compensate, float _expect, int _min, int _max, float _precision)
    {
        //根据补偿数重新定义范围
        int _ran = 0;
        if (_compensate > 0f)
        {
            var _tMin = Mathf.Min(_max, Mathf.CeilToInt(_min + _compensate));
            _ran = Random.Range(_tMin, _max + 1);
            Debug.Log(_tMin + "   " + _ran + "  " + _max);

        }
        else
        {
            var _tMax = Mathf.Max(_min, Mathf.FloorToInt(_max + _compensate));
            _ran = Random.Range(_min, _tMax + 1);
            Debug.Log(_min + "  " + _ran + "   " + _tMax);
        }
        _compensate += _expect - _ran;
        _ranNum++;
        Debug.LogError(_ran + "   " + _compensate+"   "+_ranNum);
        _list.Add(_ran);
        if (_ranNum > (_max - _min + 1) && Mathf.Abs(_compensate) < _precision) return;//满足约束条件

        if (_ranNum > 100) { _list.Clear();_list.Add((int)_expect);return; }//防止意外

        GetRandomOnce(_list, _ranNum, _compensate, _expect, _min, _max, _precision);

    }

3,测试

  写个简单方法测试下:

    public int min = 1;//区间最小值
    public int max = 3;//区间最大值
    public float expect = 1.175f;//期望值

    public float precision = 0.5;//精度

   void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            GetAllRandom(expect, min, max, precision);
        }
    }

  得到结果如下:

  当然我们有时候不想随机那么多步骤(纯随机的不确定性),还可以添加更多的约束。

  最后,我们代入扩展再测试下。电脑给出的随机结果如下:

  经过多次测试,实验结果是逼近期望值的(不过取越靠近中间数的话,独立事件的结果偏差可能越大,这里最好再加上一层约束)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用栈实现队列的功能,用队列实现栈的功能?

我们知道队列的特点是先入先出&#xff0c;栈的特点是后入先出&#xff0c;那么如何用栈实现队列的功能&#xff0c;又如何用队列实现栈的功能呢&#xff0c;且听我一一道来 我们首先来看用栈实现队列的功能&#xff0c;首先大伙儿要知道队列和栈的特点其实是“相反”&#xf…

氮化镓的晶体学湿式化学蚀刻法

引言 目前&#xff0c;大多数III族氮化物的加工都是通过干法等离子体蚀刻完成的。干法蚀刻有几个缺点&#xff0c;包括产生离子诱导损伤和难以获得激光器所需的光滑蚀刻侧壁。干法蚀刻产生的侧壁典型均方根(rms)粗糙度约为50纳米&#xff0c;虽然已经发现KOH基溶液可以蚀刻AlN…

【2023年APMCM亚太杯C题】完整代码+结果分析+论文框架

2023年APMCM亚太杯C题 完整代码结果分析论文框架第一问问题分析技术文档1 基于AHP的新能源汽车发展影响因素分析1.1 AHP模型的构建1.2 AHP模型的求解 2 基于自适应ARIMA-非线性回归模型的影响因素预测2.1 ARIMA模型的建立2.2 非线性回归模型的建立2.3 自适应混合ARIMA-非线性回…

高压配电室无人值守

高压配电室无人值守是指高压配电室在没有现场人员持续值守的情况下进行运行和管理。这种模式的实现依赖于先进的智能化技术和自动化系统&#xff0c;以确保配电室的安全、稳定和高效运行。 无人值守智能高压配电室的优势包括&#xff1a; 成本降低&#xff1a;无需常驻人员值守…

c语言习题1124

分别定义函数求圆的面积和周长。 写一个函数&#xff0c;分别求三个数当中的最大数。 写一个函数&#xff0c;计算输入n个数的乘积 一个判断素数的函数&#xff0c;在主函数输入一个整数&#xff0c;输出是否为素数的信息 写一个函数求n! ,利用该函数求1&#xff01;2&…

电脑如何禁止截屏

禁止电脑截屏是一项重要的安全措施&#xff0c;可以保护用户隐私和防止恶意软件的使用。以下是几种禁止电脑截屏的方法&#xff1a; 形式一&#xff1a; 一刀切&#xff0c;全部禁止截屏 可以在域之盾软件后&#xff0c;点击桌面管理&#xff0c;然后选择禁止截屏。就能禁止所…

zerotier 入门及初始使用

官网终端下载地址 https://www.zerotier.com/download/ 配置 创建网络 到默认的控制中心创建网络 https://my.zerotier.com/ 点击进入,将网络ID复制 加入网络 MacOS 将上面的网络ID复制到下方进行输入 Windows Linux # xxxxxxxxxxxxxx 网络节点ID sudo zerotier-cli join xx…

绽放独特魅力,点亮美好生活

2023年10月至11月&#xff0c;由益田社区党委主办、深圳市罗湖区懿米阳光公益发展中心承办&#xff0c;深圳市温馨社工服务中心协办的“2023年益田社区益田佳人--女性成长课堂”项目顺利完成&#xff0c;此项目分为四个主题&#xff0c;分别是瑜伽、健身操、收纳、花艺技能&…

大语言模型概述(一):基于亚马逊云科技的研究分析与实践

大型语言模型指的是具有数十亿参数&#xff08;B&#xff09;的预训练语言模型&#xff08;例如&#xff1a;GPT-3, Bloom, LLaMA)。这种模型可以用于各种自然语言处理任务&#xff0c;如文本生成、机器翻译和自然语言理解等。 大语言模型的这些参数是在大量文本数据上训练的。…

【漏洞复现】好视通视频会议系统(fastmeeting) toDownload.do接口存在任意文件读取漏洞 附POC

漏洞描述 “好视通”是国内云视频会议知名品牌,拥有多项创新核心技术优势、多方通信服务牌照及行业全面资质 [5] ,专注为政府、公检法司、教育、集团企业等用户提供“云+端+业务全场景”解决方案。用全国产、高清流畅、安全稳定的云视频服务助力各行各业数字化转型。 其视频…

2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Sectigo

随着互联网的普及和技术的飞速发展&#xff0c;网络安全问题引起重视。这时&#xff0c;有一家名为Sectigo(原Comodo CA)的公司应运而生&#xff0c;致力于为企业和个人提供最先进、最可靠的网络安全解决方案。 Sectigo(原Comodo CA) 成立于2008年&#xff0c;总部位于美国加利…

深度学习图像风格迁移 - opencv python 计算机竞赛

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

css引入的三种方式

css引入的三种方式 一、内联样式二、外部样式表三、 内部样式表总结trouble 一、内联样式 内联样式也被称为行内样式。它是将 CSS 样式直接应用于 HTML 元素的 style 属性中的一种方式 <p style"color: blue; font-size: 16px;">这是一个带有内联样式的段落。&…

安卓手机SD卡不小心删除了怎么办?几步轻松恢复数据!

随着科技的不断发展&#xff0c;安卓手机已经成为了我们生活中不可或缺的一部分。然而&#xff0c;在使用安卓手机的过程中&#xff0c;我们有时会不小心将重要的文件或者照片删除掉&#xff0c;这无疑会给我们的生活带来不便。那么&#xff0c;当安卓手机的SD卡不小心被删除了…

数字化转型没钱?没人?没IT?低代码平台轻松帮你搞定

随着数字技术的不断渗透&#xff0c;数字化已经不仅仅是一个趋势&#xff0c;而是深入人心的日常生活部分。在这样的时代背景下&#xff0c;企业面临的挑战也愈发严峻&#xff1a;如何不断创新&#xff0c;满足用户日益增长的业务需求&#xff1f; 传统的开发方式&#xff0c;随…

基于51单片机超声波测距汽车避障系统

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的超声波测距汽车避障系统是一种用于帮助汽车避免碰撞和发生事故的设备&#xff0c;以下是一个基本…

操作系统的基本特性--并发、共享、虚拟、异步

批处理系统具有高资源利用率和系统吞吐量&#xff1b;分时系统能够获得及时响应&#xff1b;实时系统具有实时特征。而这三种系统都具有并发、共享、虚拟和异步四个基本特征 一、并发 OS通过并发提高系统中的资源利用率&#xff0c;增加系统的吞吐量 1.并行和并发 并行&…

11.7统一功能处理

一.登录拦截器 1.实现一个普通的类,实现HeadlerInterceptor接口,重写preHeadler方法. 2.将拦截器添加到配置中,并设定拦截规则. 二.访问前缀添加 方法1: 方法2:properties 三.统一异常处理 以上返回的是空指针异常,如果是别的异常就不会识别,建议加上最终异常 . 四.统一数据格…

Dockerfile-CentOS7.9+Python3.11.2

本文为CentOS7.9下安装Python3.11.2环境的Dockerfile # CentOS with Python3.11.2 # Author xxmail.com# build a new image with basic centos FROM centos:centos7.9.2009 # who is the author MAINTAINER xxmail.comRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/…