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

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

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

Основная библиотека

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

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

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


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

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

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

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


Окно AnyLogic закрывается при добавлении на презентацию рисунков или открытии свойств табличной функции

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

Чтобы устранить ее, нужно перейти в каталог, в котором установлена программа AnyLogic (например, С:/Program Files/AnyLogic 6), открыть файл AnyLogic.ini в текстовом редакторе и заменить в третьей строке -Xmx1024M на -Xmx512M

После этого запустите AnyLogic снова - больше ошибка воспроизводиться не должна.


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

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

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

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


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

Если Вы хотите продлить срок действия лицензии, чтобы и в дальнейшем иметь возможность работать с последними обновленияим AnyLogic и обращаться за консультациями в службу технической поддержки, Вам нужно бужет продлить срок дейстивя лицензии на Сервис тех.поддержки. Для этого, пожалуйста, свяжитесь с нами адресу support@xjtek.com. Информация о стоимости данной услуги приведена на сайте XJ technologies: http://www.xjtek.com/purchase/prices/.


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

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

Чтобы устранить это, нужно изменить настройки Вашего браузера:


Я успешно экспортировал(а) модель в виде отдельного 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 Developer Network: http://java.sun.com



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

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

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


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

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

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

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


Я не могу найти файл журнала выполнения моделей (.log файл)

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

Windows:

"\Documents and Settings\UserName\.AnyLogicEditionName\Workspace\.metadata\.log"

MacOS:

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

Linux:

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

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


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

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


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

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

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

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

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


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

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

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

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


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

Возможно, у Вас не установлена JRE (Java Runtime Environment) на компьютере. Скачать необходимый дистрибутив Вы можете с официального сайта Java: http://www.java.com/ru/download/index.jsp.

После установки попробуйте запустить апплет еще раз.


Основная библиотека

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


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

Выходные порты объектов Основной библиотеки могут быть двух типов: OutPort и OutPortPush

Первый используется в объектах, которые могут ждать, пока принимающий объект не будет готов принять заявку, таких как Queue и Conveyor

Большинство же объектов просто вытолкнут заявку и не будут ждать - в таких объектах используются порты типа OutPortPush. Если заявка не сможет покинуть порт OutPortPush в течение нулевого модельного времени, то возникнет ошибка. Поэтому Вы всегда будете знать о произошедшем в Вашей модели переполнении и сможете найти это "узкое место" модели.

Чтобы решить эту проблему, нужно будет либо добавить объект-буфер (например, Queue) после объекта с выделенным портом, либо увеличить вместимость очереди, если ошибка сама по себе произошла в порте объекта-буфера (Queue, Service и т.д.) 


При попытке отображения на диаграмме статистики использования объекта Основной библиотеки появилась ошибка java.lang.NullPointerException

Пожалуйста, откройте панель Консоль. Если Вы увидите там информацию, подобную следующей:

java.lang.NullPointerException
    at model.Main$1.update(Main.java:446)
    at com.xj.anylogic.engine.analysis.Chart.updateData(Chart.java:396)

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

Пожалуйста, просмотрите свойства Значение Ваших диаграммы на предмет отображения ими строк статистики, подобных delay.statsUtilization.mean(). Если Вы ссылаетесь на набор данных  statsUtilization какого-то объекта Основной библиотеки (например, Delay), то Вы должны вначале установить у этого объекта флажок Включить сбор статистики на странице его свойств. 

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


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

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

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


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

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

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

myService.release.out.refreshConnections();

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

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


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

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

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


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

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

Попробуйте использовать объект PedGoTo вместо объекта PedCmdGoTo

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

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


Пешеходы проходят сквозь стены, не обращая на них внимания

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


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

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

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

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

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


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


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

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

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


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

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

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

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


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

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

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