当前位置: 首页 > news >正文

概率与决策 - 模拟程序让你在选择中取胜

为程序员,看着这种概率与决策,有时候常在想,我怎么做决策我的胜率概率最大,能不能用程序来模拟一下。我选择A赢的概率,我选择B赢的概率呢?

当然,必定是可以的,程序天然非常容易处理这些大数据,循环等问题,话不多说,直接看效果吧。

1

2

3

体验地址

github源码地址

死亡概率模拟器

核心算法采用了“几何分布逆变换采样”

O(1)时间复杂度,相比传统蒙特卡洛方法性能提升显著

数学准确性:基于几何分布的期望值 E[X] = 1/p

边界保护:处理 log(0) 等数学异常

calculateDeathTime() {

const p = this.selectedProbability.value;

const u = Math.random();

const u_safe = Math.max(u, 1e-10); // 避免log(0)

// 几何分布公式:X = ceil(log(U) / log(1-p))

const deathTime = Math.ceil(Math.log(u_safe) / Math.log(1 - p));

return Math.max(1, deathTime);

}

风险抉择抽奖

采用了预计算 + 进度动画分离。

计算与渲染分离:避免10000次抽奖时的性能问题

固定时长体验:无论多少次抽奖,用户等待时间可控

平滑进度显示:50ms更新间隔保证流畅动画

async startLottery() {

// 步骤1:预先快速计算所有结果(无延迟)

for (let i = 0; i < this.selectedTimes; i++) {

const result = this.performSingleLottery();

this.results.push(result);

}

// 步骤2:根据次数设置固定动画时长

let animationDuration = 0;

if (this.selectedTimes === 1) animationDuration = 0; // 立即

else if (this.selectedTimes === 10) animationDuration = 500; // 0.5s

else if (this.selectedTimes === 100) animationDuration = 1000; // 1s

else if (this.selectedTimes === 1000) animationDuration = 1500; // 1.5s

else if (this.selectedTimes === 10000) animationDuration = 2000; // 2s

// 步骤3:播放进度动画(仅更新显示)

const updateInterval = 50; // 每50ms更新一次

const totalSteps = animationDuration / updateInterval;

for (let step = 1; step <= totalSteps; step++) {

this.currentRound = Math.floor((step / totalSteps) * this.selectedTimes);

await this.sleep(updateInterval);

}

}

同时采用了真随机模拟 Math.random() 模拟概率,大数定律验证,次数越多越接近理论值

performSingleLottery() {

const random = Math.random(); // [0, 1)

if (random < 0.99) {

return { win: true, amount: 200000000 }; // 99%概率:2亿

} else {

return { win: false, amount: 0 }; // 1%概率:0元

}

}

最后

其实最后发觉,概率学到最后就是数学期望,一个人选择可能是随机,但100人、1w人、10w人选择就是必然的概率了。

一个人选择失败对整体影响有限,但对于他自身而言,可能是灾难性的,这也就是一个人在就是整个时代的一粒沙尘,对整个时代影响微乎其微。

但通过代码的计算我们也可以看出,一个人微乎其微,但如果你在你的前面加一个权重,那可能就不一样了,所以大家行动起来吧,让自己变得更强,那样,在选择中,你取胜的概率就会更大了,谢谢大家。

http://www.cnnetsun.cn/news/116616.html

相关文章:

  • LeetCode 最小覆盖子串:滑动窗口 + 哈希表高效解法
  • Meta AR眼镜双线布局引关注,各巨头加码XR赛道看重市场潜力谋战略先机!
  • BuildKit配置文件全方位调优:从入门到精通实战手册
  • Netcode for GameObjects Boss Room 多人RPG战斗(19)
  • 深度学习优化器算法巧思速览
  • macOS上优雅运行Docker容器
  • XXL-JOB分布式任务调度
  • MYSQL与B+树与索引相关面试题
  • PostgreSQL pgvector扩展Windows环境完整安装指南
  • Steam游戏挂机神器:3分钟学会自动刷时长和交易卡
  • F5 Big-IP by SNMP.硬件负载均衡
  • 公有云省钱 + 稳业务秘诀!自动伸缩 1 节课上手,资源不浪费、高峰不卡顿~(4)
  • EmotiVoice WebSocket接口设计与调用示例
  • 基于51单片机的颜色识别报站系统设计
  • 3个关键策略解决Cocos事件响应混乱问题
  • DuckDB C++集成:如何在嵌入式项目中实现高性能数据分析?
  • 移动端集成EmotiVoice:Android/iOS兼容方案
  • Feishin音乐播放器完全手册:打造个性化自托管音乐云
  • Launcher3 启动器:打造纯净原生 Android 体验的完整指南
  • 同花顺问财数据获取:Python自动化工具的完整使用指南
  • 【完整指南】快速掌握ComfyUI-SeedVR2视频超分模块
  • 大模型重塑知识图谱构建全面解析LLMs驱动的知识工程新范式!
  • 云存储安全防线:OSS防御体系构建与实战策略
  • SUNNOD喷墨打印机防堵头测试色卡:专业维护解决方案
  • 通义千问3-VL-Plus - 界面交互(本地图片)
  • 使用C#代码更改 PowerPoint 幻灯片大小
  • 基于单片机的智能电动车设计
  • Shipit自动化部署终极指南:从零到精通完整教程
  • Freedom Chat | 这款美国通讯应用泄露了所有人的电话号码
  • JMeter 二次开发环境准备详解