算法:給出指定整數區間、期望值,得到最終結果

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.pswp.cn/news/166613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166613.shtml
英文地址,請注明出處:http://en.pswp.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…

常見立體幾何圖形的體積

文章目錄 abstract祖暅原理推論 棱錐和圓錐的體積用積分的方法推導棱臺和圓臺的體積圓臺體積公式 球體的體積球體的表面積 abstract 錐體和球體的體積公式主要通過積分的方法推導 這類公式的推導中學一般不要求,只要會應用公式在高等數學中由合適和方便的工具來推導這些公式而…

App Inventor 2 數字轉文本

App Inventor 2 是弱語言類型&#xff0c;文本和數字之間不用刻意去轉換&#xff0c;之間賦值就可以了。 案例&#xff1a;數字轉文本 App Inventor 2 是弱語言類型&#xff0c;同理數字也能直接賦值給文本變量&#xff1a; 更多請參考&#xff1a;App Inventor 2 文本代碼塊…

【c語言】二維數組的對角線對稱交換

c語言&#xff0c;假設已經有了一個二維數組&#xff0c;對其進行對角線對稱變換&#xff0c;如&#xff08;0&#xff0c;1&#xff09;與&#xff08;1&#xff0c;0&#xff09;變換&#xff0c;并打印。 示例 #include <stdio.h>void swap(int *a, int *b) {int te…

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 算法的一般…

MCU常用文件格式

1. asm文件 asm是匯編語言源程序的擴展名&#xff0c;.asm文件是以asm作為擴展名的文件&#xff0c;是匯編語言的源程序文件。匯編語言(Assembly Language)是面向機器的程序設計語言&#xff0c;是利用計算機所有硬件特性并能直接控制硬件的語言。在匯編語言中&#xff0c;用助…

【廣州華銳互動】利用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_…

Java String.contains()方法

描述&#xff1a; java.lang.String.contains()方法返回true&#xff0c;當且僅當此字符串包含指定的char值序列。 聲明&#xff1a; 以下是聲明java.lang.String.contains()方法 public boolean contains(CharSequence s) 返回值&#xff1a; 如果此字符串包含&#xff…

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;用于裝載一個共享的動…