我不是非酋之-天空概率

news2024/9/21 14:33:58

最近入坑了dnf手游,染上了合天空,大黑蛋子一个,突发奇想,模拟下合天空概率,看看是否真的有20%。
梳理代码逻辑如下:

不考虑礼包和其他东西

条件:

  1. 合成概率20%,每次需要2个装扮和一个合成器
  2. 每次失败一件装扮和合成器会消耗
逻辑
1. 按每次都需要一件装扮和一个合成器(目前v区,价格是2.2w)
2. 先模拟一个勇士合成,循环800次取平均值
代码如下:
use rand::Rng;
use std::time::Instant;

const NUM_PLAYERS: usize = 8_000;
const SUCCESS_PROBABILITY: f64 = 0.20;
// 固定花费
const BASE_COST: f32 = 12.0; 
// 每次合成的花费
const COST_PER_TRIAL: f32 = 2.2; 

fn simulate_player(rng: &mut impl Rng) -> u32 {
    let mut total_amount = 0;
    let mut sub_equipments = 8;
    let mut count = 0;
    while sub_equipments > 0 {
        if rng.gen_bool(SUCCESS_PROBABILITY) {
            sub_equipments -= 1;
        }
        count += 1;
    }
    total_amount += count;
    total_amount
}

fn main() {
    let start = Instant::now();

    let mut rng = rand::thread_rng();
    let mut total_success = 0;
    let mut total_cost: f32 = 0.0;

    for _ in 0..NUM_PLAYERS {
        let temp_count = simulate_player(&mut rng);
        total_cost += temp_count as f32 * COST_PER_TRIAL;
        total_success += temp_count;
    }

    let average_cost = total_cost / NUM_PLAYERS as f32;
    let success_time = total_success as f64 / NUM_PLAYERS as f64;

    println!(
        "Average synthesis times: {:.2}",
        success_time
    );
    println!(
        "Average Cost: {:.2}w, If you have a set of fashion, then all you need is {:.2}w",
        average_cost + BASE_COST, average_cost
    );
    println!("Elapsed Time: {:.2}", start.elapsed().as_secs_f32());
}

这里运行太慢了,暂时改成8000人结果

在这里插入图片描述我花了130w,这差这么多,继续加大数据,因为执行时间长,又改了下

use rand::Rng;
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Instant;

const NUM_PLAYERS: usize = 8_000_000;
const SUCCESS_PROBABILITY: f64 = 0.20;
// 固定花费
const BASE_COST: f32 = 12.0; 
// 每次合成的花费
const COST_PER_TRIAL: f32 = 2.2; 
// 线程数,可以根据你的 CPU 核心数进行调整
const NUM_THREADS: usize = 10;

fn simulate_player(rng: &mut impl Rng) -> u32 {
    let mut total_amount = 0;
    let mut sub_equipments = 8;
    let mut count = 0;
    while sub_equipments > 0 {
        if rng.gen_bool(SUCCESS_PROBABILITY) {
            sub_equipments -= 1;
        }
        count += 1;
    }
    total_amount += count;
    total_amount
}

fn main() {
    let start = Instant::now();

    let players_per_thread = NUM_PLAYERS / NUM_THREADS;
    let mut handles = vec![];

    let total_success = Arc::new(Mutex::new(0u32));
    let total_cost = Arc::new(Mutex::new(0.0f32));

    for _ in 0..NUM_THREADS {
        let total_success = Arc::clone(&total_success);
        let total_cost = Arc::clone(&total_cost);

        handles.push(thread::spawn(move || {
            let mut rng = rand::thread_rng();
            let mut thread_success = 0;
            let mut thread_cost = 0.0;

            for _ in 0..players_per_thread {
                let temp_count = simulate_player(&mut rng);
                thread_cost += temp_count as f32 * COST_PER_TRIAL;
                thread_success += temp_count;
            }

            let mut total_success = total_success.lock().unwrap();
            *total_success += thread_success;

            let mut total_cost = total_cost.lock().unwrap();
            *total_cost += thread_cost;
        }));
    }

    for handle in handles {
        handle.join().unwrap();
    }

    let total_success = Arc::try_unwrap(total_success).unwrap().into_inner().unwrap();
    let total_cost = Arc::try_unwrap(total_cost).unwrap().into_inner().unwrap();

    let average_cost = total_cost / NUM_PLAYERS as f32;
    let success_time = total_success as f64 / NUM_PLAYERS as f64;

    println!(
        "Average combine time: {:.2}",
        success_time
    );
    println!(
        "Average Cost: {:.2}w, If you have a set of fashion, then all you need is {:.2}w",
        average_cost + BASE_COST, average_cost
    );
    println!("Elapsed Time: {:.2}s", start.elapsed().as_secs_f32());
}

