pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

需要可預測的隨機生成器

Need for predictable random generator(需要可預測的隨機生成器)
本文介紹了需要可預測的隨機生成器的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我是一名網絡游戲開發者,我遇到了隨機數問題.假設一個玩家有 20% 的幾率用他的劍造成致命一擊.這意味著,五分之一的命中應該是關鍵的.問題是我在現實生活中得到了非常糟糕的結果—有時玩家在 5 次點擊中獲得 3 次暴擊,有時在 15 次點擊中沒有.戰斗時間很短(3-10 次點擊),因此獲得良好的隨機分布很重要.

I'm a web-game developer and I got a problem with random numbers. Let's say that a player has 20% chance to get a critical hit with his sword. That means, 1 out of 5 hits should be critical. The problem is I got very bad real life results — sometimes players get 3 crits in 5 hits, sometimes none in 15 hits. Battles are rather short (3-10 hits) so it's important to get good random distribution.

目前我使用 PHP mt_rand(),但我們只是將代碼移至 C++,所以我想在我們游戲的新引擎中解決這個問題.

Currently I use PHP mt_rand(), but we are just moving our code to C++, so I want to solve this problem in our game's new engine.

我不知道該解決方案是否是某種均勻隨機生成器,或者可能是記住以前的隨機狀態以強制正確分布.

I don't know if the solution is some uniform random generator, or maybe to remember previous random states to force proper distribution.

推薦答案

我同意之前的回答,即某些游戲的小規模運行中的真正隨機性是不可取的——這對于某些用例來說似乎太不公平了.

I agree with the earlier answers that real randomness in small runs of some games is undesirable -- it does seem too unfair for some use cases.

我用 Ruby 編寫了一個類似 Shuffle Bag 的簡單實現,并做了一些測試.實現是這樣的:

I wrote a simple Shuffle Bag like implementation in Ruby and did some testing. The implementation did this:

  • 如果它看起來仍然公平,或者我們還沒有達到最小擲骰子的閾值,它會根據正態概率返回一個公平的命中.
  • 如果從過去的滾動中觀察到的概率使它看起來不公平,它會返回一個公平化"的命中.

根據邊界概率,它被認為是不公平的.例如,對于 20% 的概率,您可以將 10% 設置為下限,將 40% 設置為上限.

It is deemed unfair based on boundary probabilities. For instance, for a probability of 20%, you could set 10% as a lower bound and 40% as an upper bound.

使用這些界限,我發現運行 10 次命中后,14.2% 的時間真正的偽隨機實現產生的結果超出這些界限.大約 11% 的時間里,在 10 次嘗試中得分為 0.在 3.3% 的時間里,10 次中的 5 次或更多次重擊命中.自然,使用此算法(最小擲骰數為 5),Fairish"運行的數量要少得多(0.03%)..即使下面的實現不合適(當然可以做更聰明的事情),值得注意的是,您的用戶通常會覺得使用真正的偽隨機解決方案是不公平的.

Using those bounds, I found that with runs of 10 hits, 14.2% of the time the true pseudorandom implementation produced results that were out of those bounds. About 11% of the time, 0 critical hits were scored in 10 tries. 3.3% of the time, 5 or more critical hits were landed out of 10. Naturally, using this algorithm (with a minimum roll count of 5), a much smaller amount (0.03%) of the "Fairish" runs were out of bounds. Even if the below implementation is unsuitable (more clever things can be done, certainly), it is worth noting that noticably often your users will feel that it's unfair with a real pseudorandom solution.

這是我用 Ruby 編寫的 FairishBag 的主要內容.整個實現和快速蒙特卡羅模擬 可在此處 (gist) 獲得.

Here is the meat of my FairishBag written in Ruby. The whole implementation and quick Monte Carlo simulation is available here (gist).

def fire!
  hit = if @rolls >= @min_rolls && observed_probability > @unfair_high
    false
  elsif @rolls >= @min_rolls && observed_probability < @unfair_low
    true
  else
    rand <= @probability
  end
  @hits += 1 if hit
  @rolls += 1
  return hit
end

def observed_probability
  @hits.to_f / @rolls
end

更新:使用此方法確實會增加獲得重擊的總體概率,使用上述界限可提高到約 22%.您可以通過將其真實"概率設置得低一點來抵消這一點.17.5% 的概率與公平修改產生約 20% 的長期觀察概率,并保持短期運行感覺公平.

Update: Using this method does increase the overall probability of getting a critical hit, to about 22% using the bounds above. You can offset this by setting its "real" probability a little bit lower. A probability of 17.5% with the fairish modification yields an observed long term probability of about 20%, and keeps the short term runs feeling fair.

這篇關于需要可預測的隨機生成器的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How do I set the icon for my application in visual studio 2008?(如何在 Visual Studio 2008 中為我的應用程序設置圖標?)
Convert CString to const char*(將 CString 轉換為 const char*)
Remove secure warnings (_CRT_SECURE_NO_WARNINGS) from projects by default in Visual Studio(默認情況下,在 Visual Studio 中從項目中刪除安全警告 (_CRT_SECURE_NO_WARNINGS))
How do I start a new CUDA project in Visual Studio 2008?(如何在 Visual Studio 2008 中啟動新的 CUDA 項目?)
Exporting classes containing `std::` objects (vector, map etc.) from a DLL(從 DLL 導出包含 `std::` 對象(向量、映射等)的類)
What are some reasons a Release build would run differently than a Debug build(發布版本與調試版本的運行方式不同的一些原因是什么)
主站蜘蛛池模板: 学考网学历中心| 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 体坛网_体坛+_体坛周报新闻客户端 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | OpenI 启智 新一代人工智能开源开放平台 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 合金ICP光谱仪(磁性材料,工业废水)-百科 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 创富网-B2B网站|供求信息网|b2b平台|专业电子商务网站 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 新疆散热器,新疆暖气片,新疆电锅炉,光耀暖通公司 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 尊享蟹太太美味,大闸蟹礼卡|礼券|礼盒在线预订-蟹太太官网 | 纸张环压仪-纸张平滑度仪-杭州纸邦自动化技术有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 |