2015-09-17 7 views
1

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

Jump = normal(coef1, coef2, -1, 1); 

Однако, я получаю следующее сообщение, как только я начала калибровки (экспериментирование):

генерация случайных чисел требует слишком много итераций (> 10000)

Я пытался заменить -1 и 1 другими значениями и продолжать получать то же самое.
Я также попытался изменить границы coef1 и coef2 и положить вещи наподобие [0,1], но я все равно получаю ту же ошибку.

Я не понимаю. Любые идеи?

ответ

0

Согласно AnyLogic's documentation, нет версии normal, которая принимает 4 аргумента. Также обратите внимание, что если вы укажете среднее и стандартное отклонение, порядок необычен (вероятностным/статистическим), установив стандартное отклонение до среднего значения.

+0

Спасибо за информацию о среднем/std. На самом деле программа компилируется и работает хорошо с обычным с 4 аргументами. Anylogic изменил свою версию, но не обновил документацию, или эта функция устарела, но все еще доступна. Если я установил фиксированные значения для coef1 и coef2, программа будет работать нормально. – Lou

+0

Итак, важным аспектом вашего вопроса будет то, как вы указываете coef1 и coef2. Никто не может помочь вам узнать, почему что-то не так, если вы не даете полный контекст, в котором происходят сбои. – pjs

+0

Я нашел альтернативу. Спасибо за все. – Lou

2

Метод с четырьмя параметрами не является устаревшим и не является «калибровкой, где коэффициенты coef1 и coef2 являются коэффициентами, которые необходимо решить для». Откуда у тебя такое понимание? Или вы говорите, что используете «Эксперимент AnyLogic» (возможно, эксперимент с несколькими запусками или оптимизацией), чтобы «откалибровать» это распределение, и в этом случае вам нужно объяснить, что вы подразумеваете под «откалибровать» здесь --- каков ваш желаемый результат?

Если вы посмотрите в ссылке API (классы и функции AnyLogic -> Reference API -> com.xj.anylogic.engine -> Утилиты), вы увидите, что это метод использования усеченного нормального распределение.

public double normal(double min, 
        double max, 
        double shift, 
        double stretch) 

первых 2 параметров являются минимальными и максимальными (где он будет пробовать многократно и игнорировать значения за пределами [мин, макс] диапазон); вторая вторая - это среднее и стандартное отклонение. Таким образом, вы получите указанную вами ошибку, если min или max означает, что она будет отображать слишком много раз, чтобы получить значение в диапазоне.

ссылки API, подробности ниже:

Создает образец усеченного нормального распределения. Распределение нормальное (1, 0) растянуто по коэффициенту растяжения, затем сдвинуто на справа на сдвиг, после чего оно усекается в соответствии с интервалом [мин, макс.] . Усечение выполняется путем отбрасывания каждого образца за пределами этого интервала и последующей его попытки. Для получения дополнительной информации см. нормальный (двойной, двойной)

Параметры: min - минимальное значение, возвращаемое этой функцией. Распределение усечено, чтобы вернуть значения выше этого. Если образец (растянутый и сдвинутый) будет ниже этого значения, он будет отброшен и будет нарисован еще один образец . Используйте -infinity для «Без ограничений». max - максимальное значение, возвращаемое этой функцией. Распределение усечено, чтобы вернуть значения ниже этого. Если образец (растянутый и сдвинутый) больше этого значения, он будет отброшен и будет нарисован другой образец.Используйте + бесконечность для «Без ограничений». сдвиг - параметр сдвига, который указывает, насколько (растягивается) распределение будет сдвинута вправо = среднее значение Stretch - параметр растяжения, которое указывает, сколько распределение будет растягиваться = стандартные Возвращает отклонение: сгенерированный образец

+0

Серьезно ?? << Откуда у вас это понимание? >> ??? И вы, откуда вы поняли, что << Стандартный метод с четырьмя параметрами - это «калибровка, где coef1 и coef2 - коэффициенты, которые необходимо решить для». >> ???? Если вы не понимаете вопрос, просто не отвечайте! Не говорите людям, что они агрессивны, когда вы агрессивны. Если вы что-то не понимаете, вы формулируете вопрос. Но не играйте в эту чидшую игру «Откуда у вас это понимание?» Как ты умнее всех! – Lou

+0

Этот вопрос закрыт. У меня нет никакого интереса, когда у вас будет больше времени. Ваши ответы не приносят никакой пользы. Спасибо за ваше время. – Lou

+0

@Lou Um, удалив ваш комментарий к pjs, где вы были агрессивны, и где вы сказали, что ваша модель была «калибровкой, где coef1 и coef2 являются коэффициентами, которые нужно решить для», не круто. Я просто имел в виду: «Как вы пришли к этому пониманию?» поскольку вы говорили, что вам нужно «откалибровать распределение» и что «AnyLogic не обновил свою документацию». Таким образом, вам показалось, что вы прочитали что-то, что привело вас к пониманию того, что это было распределение, которое вам нужно было для калибровки, или пытались откалибровать по какой-то более широкой причине (отсюда и предложение после этого). –

 Смежные вопросы

  • Нет связанных вопросов^_^