800w勇士模拟结果:
在这里插入图片描述
虽说不知道官方的概率算法是什么,但是应该差别很大,
恩,就这样算法问题,我不是非酋!

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

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

相关文章

格式化的磁盘数据能恢复吗?五个看完即可掌握的恢复方法

磁盘是大多数电子设备都必须具有的一个存储介质,在平时使用的过程中,很多用户为了途一时的方便,经常会需要一键将磁盘里面的数据执行格式化,以实现清空或者删除的情况。然而,在执行完具体的操作后,过了一段…

Vue(十三) 路由、路由嵌套、query、param传参、propos、replace属性。编程式路由导航,特有的生命周期函数,路由守卫

文章目录 路由1. 基本使用2. 多级(嵌套)路由3. 路由query传参4. 命名路由5. 路由param传参6. propos属性7. replace属性8. 编程式路由导航9. 缓存路由组件10. actived,deactived生命周期函数11. 路由守卫1、全局路由2、独享路由3、组件内路由守卫 12. 路由器工作的两…

干货含源码!如何用Java后端操作Docker(命令行篇)

目录 干货含源码!如何用Java后端操作Docker(命令行篇) 一、为什么要用后端程序操作Docker 二、安装Docker 1、安装Docker 2、启动Docker 三、使用Java后端操作docker 1、构建docker镜像并生成容器 2、执行完毕后删除容器和镜像 3、在…

怎么删除谷歌浏览器的下载记录

定期删除谷歌浏览器的下载记录,对于保护个人隐私和提升浏览器性能都非常的重要。为了帮助大家安全的进行谷歌浏览器下载记录的清除,本文为大家分享了实用的操作方法,一起来看看吧。 删除谷歌浏览器下载记录的原因说明 1、保护隐私&#xff1…

【算法 动态规划 简单多状态 dp 问题】打家劫舍题型

打家劫舍题型 按摩师 (easy)解题思路代码 打家劫舍II (medium)解题思路代码 删除并获得点数(medium)解题思路代码 按摩师 (easy) 题目链接 该题是打家劫舍的变形 解题思路 状态表示 分析: 注意题目, 对于当天的预约, 可以接受…

车辆远控功能自动化测试方案:打造高效可靠的测试流程

随着汽车逐步走向智能化、网联化,整车的功能已经不再局限于驾驶员在车内进行本地操作。在远离车辆时,驾驶员也可以通过手机APP下发控制指令来实现对车辆的远程控制。 近几年,伴随远控功能项不断增多,其功能逻辑也越来越复杂&…

python开发--信息的增删改

部门信息的增删改 1. 增加 点击新建部门 跳转到新建部门页面:http://127.0.0.1:8000/depart/add/ 在views.py里面增加如下代码,可以将用户输入的信息添加到数据库中 def depart_add(request):if request.method GET:return render(request, depart…

STL之my_list容器

前言:各位老铁好久不见了,今天分享的知识是自己实现一个简单的list容器,为什么我先跳过vector容器的自我实现呢?我个人觉得vector相对于list的自我实现简单一点,所以今天先分享实现my_list的知识 我们要实现my_list&a…

machine learning - 2

