Устранение ошибок

В этом документе перечислены решения проблем, которые наиболее часто встречались пользователям AnyLogic.

Если вы столкнулись с какой-то проблемой или ошибкой, и не нашли ее решения ни в Справке AnyLogic, ни в разделе Часто задаваемые вопросы, то вы можете обратиться за помощью к Службе технической поддержки (воспользовавшись командой Обратиться за помощью...).

Библиотека моделирования процессов

Пешеходная библиотека

Презентация

Агенты

Диаграммы состояний

Диаграммы и элементы сбора данных

Системная динамика

Базы данных



Произошла ошибка: No more handles

Эта ошибка часто происходит при работе с некоторыми конфигурациями аппаратных средств, например, когда вы щелкаете по сложному элементу управления в панели Свойства

Не существует простого способа решить эту проблему. Мы рекомендуем закрыть все модели, с которыми вы не работаете в данный момент, и перезапустить AnyLogic.

В качестве временного решения вы можете закрыть сообщение об ошибке, а затем щелкнуть по панели Свойства и продолжить работу:


Это поможет вам на время избавиться от ошибки, затем вам придется повторить эти действия.


Произошла ошибка компиляции: Неправильное имя типа агента: слово уже закреплено за исполняющим модулем AnyLogic

Вы создали тип агента с именем, которое уже используется в AnyLogic (например, Map).

Дважды щелкните мышью по описанию ошибки в панели Ошибки. AnyLogic переключится в поле свойств Имя соответствующего типа агента. Задайте новое имя для типа агента и скомпилируйте модель заново. После этого ошибка должна исчезнуть.


Произошла ошибка "Out Of Memory". Как я могу ее исправить?

Эта ошибка свидетельствует о том, что вашей модели не хватает памяти для хранения данных или для вычислений. Она может произойти как при запуске модели, так и во время ее работы. Зачастую она дополняется уточнением “Java heap space”. Такая ошибка не говорит о том, что вы исчерпали ресурсы вашего компьютера, и в большинстве случаев она может быть исправлена.

Наиболее очевидным способом устранения такой ошибки является увеличение объема выделенной Java памяти. По умолчанию объем памяти, выделенной для модели, ограничен 64 мегабайтами, что даже близко не приближается к обычным объемам физической памяти современных компьютеров. Поэтому вы можете легко позволить себе выделить больший объем памяти для вашей модели. Для этого нужно будет перейти к странице свойств Дополнительные вашего эксперимента и ввести необходимое число в поле Максимальный размер памяти

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


Произошла ошибка "IndexOutOfBoundsException"


Вероятно, вы обращаетесь к несуществующему элементу популяции/коллекции. Эта ошибка, как правило, возникает при вызове таких функций, как get(i), remove(i), и так далее, когда значение передаваемого аргумента i превосходит размер популяции.

В таких случаях код может выглядеть следующим образом: collection.get(0) . В данном случае вы пытаетесь обратиться к элементу пустой коллекции collection.

Еще один пример - функция remove_people(people(1)), где удаляется элемент популяции people.


Произошла ошибка при переименовании элемента с заменой ссылок на него

При выполнении переименования с заменой ссылок на заменяемое имя по команде Ctrl+Enter, появилось диалоговое окно, информирующее о возникновении фатальной ошибки:

Не стоит пугаться такой ошибки, это не ошибка AnyLogic или вашей модели. Как вы можете увидеть из приведенного в диалоговом окне описания, "This refactoring cannot be performed correctly due to syntax errors in compilation unit", то есть переименование не было выполнено вследствие того, что в данном элементе (чаще всего - типе агента) есть ошибки компиляции. Это означает, что вы пытались произвести переименование с заменой ссылок на меняемое имя в тот момент, когда в классе были критические ошибки. Эти ошибки сделали класс некомпилируемым, и поэтому AnyLogic не смог произвести переименование и перекомпилировать код класса заново.

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


Мне было показано сообщение о том, что срок действия лицензии на Сервис технической поддержки истек

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

Если вы хотите продлить срок действия лицензии, чтобы и в дальнейшем иметь возможность работать с последними обновленияим AnyLogic и обращаться за консультациями в службу технической поддержки, вам нужно бужет продлить срок действия лицензии на Сервис тех.поддержки. Для этого, пожалуйста, свяжитесь с нами адресу support@anylogic.com.


