Вероятность в NetLogo - использование одного из или создание случайного числа

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

let b random 3
if b = 0 [set Output "Output1"]  
if b = 1 [set Output "Output2"]  
if b = 2 [set Output "Output3"]


Or this one :   
set output one-of ["Output1" "Output2" "Output3"]
  • Обновить:

Я только что проверил это с помощью простой программы netlogo:

turtles-own [X Y A]

to setup
  __clear-all-and-reset-ticks

  create-turtles 50
  [set A random 3000
   set y random-normal 0.5 0.1
   set x random-normal 0.5 0.1
   move-to patch random 20 random 20]
end

to go
  ask turtles
  [ set A A + 1
    fd 1
    rt random 10 
    if A > 4000 [die]
    if random-float 1 < 0.003 and a > 1000 and A < 3000 [
      let xx x
      let yy y
      hatch 1
      [ set A 0
        set x one-of (list  (random-normal 0.5 0.1) (xx + 0.1) (XX - 0.1))
        let b random 3
        if b = 0 [set y random-normal 0.5 0.1]
        if b = 1 [set y yy + 0.1]
        if b = 2 [set y yy - 0.1 ]

        ]
      ]

    ]
  tick
end

Результаты следующие:

введите здесь описание изображения

Нет большой разницы в использовании любого из этих методов :)


person Marzy    schedule 20.11.2013    source источник
comment
Если вы не получили ответа здесь, спросите в группе поддержки NetLogo в группах Google, так как вам, вероятно, понадобится ответ от одного из разработчиков (или от кого-то, кто готов просмотреть исходный код, чтобы найти ответ). Однако некоторые из разработчиков периодически отвечают на вопросы здесь.   -  person Mars    schedule 25.11.2013
comment
Спасибо, Марс, я попробую это, если не получу здесь ответа, но я только что вспомнил, что могу проверить это сам в простой программе netlogo, но, поскольку я новичок, могут быть другие аспекты, о которых я не знаю :)   -  person Marzy    schedule 25.11.2013
comment
Хороший тест, и у вас есть ответ от главного разработчика.   -  person Mars    schedule 25.11.2013


Ответы (1)


В вашем коде измерения есть ошибка. Измените b = 3 на b = 2, и я предполагаю, что вы увидите, что любая разница исчезнет.

Если в NetLogo (или JVM) нет какой-то странной ошибки, которую еще никто не обнаружил, не должно быть никакой разницы, используете ли вы one-of или random. Насколько мне известно, такой ошибки нет.

Соответствующие исходные файлы:

Единственная разница состоит в том, что первый вызывает context.job.random.nextLong, а второй context.job.random.nextInt (поскольку размер списка NetLogo — целое, а не длинное, а ввод для random — длинный). Но и nextInt, и nextLong одинаково высокого качества; это просто вызовы стандартного MersenneTwisterFast, который широко используется людьми, занимающимися моделированием.

person Seth Tisue    schedule 25.11.2013
comment
Спасибо за подсказку, я исправил, в моей собственной программе я использовал 2, но в тестовой я не знаю, почему я написал 3! - person Marzy; 26.11.2013
comment
Мне было интересно, есть ли в netlogo какая-либо функция для генерации случайного числа с плавающей запятой между нулем и 1? Я думаю, что мой вопрос может быть глупым, поэтому я не хочу задавать новый вопрос на форуме :) (например, Math.max или Math.min в java). Я использую random-normal 0.5 0.1, но в моей основной программе есть - это концепция наследования, и могут быть случаи со значениями больше 1 или меньше нуля. существует вероятность -0,1 или 0,1 вариации переменной для ребенка и родителей. - person Marzy; 26.11.2013
comment
random-float 1 даст вам случайное число с плавающей точкой от 0 до 1. - person Seth Tisue; 26.11.2013
comment
Да, это правильно :) Я имел в виду, что поставить ограничение на саму переменную, я знаю, что задал не тот вопрос, моя проблема в наследовании, я использую проверку после вычисления значения, чтобы дочерний агент видел по вариации -.1 и +0.1 значение все еще находится в диапазоне, спасибо за ваш ответ :) - person Marzy; 26.11.2013
comment
О, кажется, теперь я понимаю, чего ты хочешь. Давай, задай его как отдельный вопрос, это не глупо. - person Seth Tisue; 26.11.2013