泛化误差 也可以认为是预测时的误差。 训练误差 并不是越小越好,太小会过拟合。 获得测试集合的方法: 1): 2):例如:k-折交叉验证法, 就的每k个数据取一个座位测试集 3&#xff0…

nginx容器映射配置文件后,启动一直报错提示:failed (13: Permission denied)的排查

问题现象: 使用harbor 的install.sh 创建docker-compose之后,出现nginx容器一直重启。 查看日志发现是:配置文件无权限。报错信息如下: Sep 2 16:43:13 172.28.0.1 nginx[1344]: 2024/09/02 08:43:13 [emerg] 1#0: open() “/e…

网站网站建设公司用什么

随着互联网的飞速发展,网站已经成为企业的重要门面和宣传工具。为了在网上展示自己的品牌形象和吸引更多的客户,越来越多的企业选择找专业的网站建设公司进行网站建设。那么,网站建设公司主要使用什么技术和方法呢? 首先&#xff…

四、基本电路设计笔记——4.1 DC-DC稳压电路

目录 4.1 DC-DC稳压电路 4.1.1 基于MT2492的DC-DC稳压电路 (1)芯片参数 (2)芯片引脚 (3)输出电压设置 4.1.2 基于MT2499A的DC-DC稳压电路 (1)芯片参数 (2&#xf…

【Redis】Redis 主从复制

文章目录 1 前言2 主从模式介绍3 配置 Redis 主从结构3.1 建立复制3.2 断开复制3.3 其他特性3.4 拓扑结构 4 Redis 主从复制原理4.1 复制过程4.2 PSYNC 数据同步4.3 PSYNC 运行流程 5 主从复制流程5.1 全量复制流程5.2 部分复制流程5.3 实时复制流程 1 前言 分布式系统中存在一…

鸿誉移民:定制化移民服务,吹响全球高效率移民的嘹亮号角!

鸿誉移民:定制化移民服务,吹响全球高效率移民的嘹亮号角! 作为国内知名海外移民服务机构,鸿誉移民历经多年行业沉淀,拥有着极其丰富的移民咨询以及移民办理经验,并以咨询及时精准,签证快捷、通…

Bean 的实例化(创建 | 获取)

Spring为Bean提供了多种实例化方式,包括如下4种方式: 第一种:通过构造方法实例化第二种:通过简单工厂模式实例化第三种:通过factory-bean实例化(工厂方法模式实例化)第四种:通过Fact…

智能未来:低代码与AI如何重塑企业应用开发

引言 在当今瞬息万变的商业环境中,企业面临着前所未有的挑战与机遇。数字化转型已经成为各行各业的必然趋势,而在这一过程中,应用开发的效率与智能化程度成为企业竞争力的重要衡量标准。传统的开发模式往往需要大量的时间和资源,而…

【Godot4.3】基于ShapePoints的Polygon2D扩展

概述 这同样是来自2023年7月份的一项实验性工作,基于最初版本的ShapePoints静态函数库,实现了对Polygon2D节点的扩展,用于创建参数化图形的Polygon2D节点。 Polygon2D节点本身只能通过顶点绘制工具,创建很随意的多边形。通过Sha…

MySQL数据库管理系统下载安装

一. MySQL概述: 1.数据库相关概念 数据库:存储数据的仓库,数据是有组织地进行存储(DataBase 简DB)数据库管理系统:操纵和管理数据库的大型软件 (DataBase Management System 简DBMS)SQL:操…

一分钟创建自己的分班查询系统,家长扫码即可进群

开学后,老师们的忙碌也达到了顶峰。整理教材、准备课程计划、布置教室,这些工作已经让人应接不暇,更别提还要处理分班事宜。以往,老师们需要一个个通知家长分班结果,这不仅耗时耗力,还容易出错。家长们也常…

​数字IC设计基本概念之多时钟设计​

当设计中使用了多个时钟时,这些时钟域之间的关系可能是synchronous、asynchronous或者exclusive的。如下所示: Synchronous: Asynchronous: Exclusive: 需要人为地指定设计中时钟之间的关系,EDA工具才能正…