Я успешно экспортировал(а) модель в виде отдельного Java приложения, но при попытке запуска созданного .bat файла ничего не происходит

Все, что я вижу - это лишь следующее сообщение об ошибке: 'java' is not recognized as an internal or external command, operable program or batch file.

Simulation Applications (модели, созданные с помощью опции AnyLogic Экспорт -> Отдельное Java приложение) являются Java приложениями и требуют установки Java на той машине, на которой вы хотите запустить ваше приложение. Вы можете скачать дистрибутив Java с веб сайта Sun  https://www.java.com/en/download.

В моей модели присутствует стохастика, но все прогоны эксперимента выдают одни и те же результаты

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

Задание случайного начального числа генератора случайных чисел более подробно описано здесь.


Результаты прогонов моей модели не являются воспроизводимыми, хотя у меня я и выбрал Фиксированное начальное число в свойствах генератора случайных чисел

Вероятно, вы используете в вашей модели функцию random(). Именно она и может быть источником стохастики.

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

Функция же random() принадлежит классу java.lang.Math и обладает своим собственным генератором случайных чисел. Поэтому при каждом новом прогоне модели эта функция будет возвращать новые случайные числа. И если вы хотите, чтобы результаты прогонов вашей модели были воспроизводимыми, выберите опцию Фиксированное начальное число и используйте только функции вероятностных распределений AnyLogic.

Еще один возможный источник случайности - использование коллекции HashMap. Использование в модели коллекций такого типа может привести к тому, что даже при выбранной опции Фиксированное начальное число генератора случайных чисел, результаты такой модели будут различаться (будут невоспроизводимыми).


Я не могу найти, где задаются единицы модельного времени

Единицы модельного времени задаются на странице основных свойств модели, так как это свойство имеет отношение именно к модели.


Я не могу найти файл журнала ошибок (.log файл)

Файл журнала ошибок находится в одном из следующих каталогов (в зависимости от вашей операционной системы):

Windows:

"\Users\UserName\.AnyLogicEditionName\Workspace\.metadata\.log"

MacOS:

"Домашний каталог/.AnyLogicEditionName/Workspace/.metadata/.log"

ПРИМЕЧАНИЕ: Эта папка скрыта по умолчанию. Чтобы открыть доступ к ней, следуйте инструкциям.

Linux:

"~/.AnyLogicEditionName/Workspace/.metadata/.log"

где UserName - имя вашей учетной записи в Windows, а EditionName может быть PLE, Professional или University, в зависимости от того, с какой версией AnyLogic вы работаете.


Для моей библиотеки не создается Javadoc документация

Когда я экспортирую свою библиотеку, создается только .jar файл. Я не могу увидеть файлы документации Javadoc, хотя и выбираю при экспорте опцию Создать Javadoc.

Причина может быть одной из следующих:

  1. На вашем компьютере не установлен компонент Javadoc
  2. Путь к приложению javadoc.exe не прописан в переменных среды Windows. Чтобы прописать его, перейдите в Панель управления|Система|Дополнительные и нажмите на кнопку Переменные среды. Затем выберите переменную Путь, нажмите Редактировать... и добавьте путь к приложению javadoc.exe.
После этого попробуйте сделать экспорт библиотеки еще раз.

Но обратите, пожалуйста, внимание, что эта Java Doc документация не будет отображаться помощником подстановки кода для объектов вашей библиотеки - эта возможность пока еще не реализована.


Пропала панель инструментов AnyLogic

Вероятно, это произошло в результате непреднамеренного изменения расположения элементов пользовательского интерфейса AnyLogic.

Если произошла данная или подобная ситуация, когда вы расположили панели AnyLogic неудобным образом, и хотите вернуться к первоначальным настройкам расположения, то вы можете воспользоваться командой Восстановить расположение панелей, доступной из меню Инструменты.

Эта команда восстанавливает принятые по умолчанию настройки расположения панелей, редактора и панелей инструментов (когда панель Проекты прикреплена к левому края окна AnyLogic, панель Свойства - к нижнему, Палитра - к правому и т.д.), и в том числе и располагает панель инструментов на ее первоначальном месте под меню AnyLogic.


