关于这些例子,你知道我如何实现概率吗。
let directions = [
{
1: {
left: {
successRate: 1,
direction: 0
},
top: {
successRate: 35,
direction: 1
},
right: {
successRate: 15,
direction: 2
},
bottom: {
successRate: 5,
direction: 3
}
},
}
]
程序在setInterval内,每次interval循环时,都会打印值。我尝试了很多不同的方法,但我想不出来。
更新对于我目前遇到的实际问题。
您可以忽略“未找到”。它只是一个随机字符串。数字根据概率随机生成,但在setInterval函数中调用x次后,它变得“未定义”。
代码:
let directions = [
{
1: {
left: {
successRate: 5,
direction: 0
},
top: {
successRate: 3,
direction: 1
},
right: {
successRate: 10,
direction: 2
},
bottom: {
successRate: 30,
direction: 3
}
},
}
]
var chances = [40, 30, 15, 10, 5];
let items = Object.values(directions[0][1]);
function chooseWeighted(items, chances) {
var sum = chances.reduce((acc, el) => acc + el, 0);
var acc = 0;
chances = chances.map(el => (acc = el + acc));
var rand = Math.random() * sum;
return items[chances.filter(el => el <= rand).length];
}
function scanPlayerArea(){
console.log(chooseWeighted(items, chances).direction);
}
输出:
Not found.
1
Not found.
0
Not found.
0
Not found.
2
Not found.
0
Not found.
1
Not found.
1
Not found.
0
Not found.
0
Not found.
C:\Users\Name\Desktop\Script\file.js:1351
dir = chooseWeighted(items, chances).direction;
^
TypeError: Cannot read property 'direction' of undefined
at scanPlayerArea (C:\Users\Name\Desktop\Script\file.js:1351:41)
at Timeout._onTimeout (C:\Users\Name\Desktop\Script\file.js:1633:6)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7)
C:\Users\Name\Desktop\Script>
循环:
setInterval(function(){
scanPlayerArea()
}, 50);
如果我理解正确,您希望在每次迭代中根据成功率属性上设置的概率拾取随机方向。如果是这样,我可以想到一种方法:
let directions = [
{
1: {
left: {
successRate: 5,
direction: 0
},
top: {
successRate: 3,
direction: 1
},
right: {
successRate: 10,
direction: 2
},
bottom: {
successRate: 30,
direction: 3
}
},
}
];
const items = directions[0][1];
// Calculate the total rate 100%, just a sum of all the items
let totalRate = 0;
for (var key of Object.keys(items)) {
totalRate += items[key].successRate;
}
// Calculate the coeficient of success rate for each item and save it in items
let lastCoef = 0;
for (var key of Object.keys(items)) {
items[key].coef = lastCoef + items[key].successRate / totalRate;
lastCoef = items[key].coef;
console.log(key + ' coeficient: ' + lastCoef);
}
function chooseWeighted(items) {
const randomNum = Math.random();
for (var key of Object.keys(items)) {
if(randomNum < items[key].coef) {
return key;
}
}
}
function scanPlayerArea(){
console.log(chooseWeighted(items));
}
setInterval(function(){
scanPlayerArea();
}, 1000);
我有以下代码片段: 我的问题是,它真的计算出25%的概率在这里获胜吗?球员在这里获胜的几率真的是25%吗? 编辑: 我刚刚写了这个: 它非常不准确。它从大约0.15到0.3。 但是当我做更多的检查时(从(i 这是为什么?为什么100张支票不够精确?
我希望使用本文提供的答案从列表中随机选择独特的项目。 按照所描述的方法,在我的循环的每次迭代中,我都会生成一个概率值,它是当前项目从列表中被选中的概率百分比。 我需要知道的是,我如何使用这个百分比值来选择项目(或不选择)。 这是我拥有的代码,是
我需要根据该值被选择的百分比概率选择一个值。例如: 时间增量值a的10% 时间增量值b的20% 时间增量值c的30% 时间增量值d的40% 百分比加起来总是正好100% 我遇到过几种像这样的解决方案,但我确定它们不可能是正确的。以下是使用上述解决方案构建的示例程序: 输出: 预期输出: 我相信我需要使用某种算法将百分比转换为从0到99的刻度,以便随机数生成器可以准确地选择一个值。不过,我想不出如何
让我们假设我有一个这样的结构化数组: 我将这个结构称为“categories”,所以,我在这个数组中有六个类别。我的目标是根据一个类别随机挑选一个产品。 我想做一个基于速率的类别选择,据我所知,我必须计算这个类别在数组中代表多少百分比,例如: 这会给我类似的东西: 好的,现在我要做一个简单的算法,根据这些比率得到类别;我想我现在需要在范围之间选择一个随机数,并制作一些“切片”,例如: 如果随机数介
问题内容: 制作按宽度占据其父容器固定百分比的容器的最简单方法是什么? 当其父容器的宽度更改时,其宽度应更新。 我尝试使用,但是当父容器的宽度更改时,它不会更新。 问题答案: 您想要的是GridBagLayout。(如何使用?) 使用GridbagLayout可以为添加的每个单个组件定义GridBagConstraints。 这些限制条件包括其在锡罐上的确切说明。这是在“网格行”中所有组件上计算的
我试图实现的是一个测试的评分系统,但是如果有错误的答案,变量总是返回0。 参考代码: