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

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);}}

  得到结果如下:

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

问卷调查平台选择指南:哪个好用与如何选择的实用指南

问卷调查由于其成本低、数据可量化的特点&#xff0c;常被用于工作和学习中。网络的发展使得问卷调查的形式也越累越多样化&#xff0c;不少人在做问卷调查的时候可能都会提出这样一个问题——问卷调查平台哪个好用&#xff1f;怎么选择&#xff1f; 选择问卷调查平台&#xf…

ubuntu22.04 arrch64版在线安装redis

脚本 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32 echo "deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse" >…

可以ping通IP但是无法远程连接-‘telnet‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

起因 一开始远程连接IP&#xff0c;报错&#xff0c;怀疑是自己网络原因&#xff0c;但是同事依旧无法连接 怀疑是自己防火墙的原因&#xff0c;查看关闭依旧无法连接 问题 两个地址可以ping通排除防火墙缘故 怀疑端口&#xff0c;测试端口 然 解决方案 winR 输入control…

App Inventor 2 数字转文本

App Inventor 2 是弱语言类型&#xff0c;文本和数字之间不用刻意去转换&#xff0c;之间赋值就可以了。 案例&#xff1a;数字转文本 App Inventor 2 是弱语言类型&#xff0c;同理数字也能直接赋值给文本变量&#xff1a; 更多请参考&#xff1a;App Inventor 2 文本代码块…

opencv-背景减除

背景减除&#xff08;Background Subtraction&#xff09;是一种用于从视频序列中提取前景对象的计算机视觉技术。该技术的主要思想是通过建模和维护场景的背景&#xff0c;从而检测出在不同时间点出现的前景对象。 OpenCV 提供了一些用于背景减除的函数&#xff0c;其中最常用…

完善农业农村基础数据资源体系,加速乡村振兴

完善农业农村基础数据资源体系&#xff0c;加速乡村振兴 随着乡村振兴战略的实施&#xff0c;农业农村基础设施建设也得到了越来越多的关注。然而&#xff0c;在实施这一战略的过程中&#xff0c;我们也必须认识到&#xff0c;完善农业农村基础数据资源体系同样是十分重要的。 …

opencv-ORB检测

ORB&#xff08;Oriented FAST and Rotated BRIEF&#xff09;是一种图像特征检测和描述算法&#xff0c;结合了 FAST 关键点检测器和 BRIEF 描述子的优点。ORB 算法具有良好的性能&#xff0c;特别适用于实时应用&#xff0c;如目标追踪、相机定位等。 以下是 ORB 算法的一般…

【广州华锐互动】利用VR体验环保低碳生活能带来哪些教育意义?

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐走进了我们的生活。从游戏娱乐到教育培训&#xff0c;VR技术的应用范围越来越广泛。而在这个追求绿色、环保的时代&#xff0c;VR技术也为我们带来了一种全新的环保低碳生活方式。让我们一起走进…

nginx配置相关应用服务

1、无ssl证书的conf文件 server {listen 80;server_name test.domain.com;root html;index index.html index.htm;location / {proxy_http_version 1.1;proxy_set_header Connection "";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_…

2022年MathorCup高校数学建模挑战赛—大数据竞赛A题58到家家政服务订单分配问题求解全过程文档及程序

2022年MathorCup高校数学建模挑战赛—大数据竞赛 A题 58到家家政服务订单分配问题 原题再现&#xff1a; “58 到家”是“58 同城”旗下高品质、高效率的上门家政服务平台&#xff0c;平台向用户提供家政保洁、保姆、月嫂、搬家、维修等众多生活领域的服务。在家政保洁场景中…

欲更新浏览器的Mac用户请注意,AMOS又出一招新“骗术”

近日&#xff0c;Malwarebytes发现有一种专门针对Mac操作系统&#xff08;OS&#xff09;的数据窃取程序正通过伪造的网页浏览器更新程序进行分发。Malwarebytes称这与其通常的技术、战术和程序大不相同&#xff0c;该恶意软件可以模仿 Safari 和谷歌 Chrome 浏览器。 网络安全…

【C++心愿便利店】No.13---C++之探索vector底层原理

文章目录 前言一、STL简介1.1 什么是STL1.2 STL的六大组件 二、vector的介绍及使用2.1 vector的介绍2.2 vector的使用2.2.1 vector的定义2.2.2 vector iterator 的使用2.2.3 vector 空间增长问题2.2.4 vector 增删查改 三、vector模拟实现3.1 成员变量3.2 成员函数3.2.1 构造函…

2、分布式锁实现原理与最佳实践(二)

常见分布式锁的原理 4.1 Redisson Redis 2.6之后才可以执行lua脚本&#xff0c;比起管道而言&#xff0c;这是原子性的&#xff0c;模拟一个商品减库存的原子操作&#xff1a; //lua脚本命令执行方式&#xff1a;redis-cli --eval /tmp/test.lua , 10 jedis.set("produ…

python opencv 放射变换和图像缩放-实现图像平移旋转缩放

python opencv 放射变换和图像缩放-实现图像平移旋转缩放 我们实现这次实验主要用到cv2.resize和cv2.warpAffine cv2.warpAffine主要是传入一个图像矩阵&#xff0c;一个M矩阵&#xff0c;输出一个dst结果矩阵&#xff0c;计算公式如下&#xff1a; cv2.resize则主要使用fx&…

精益生产中的周转箱优势:提升效率与质量的得力利器

在当今竞争激烈的制造业中&#xff0c;企业追求高效生产和卓越质量是至关重要的。精益生产理念提供了一套有效的工具和方法&#xff0c;其中周转箱作为一个关键的组成部分&#xff0c;在优化生产流程、提高效率和质量方面发挥着重要作用。下面谈谈精益生产中的周转箱优势&#…

C++:内存管理

内存分布&#xff1a; 首先我们需要了解的是C/C中内存区域的划分&#xff1a; 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的&#xff1a;先调用的地址比后调用的地址大。 2. 内存映射段是高效的I/O映射方式&#xff0c;用于装载一个共享的动…

百度文心一言(千帆大模型)聊天API使用指导

开篇不得不吐槽下百度&#xff0c;百度智能云平台首页跳转千帆大模型平台的按钮太多了&#xff0c;不同按钮跳转不同的子页面&#xff0c;不熟悉的&#xff0c;能把人找懵。入口太多&#xff0c;就导致用户不知道从何开始。本文就从一个前端开发人员的角度&#xff0c;教大家快…

【深度学习】基于深度学习的超分辨率图像技术一览

超分辨率(Super-Resolution)即通过硬件或软件的方法提高原有图像的分辨率&#xff0c;图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题&#xff0c;在医疗图像分析、生物特征识别、视频监控与安全等实际场景中有着广泛的应用。 SR取得了显著进步。一般可以将现有…

为什么,word文件在只读模式下,仍然能编辑?

Word文档设置了只读模式&#xff0c;是可以编辑的&#xff0c;但是当我们进行保存的时候就会发现&#xff0c;word提示需要重命名并选择新路径才能够保存。 这种操作&#xff0c;即使可以编辑文字&#xff0c;但是原文件是不会受到影响的&#xff0c;编辑之后的word文件会保存到…

20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回

20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回 2023/11/24 12:19 百度&#xff1a;RK3399 Android10 右键返回 https://blog.csdn.net/danhu/article/details/122467256 android9/android10 鼠标右键返回(已验证) danhu 于 2022-01-13 09:46:42 发布 android10 …