Библиотека моделирования процессов

При запуске модели произошла ошибка "Для стеллажа должна быть задана сеть"

       

Стеллаж не соединен с сетью, поэтому отсутствует возможность поместить агентов внутрь ячеек стеллажа. 

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

       


Возникла ошибка "java.lang.RuntimeException:... Агент не смог покинуть порт"

Эта ошибка не является ошибкой AnyLogic, а свидетельствует скорее о логической ошибке в вашей диаграмме процесса или "узком месте" в моделируемой вами системе. Причина ее в том, что агенты не могут покинуть выходной порт, отмеченный красным кружком на анимированной диаграмме процесса, и войти во входной порт последующего объекта.

Некоторые блоки могут выталкивать агентов, не дожидаясь, когда последующие блоки будут готовы их принять. Если агент не может покинуть блок в течение нулевого модельного времени, возникает ошибка выполнения модели. Таким образом, AnyLogic  исключает возможность скрытой буферизации или блокирования, поэтому вы всегда будете знать о произошедшем в вашей модели переполнении и сможете найти это "узкое место" модели.

Чтобы решить эту проблему, нужно будет либо добавить объект-буфер (например, Queue) после объекта с выделенным портом, либо перейти на протокол потока агентов PULL в блоке, где возникает ошибка. Чтобы переключиться с протокола PUSH на протокол PULL, в свойствах блока откройте секцию Специфические и отключите опцию Разрешить вытеснение.


Возникла ошибка "Агент не обладает ресурсом, который пытается присоединить, или же они находятся в разных точках сети"

Вы пытаетесь присоединить ресурс(ы) к агенту с помощью блока ResourceAttach, но агент и ресурс находятся в этот момент в разных точках сети. Поэтому вам вначале нужно сделать так, чтобы они находились в одном узле сети (переместив либо агента, либо ресурс), а уже потом соединять их вместе.

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


Я пытался динамически соединить порты объектов библиотеки, но ничего не произошло

Если вы динамически измените соединения портов объектов библиотеки с помощью методов connect()/disconnect() или map()/unmap(), то конечные порты не узнают о новом соединении и будут продолжать функционировать согласно устаревшей информации о топологии соединений, установленной при запуске модели.

Чтобы обновить информацию о соединениях портов, нужно вызвать метод refreshConnections()у тех портов, которые были динамически соединены или отсоединены от других портов. Например, если программно был соединен порт out объекта myService, то после этого вам нужно будет выполнить следующий код:

myService.release.out.refreshConnections();

Демо модель: Connecting Library Objects Dynamically

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


Объект Unbatch не извлекает агентов из поступающих агентов-партий

В моей диаграмме процесса есть комбинация блоков Batch - Unbatch, но блок Unbatch не извлекает агентов из поступающих на его вход агентов-партий, собранных ранее блоком Batch.

Чтобы разрешить блоку Unbatch извлекать агентов из поступающих на его вход агентов-партий, вы должны сбросить флажок Постоянная партия на странице свойств предшествующего блока Batch.


Пешеходная библиотека

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

Пешеходная библиотека была разработана для моделирования пешеходных потоков. Предполагалось, что пользователи будут использовать настоящие размеры пешеходов и моделируемых пространств. Разумеется, вы можете рисовать большие фигуры и использовать их для анимации пешеходов, но диаметр в 20 метров, конечно, не отражает реальность. Если вы хотите увеличить размер ваших пешеходов, мы рекомендуем увеличить масштаб анимации.


Презентация

Когда я выбираю любой цвет заливки для белой фигуры с помощью закладки Спектр в диалоговом окне Цвета, цвет моей фигуры не меняется.

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

Уменьшите насыщенность белого, потянув вниз метку-манипулятор в вертикальном регулярторе, расположенном в правой части диалогового окна, как показано на приведенном ниже рисунке:



Агенты

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

Чтобы получать сообщения в диаграмме состояний необходимо пересылать входящие сообщения этой диаграмме.

Откройте диаграмму того типа агента, который получает сообщения. Зажмите правую кнопку мыши и перетащите диаграмму вниз в графическом редакторе. Вы увидите элемент connections:


