Преврати отрицательное число в положительное для вероятности - PullRequest
0 голосов
/ 14 октября 2010

Я хочу создать массив, который отправляет пиксель в определенном направлении.

Имеется четыре варианта: вперед, назад, влево, вправо

У каждого направления есть связанный показатель, который представляет собой вероятность отправки пикселя в определенном направлении.

Пример:

Direction[Forward] = 20;
Direction[Backward] = 12;
Direction[Left] = -5;
Direction[Right] = 2;

Как сделать так, чтобы число для каждого ключа в массиве направлений было равно вероятности перемещения пикселя? Я хочу, чтобы отрицательное число сыграло роль в вероятности, хотя и в небольшом шансе.

В настоящее время я копирую каждый ключ направления в новый массив столько раз, сколько рассчитывается вероятность, затем генерирую случайное число для нового массива, но это не работает с отрицательными числами, поэтому я меняю их на +1 в авансовый. Очевидно, это не масштабируется на отрицательных числах.

Как я могу создать вероятность для каждого ключа массива независимо от того, положительное или отрицательное число?

Ответы [ 6 ]

3 голосов
/ 14 октября 2010

В математическом смысле нет отрицательной вероятности, но вы можете использовать функцию, которая отображает каждое число на положительное число, например, экспоненциальную функцию:

double totalProbability = 0;
probabilty = new array
foreach (key in Direction)
{
  probability[key] = exp(Direction[key];
  totalProbability  += probability[key];
}
//ensure the sum of all probabilities is 1
foreach (key in Direction)
{
  probability[key] /= totalProbability;
}
1 голос
/ 14 октября 2010

Я не знаю, каков ответ на ваш вопрос, но вот альтернативный взгляд для всех тех, кто говорит, что отрицательные вероятности не имеют смысла и не логичны. Отрицательные вероятности уже давно воспринимаются всерьез в квантовой физике.

Возможно, настоящая проблема - это случайное число в диапазоне от -1 до +1. Кажется, что случайное число устанавливает вероятность того, что пиксель движется в заданном направлении. Если вы изменили этот диапазон на [0, 1], возможно, эта проблема исчезнет, ​​и весь алгоритм станет более понятным.

У вас есть четыре направления: вправо (положительное x), вперед (положительное z?), Влево (отрицательное x) и назад (отрицательное z?). У вас уже есть встроенная направленность; нет необходимости в знаке отрицательного числа. Сделать диапазон [0, 1] для каждого направления и проблемы могут быть спорными.

1 голос
/ 14 октября 2010

Я не вижу смысла в отрицательной оценке здесь.Если вы хотите, чтобы эти числа соответствовали вероятностям, то отрицательное значение не имеет.Если вы хотите, чтобы ваш пиксель уходил влево очень редко, вам нужно только убедиться, что левый показатель намного меньше, чем у других.Но как только вы нажмете 0, он никогда не уйдет влево, тогда как даже меньший результат (т.е. отрицательный) не имеет реального значения.Поэтому я бы просто заменил отрицательные баллы на 0, если вы не можете дать более осмысленную интерпретацию этих баллов.

Что касается вероятностей баллов, это легко сделать, если все оценки неотрицательны:

  1. пусть S будет суммой всех баллов.
  2. делит каждый балл на S. Результатом является вероятность.

В вашем примере (с -5 заменено на 0) у вас S = 20 + 12 + 2 = 34, что дает вероятность для движения вперед 20/34 = 58,8%, назад с 12/34 = 35,3% и справа с 2/34 = 5,9%.(Как вы видите, я сделал одинаковые округления, поэтому вы не получите точную сумму 1 для вероятностей, что произойдет аналогичным образом, если вы вычислите с double или чем-то подобным.)

0 голосов
/ 17 октября 2010

Найдите наименьшее число и вычтите его (и еще 1) из всех вероятностей (в этом случае вычтите -6 и получите [26, 18, 1, 8]).Это, однако, не сохранит «двойную вероятность» одного события по сравнению с другим ... но, тем не менее, использование отрицательных вероятностей не очень логично ...

0 голосов
/ 14 октября 2010
new Random().Next(3) - 1; // returns random number between -1 and +1
0 голосов
/ 14 октября 2010

Даже после прочтения всего этого, я немного озадачен тем, почему вы получаете отрицательные числа, но у каждого языка есть абсолютная функция , которая всегда будет возвращать положительную версиюлюбое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...