javascript - 在 Javascript 中获取平衡的随机值
问题描述
设想
我已经实现了一个虚构的场景来更好地解释这个问题。我有 800 个银行账户,每个账户都投资了 100 美元,为期 1 年。每天,(使用随机函数)该值增加或减少 20%。因此,1 年后,如果我检查我的银行账户,大约 50% 的账户余额应该大于 100 美元。
问题
使用 javascript 内置随机函数,我得到 12% 到 16% 的账户,其中价值增加了,而在多次运行后价值减少了。
代码
let prices = [100, 100, 100, 100, 100, 100, 100, 100];
let days = 365;
let experiment_runs = 100;
let result = {
increased: 0,
decreased: 0
}
for (let e = 0; e < experiment_runs; e++) {
prices = [100, 100, 100, 100, 100, 100, 100, 100];
for (let i = 0; i < days; i++) {
for (let j = 0; j < prices.length; j++) {
// Change price by 20%
let delta = (Math.random() - 0.5) * 0.4 * prices[j];
// console.log("Delta", delta);
prices[j] += delta;
}
}
console.log(prices);
for (let p of prices) {
if (p > 100) {
result.increased++;
} else {
result.decreased++;
}
}
}
console.log(result);
输出
{increased: 107, decreased: 693}
这是javascript问题还是我的算法有问题?请提供您的意见。
解决方案
这是因为按百分比增加和减少不会平等地相互抵消。高余额的百分比大于低余额的相同百分比,因此损失往往超过收益。
只考虑 2 天,假设价格一天上涨 20%,另一天下跌 20%。第 1 天后余额为120
,第 2 天后余额为96
;它不会返回100
(如果交换了天的顺序,结果是相同的,因为乘法是可交换的和关联的)。所以即使你有相同数量的增加和减少,最终的结果是减少。
如果您将其更改为固定数量的增加,例如从-5
到的随机数量5
,那么您将获得大致相等数量的增加和减少的预期结果。
let prices = [100, 100, 100, 100, 100, 100, 100, 100];
let days = 365;
let experiment_runs = 100;
let result = {
increased: 0,
decreased: 0
}
for (let e = 0; e < experiment_runs; e++) {
prices = [100, 100, 100, 100, 100, 100, 100, 100];
for (let i = 0; i < days; i++) {
for (let j = 0; j < prices.length; j++) {
// Change price by -5 to 5
let delta = (Math.random() - 0.5) * 10;
// console.log("Delta", delta);
prices[j] += delta;
}
}
for (let p of prices) {
if (p > 100) {
result.increased++;
} else {
result.decreased++;
}
}
}
console.log(result);
推荐阅读
- php - 预处理功能未在主题drupal 8上运行
- image - iText7 将 SVG 添加到 PdfDocument 并在 PDF 中正确对齐 SVG 图像
- python - 按名称使用自动连接插槽
- php - 防止 Laravel 中同时发生模型突变的最佳方法
- .net - 实体框架返回一个字段
- wordpress - 在 Wordpress REST API 中按菜单顺序排序?
- docusignapi - 收件人视图未合并
- mongodb - 将 Docker 用于 MEAN 堆栈应用程序:ERR_EMPTY_RESPONSE
- scada - 为什么dnp3源地址是65520而不是65536?
- asp.net-mvc - Visual Studio 2013:未加载任何符号