Щелкните по этому элементу. Откройте секцию Взаимодействие в панели Свойства и поставьте флажок возле соответствующей диаграммы состояний в таблице Перенаправлять сообщение в.



При запуске агентной модели возникла ошибка "Ошибка при выполнении дискретного события: d != com.anylogic.engine.MessageDeliveryType"

В данном случае вы отправляете сообщение другому агенту, используя функцию, которая не поддерживается в пространстве, где находятся ваши агенты. Например, вы используете функцию sendToRandomNeighbor(). Эта функция доступна только в том случае, если агент, который ее вызывает, находится в дискретном пространстве. Но в вашей модели агенты находятся в пространстве другого типа (непрерывном или ГИС-пространстве), и при вызове этой функции появляется данная ошибка. 

Подробное описание способов взаимодействия агентов и доставки сообщений вы найдете в статьеВзаимодействие агентов справки AnyLogic.


Диаграммы состояний

В моей модели возникли ошибки "Элемент не достижим. Соедините его с диаграммой состояний, объявленной с помощью Начала диаграммы состояний"

Каждый элемент диаграммы состояний (состояние, переход и т.д.) должен принадлежать какой-то диаграмме состояний, т.e. переход должен соединять какие-то состояния или псевдосостояния, а состояние должно быть соединено с диаграммой состояний. В тех случаях, когда конечные точки ваших переходов будут просто "висеть в воздухе" или же состояния не будут соединены с другими элементами корректно объявленной диаграммы состояний, возникнут упомянутые выше ошибки.

Поэтому первым делом вам нужно будет проверить, все ли элементы соединены с диаграммой состояний. Сделайте двойной щелчок по ошибке в панели Ошибки. Вы увидите, что некорректно нарисованный элемент будет выделен в графическом редакторе.

Или, возможно, вы перепутали индикатор начального состояния с началом диаграммы состояний, как показано на приведенном ниже рисунке:


Как вы можете видеть, пользователь использовал здесь указатель начального состояния вместо начала диаграммы состояний. В таком слычае нужно удалить указатель и заменить его злементом Начало диаграммы состояний, как показано на рисунке ниже:


Диаграммы и элементы сбора данных

Диаграмма во время моделирования остается пустой, данные на нее не добавляются

Причина может быть одной из следующих:


Мой набор данных хранит дублированные значения

Причина этого, скорее всего, в том, что ваш набор данных обновляется несколько раз в одни и те же моменты времени. Дело в том, что в AnyLogic обновление набора данных новыми значениями задается сразу в двух разных местах:

  1. В свойствах самого набора данных
  2. В свойствах диаграмм, отображающих значения этого набора данных

Скорее всего, у вас есть диаграмма, отображающая значения этого набора данных (а может, и несколько таких диаграмм или графиков). И опция автоматического обновления выбрана как у диаграммы, так и у самого набора данных. Чтобы решить эту проблему, можно, например, перейти к свойствам диаграммы и выбрать опцию Не обновлять автоматически.


На гистограмме не отображается функция распределения, хотя флажок "Отображать ф-ю распределения" у нее выбран

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

Пожалуйста, перейдите на страницу свойств этого элемента сбора данных и выберите там опцию Cчитать CDF.


Системная динамика

Возникла ошибка: Метод copyFrom(HyperArray) в типе HyperArray неприменим для аргументов (int)

В вашей модели есть переменная (например, накопитель), объявленная массивом системной динамики. В качестве Начального значения у этого массива задана скалярная величина, а должен быть задан вектор значений. Каждое значение в векторе будет задавать значение соответствующего элемента массива. Начальное значение массива проще будет задать с помощью специального редактора (это описано в данной статье). 


Базы данных

Как улучшить работу модели со включенным журналом выполнения модели?

Если выполнение эксперимента с включенным журналом выполнения модели занимает намного больше времени, вы можете отключить сбор данных для некоторых ненужных вам журналов.

Как отключить сбор данных для журнала

  1. После того, как вы завершили хотя бы один прогон модели и собрали информацию для журналов, разверните ветку База данных в панели Проекты.
  2. Разверните ветку элемента Журнал. Вы увидите в ней список журналов
  3. В дереве проектов выберите ненужный вам журнал и выберите опцию Мне не нужен этот лог в его свойствах