Я не уверен, что такое технический термин, поэтому термин, который я могу найти, будет оценен.
Допустим, у персонажа есть несколько решений с разными весами.
Decision A: 1
Decision B: 3
Decision C: 5
Sum: 9
Что делает код, так это то, что он складывает их вместе, так что вероятность принятия решения А составляет 1/9,3/9 принятия решения B, 5/9 принятия решения C.
Существуют факторы, которые удаляют и добавляют определенные решения из пула.Эти веса не являются фиксированными (например, B может быть 2 для более умных персонажей или разделены на B1 и B2 с их собственным соответствующим весом).
Сейчас я просто выполняю линейный поиск, подобный следующему (в JavaScript):
let totalWeight = 0;
for (let i = array.length - 1; i >= 0; i--) {
totalWeight += array[i].weight;
}
// this function rolls a random number from 1 to totalWeight
let r = roll(1, totalWeight);
let search = 1;
for (let i = 0; i < array.length; i++) {
let w = array[i].weight;
if (r >= search && r < (search+w)){
return array[i];
}
search += w;
}
Но это не очень эффективно.Похоже, что здесь может быть алгоритм двоичного поиска, но я не могу думать об этом.Есть идеи?