Uniform anylogic что такое
Функция для генерирования случайных чисел AnyLogic
Реализовать 3 метода генерирования случайных чисел
Ребят, нужна, срочно, помощь, не могу реализовать 3 метода генерирования случайных чисел. Может у.
Алгоритм генерирования случайных комбинаций чисел по определенному правилу
Задача следующая: Необходимо сгенерировать конечное минимальное число комбинаций из 6 чисел.
В функции генерирования матрицы из случайных чисел код не доходит до конца
Здравствуйте всем! Помогите разобраться, написал программу, которая умножает две матрицы, но в.
функция для генерирования таблицы
Написать на PHP функцию, которая создает таблицу определенных размеров. 2
Решение
Функция генерации случайных чисел
Здравствуйте, возник такой вопрос: мне нужно определить генерацию случайных чисел в функцию и.
Есть ли в php функция генерации случайных чисел?
Есть ли в ПХП функция генерации случайных чисел?
функция,создающую двумерный масиив случайных чисел.
Помогите пожалуйста написать программу в С++. функция,создающую двумерный масиив случайных чисел и.
Функция, порождающая список, состоящий из случайных чисел
Реализовать функцию которая порождает по заданному N список, состоящий из N случайных натуральных.
Функция генерирования случайного вектора с равномерным распределением
Написать функцию генерирования случайного вектора 1х5 при равномерном распределении в диапазоне.
Функции (методы)
А следующий вызов функции распечатывает в лог модели координаты агента вместе с временной меткой:
traceln( time() «: X = » getX() » Y = » getY() );
Стандартные и системные функции
Большая часть кода, который Вы пишете в AnyLogic, является кодом подкласса Agent (основного класса исполняющего модуля AnyLogic). Для Вашего удобства системные функции AnyLogic и наиболее часто используемые стандартные функции Java доступны там напрямую (Вам не нужно думать, какому классу или пакету они принадлежат, и Вы можете вызывать эти функции без каких бы то ни было префиксов). Ниже приведены примеры (это лишь некоторые функции из нескольких сотен, полный список Вы можете найти в Справочнике классов AnyLogic ).
Функции, связанные с модельным временем, датой или элементами даты (около 20 функций):
Вывод в лог модели и форматирование:
Управление выполнением модели:
Навигация по структуре и окружению модели:
Если объект является агентом, то он поддерживает дополнительные функции:
Функции, связанные с сетями и взаимодействием агентов:
Функции, связанные с пространством и движением:
Вы можете получить список всех функций, доступных в текущем контексте, например, в поле свойства элемента, вызвав Мастер подстановки кода (нажав Ctrl + Пробел (Mac OS: Alt + Пробел )).
Функции элементов модели
Все элементы модели AnyLogic (события, диаграммы состояний, табличные функции, графики, графические фигуры, элементы управления, объекты библиотек и т.д.) отображаются в Java объекты и предоставляют в пользование свои поля и методы, с помощью которых Вы можете получить информацию об объектах и управлять ими.
Вот некоторые примеры вызова функций элементов текущего агента:
Планирование и отмена запланированных событий:
Посылка сообщений диаграмме состояний и проверка текущего состояния:
Отображение области просмотра:
Изменение цвета фигуры:
Эта строка кода прячет или показывает фигуру, в зависимости от текущего состояния флажка checkbox:
Изменение состояний и значений параметров вложенных агентов:
Вы можете получить список всех функций объекта, вызвав Мастер подстановки кода. Для этого напишите в коде имя объекта, поставьте точку и затем вызовите Мастер, нажав Ctrl + Пробел (Mac OS: Alt + Пробел ).
Задание Вашей собственной функции
Вы можете задавать свои собственные функции в агентах, экспериментах, Ваших собственных Java классах. Для типов агента и экспериментов функции могут задаваться графически, как элементы графического редактора.
uniform
Равномерное распределение является непрерывным распределением, ограниченным с обеих сторон, т.е. значение лежит в интервале [min,max). Плотность вероятности не зависит от значения x. Это распределение является особым случаем бета-распределения. Часто называется прямоугольным распределением.
Равномерное распределение используется для задания случайной переменной, которая может принимать любое значение в интервале между min и max с равной вероятностью. Обратите внимание, что вероятность максимального значения равна 0.
Пример
Описание
Генерирует случайное значение, равномерно распределенное в интервале [0,1), верхняя граница интервала не включена.
Результат
uniform(java.util.Random r)
Описание
Генерирует случайное значение, равномерно распределенное в интервале [0,1), верхняя граница интервала не включена, с помощью заданного генератора случайных чисел.
Параметры
генератор случайных чисел
Результат
Описание
Генерирует случайное значение, равномерно распределенное в интервале [0, max), верхняя граница интервала не включена, с помощью заданного генератора случайных чисел. Эквивалентно uniform(0, max).
Параметры
максимальное значение x
Результат
uniform(double min, double max)
Описание
Генерирует случайное значение, равномерно распределенное в интервале [min, max), верхняя граница интервала не включена.
Параметры
минимальное значение x
максимальное значение x
Результат
uniform(double min, double max, java.util.Random r)
Описание
Генерирует случайное значение, равномерно распределенное в интервале [min, max), верхняя граница интервала не включена, с помощью заданного генератора случайных чисел.
Беги, муравей. Беги
В данной статье рассматривается процесс создания имитационной модели поведения муравьиной колонии (можно почитать в википедии ) в среде имитационного моделирования «AnyLogic». Данная статья носит практический характер. В ней будет рассмотрен вопрос применения муравьиного алгоритма для решения задачи о коммивояжёре (Почитать можно тут).
Кратко о сути
Суть задачи коммивояжере заключается в том, что коммивояжер (продавец) должен посетить N городов побывав в каждом из них только один раз по наикратчайшему маршруту. Так как данная задача является NP-сложной и количество вариантов всех возможных маршрутов между N городами вычисляется как «N!», то время поиска кратчайшего маршрута будет увеличиваться по экспоненциальному закону с увеличением значения N. Соответственно время поиска кратчайшего маршрута(решения) с использованием алгоритма «полного перебора» (который дает точное решение) при количестве городов N>16 резко увеличивается (носит экспоненциальный характер). Поэтому мы будем искать не самый короткий по протяженности маршрут, а близкий к нему (рациональный) за конечное время с помощью «муравьиного алгоритма».
Немного слов о AnyLogic – это мощный инструмент позволяющий создавать имитационные модели различной сложности. В нем заложены различные подходы имитационного моделирования. Мы с Вами будем разбирать только один из подходов а именно «Агентное» моделирование. Реализован он на языке программирования «Java», который дополняет существующий инструментарий. Главным недостатком «AnyLogic» является ограничения бесплатной версии по количеству создаваемых агентов их количество не может быть более 50000. «Агент» – является базовой единицей системы имитационного моделирования AnyLogic. Более подробную информацию можно прочитать на сайте www.anylogic.ru
Инструменты
1. Anylogic – качаем бесплатную версию вот отсюда www.anylogic.ru/downloads
Первоначальное знакомство AnyLogic:
Рис. 1- Рабочее окно AnyLogic
Создание проекта
Тут все просто. Жмем на пункт меню «Файл» далее «Создать» и далее «Модель» вводим имя модели и жмем кнопку «Готово» (рис. 2).
Рис. 2- Создание модели
Создаем города
Ну что, приступим. Первое что, мы сделаем так это создадим так называемые города(вершины графа), которые будет посещать муравей посещать. Для чего открываем в палитре вкладку «Агент» и перетаскиваем оттуда красный кружочек с человечком в «Main» агента как это показано на рисунке 3.
Рис. 3- Создание городов
После того как вы отпустите кнопку мыши у Вас появиться диалоговое окно («Шаг 1»), предлагающее Вам создать агента. Где необходимо будет выбрать пункт «Популяция агентов» и нажать на кнопу «Далее».
Рис. 4- Создание городов
Появиться следующее диалоговое окно (Шаг 2) где необходимо будет ввести имя нового типа агента и имя популяции агентов. Вводим тип «MyTown» и имя популяции «myTowns» и жмем на кнопку «Далее».
Рис. 4а — Вводим имя нового агента
Далее появится следующие окно (Шаг 4.). Здесь выбираем «Анимация агента 2D» и иконку с надписью «Завод» и нажимаем кнопку «Готово» (рис. 5).
Рис. 5- Добавляем анимацию для агента
Теперь создадим переменную, которая будет определять начальное количество городов в нашей модели. Для чего из «Палитры» перетаскиваем в агент «Main» иконку с надписью «Переменная» и вводим ее название «numberTown». Далее нажимаем на иконку нашей переменной и во вкладке Свойства вводим ее начальное значение равное, например 10 и выбираем ее тип «int» (рис. 6).
Рис. 6- Создание переменной
Теперь установим начальное значение нашей популяции городов «myTowns», для чего нажмем мышкой на ее иконку и во вкладке «Свойства» в поле «Начальное количество агентов» напишем имя созданной ранее нами переменной (рис. 7).
Рис. 7 – Изменение свойств популяции «myTowns»
Далее сделаем вывод наших городов в агенте «Main» в случайном месте. Место ограничим квадратом 400×400 точек. Для чего во вкладке «Проекты» выбираем мышкой агент «Main» и во вкладке «Свойства» в поле «При запуске» добавляем следующий код на «Java» (рис. 7а):
Рис. 7а – Расставляем города
Далее можем уже посмотреть, что у нас с Вами получилось и запустить нашу модель. Для этого используем клавишу «F5», жмем ее и запускается окно для запуска эксперимента как показано на рисунке 8.
Рис. 8 – Запуск эксперимента
Далее нажимаем на кнопку «Запустить» в нижнем левом углу окна и происходит запуск эксперимента. У Вас на экране должно получиться окно с содержимым как показано на рисунке 9.
Рис. 9 – Результат эксперимента
Итак, на данном шаге мы создали 10 городов и разместили их в случайном (стохастическом) месте на нашем экране. Теперь перейдем к созданию наших «муравьев»
Создадим муравья
Создание муравья происходит аналогично создания города. В «Палитре» выбираем «Агент» и перетаскиваем его в «Main». Выбираем «Популяция агентов», потом «Я хочу создать новый тип агента» далее вводим «Имя нового типа» и «Имя популяции» «MyAnt» «myAnts» и жмем «Далее». После выбираем «2D» анимация и, например иконку с надписью «Истребитель» жмем «Готово» должно получиться как показано на рисунке 10.
Рис. 10 – Создаем муравьев
Согласитесь, самолетик не похож на муравья, поэтому мы с Вами это исправим. Заходим в поисковик ищем картинку, на которой изображен муравей и меняем самолет на муравья. Для чего выполняем двойное нажатие на красный кружок возле «myAnts». После чего откроется вкладка «myAnt» где нужно удалить самолет и на его место поместить муравья (рис. 11).
Рис. 11 – Вкладка myAnt
Выделяем мышкой самолет и жмем «Del». Далее переходим во вкладку «Презентация» и перетаскиваем оттуда элемент «Изображение». После автоматически откроется диалог для выбора файла. Выбираем файл с нашим муравьем (рис. 12) и жмем «Ок».
Рис. 12 – Вкладка myAnt с муравьем и уже без самолета
Идем дальше. Выполняем масштабирование муравья и перемещаем его на место, где был когда-то самолет. Должно получиться как показано на рисунке 12а. Все эти операции выполняются с помощь мыши.
Рис. 12а – Вкладка myAnt с муравьем
Оживляем муравья
Рис. 13 – Логика поведения муравья
Теперь давайте пропишем начальную логику работы диаграммы муравья. Выбираем мышкой стрелочку, которая выходит из блока под название «Выбор города» и добавляем во вкладке «Свойства» в поле «Действие» следующий код (рис. 14):
Тут все очень просто идем в цикле по всем городам и подбрасываем монету (генерируем случайную величину с вероятность. 0,5) если ее значение истина (орел), то отправляем муравья к этому городу покидая цикл. Выражение «this.moveTo(main.myTowns.get(i))» — функция, которая отправляет одного агента к другому.
Рис. 14 – Задаем первоначальную логику движения муравья
Далее жмем на стрелочку, которая выходит из блока «Движение» и во вкладке «Свойства» в поле «Происходит» установим значение «При получении сообщения» и выбираем пункт «При получении заданного сообщения» в поле «Происходит» как показано на рисунке 15.
Рис. 15 – Задаем логику для перехода между «Движение» и «Все обошел»
Теперь настроим последнюю стрелочку, которая выходит из блока «Движение». Выбираем ее мышкой и во вкладке «Свойства» в поле переход устанавливаем «По прибытию агента». Конечный вид «Диаграммы состояний» должен быть как показано на рисунке 16.
Рис. 16 – Диаграмма состояний с настроенными переходами между блоками
Рис. 17 – Работа диаграммы состояний
Теперь можем нажать «F5» по посмотреть, что получилось (рис. 18).
Рис. 18 – Оживление муравьев
Зададим критерии
Давайте научим муравья соблюдать эти правила. Для чего из «Палитры» вкладка «Агент» перенесем на вкладку «MyAnt» «Коллекцию» и «Переменную» и назовем их первую как «isVisited» а вторую как «distance». В первой будет учитывать города, в которых мы уже побывали, а во второй пройденное расстояние муравьем.
Рис. 19 – Добавляем переменные
Настроим коллекцию «isVisited». Для чего выбираем ее мышкой и во вкладке «Свойства» устанавливаем «Тип» элементов «int» как показано на рисунке 20.
Для переменной «distance» в ее свойствах в поле «Начальное значение» нужно поставить «0», а тип переменной «double».
Рис. 20 – Коллекция типа «int»
Теперь выбираем стрелочку, выходящую из блока «Выбор_города» и меняем код в поле «Действие» на ниже приведенный:
В коде выше мы добавили проверку на города, в которых уже успели побывать и учет городов, которые посетили, а также считаем пройденное расстояние. Код довольно простой я думаю Вам будет не трудно разобраться.
Можете попробовать запустить «F5» нашу модель и посмотреть, что же получилось. Теперь муравьи будут проходить по всем городам только один раз и завершать свое движение в блоке все обошел.
Меняем первоначальное размещение муравьев
На этом шаге определим для каждого муравья случайным образом выберем город, с которого он начнет свое путешествие. Для чего на вкладке «Проекты» выбираем мышкой агент «Main» после чего во вкладке «Свойства» добавляем в поле «При запуске» следующий код (рис. 20а):
Рис. 20а – Расставляем муравьев по городам
Я применил случайный выбор начального города. Вы же можете изначально определить всех муравьев только в один город.
Делаем муравьев непредсказуемыми
Внедрим в нашу модель формулу, приведенную ниже:
где Pi — вероятность перехода по пути i-му пути, li — длина i-го перехода, fi — количество феромона на i-ом переходе, q — величина, определяющая «жадность» алгоритма, p — величина, определяющая «стадность» алгоритма, при этом q+p=1.
Данную формула я позаимствовал с сайта.
Говоря простым языком, данная формула позволяет вычислить вероятность, с которой муравей должен будет осуществить переход в тот или иной город.
Теперь нужно добавить несколько переменных без которых нам не обойтись. Для чего возвращаемся обратно во вкладку «Main» рисунок 21.
Рис. 21 – Вкладка «Main»
Итак, добавляем переменную «numberAnt», в которой будем хранить размер муравьиной колонии. Устанавливаем ее тип «int» и начальное значение равное 100.
Рис. 21 – Переменная «numberAnt»
Далее выбираем популяцию «myAnts» и устанавливаем поле «Начальное количество агентов» равным «numberAnt».
Переменную «p», которая будет определять стадность алгоритма. Ее тип «double» и начальное значение равное 0.5.
Переменную «q», которая будет определять жадность алгоритма. Ее тип «double» и начальное значение равное 0.5.
Рис. 22 – Переменные «q и p»
Итак, теперь зададим случайное значение феромона для каждого ребра(дороги) между городами. Для чего создаем переменную (двумерный массив) «matrixF». Установим у нее во вкладке «Свойствах» в поле «Тип» выбираем значение «Другой» и прописываем «double[][]» в поле начальное значение «new double[numberTown][numberTown]» (рис. 23).
Рис. 23 – Создание двумерного массива «matrixF». Матрица феромонов
Далее нам необходимо инициализировать данную матрицу. Другими словами, заполнить ее случайными значениями. Значение феромона возьмём случайным образом в интервале от 0,1 до
1. Для чего на вкладке «Проекты» выбираем мышкой агент «Main» и после во вкладке «Свойства» добавляем в поле «При запуске» следующий код (рис. 23а):
Рис. 23а – Код инициализации матрицы феромонов
Теперь возвращаемся во вкладку «MyAnt» и приступаем к вычислению вероятности перехода в соответствии с вышеприведенной формулой. Выделяем переход между «Выбор_города» и «Движение» и меняем код в поле Действие на следующий (рис. 24):
Рис. 24 – Задаем поведение муравья на основе аналитического выражения приведенного выше
Рис. 25 – Определяем условия остановки муравья
Далее можете запустить «F5» модель и посмотреть, что получилось. Муравьи будут путешествовать между городами с вероятностью, рассчитанной согласно приведенному выше аналитическому выражению.
Обновляем значение феромона
Теперь давайте выполним два действия. Первое действие заключается в увеличении значения феромона на ребре между городами, по которому прошел муравей. Второе в испарении феромона на ребрах между городами, которое заключается в уменьшении значения феромонов относительно времени моделирования.
Итак, для начала к первому действию, будем обновлять значение феромона ребра, между городом в котором находится муравей и в которой ему предстоит отправиться. Величину, на которую будем увеличивать текущее значение феромона ребра между городами будем вычислять очень и очень просто. Берем нашу максимальную начальную величину значения феромона = 1 у.е. и делим ее на расстояние между городом, в котором находится муравей и городом куда он собирается отправится. Соответственно, чем меньше расстояние, между городами тем больше составит значение, на которое будет увеличен уровень феромона ребра. Для чего выбираем во вкладке «Проекты» агент «MyAnt» выбираем мышкой переход между блоками «Выбор_города» и «Движение» и в поле действие добавляем следующий код «main.matrixF[currentPos][i]=main.matrixF[currentPos][i]+1/this.distanceTo(main.myTowns.get(i);». В итоге должно получаться как показано на рисунке 26
Рис. 26 – Обновляем значение уровня феромонов ребер, по которым прошел муравей
Теперь перейдем к действия №2 и создадим событие, которое будет имитировать испарение феромона на ребрах между городами. Для чего во вкладке проекты выбираем агента «Main» и создаем там еще пару переменных. Первая это «intensity» — будет определять скорость(интенсивность) испарения феромона (Начальное значение «0.5» тип «double»). Вторая «Part» — будет характеризовать долю, на которую будет уменьшаться значение феромона на ребре (Начальное значение «0.9» тип «double»).
Рис. 27 – Создаем переменные «intensity» и «Part»
Далее берем из «Палитры» вкладки «Агент» элемент «Событие» и переносим его в агент «Main» и называем его «evaporation» — этот элемент будет имитировать испарение феромона на ребрах. Жмем на него мышкой и в «Свойствах» в поле «Тип события» выбираем значение «С заданной интенсивностью» в поле «Интенсивность» прописываем имя переменной, которая хранит значение интенсивности «intensity». Время срабатывания оставляем секунды. Далее в действие добавляем код, приведенный ниже:
При срабатывании события «evaporation» будут обновляться значения уровня феромона в матрице matrixF. В итоге у Вас должно получаться так как показано на рисунке 28.
Рис. 28 – Создаем событие «evaporation»
Определим победителя
На этом шаге допишем код, который будет определять победителя нашего муравьиного марафона. Победителем будет тот из муравьев, который пробежал по протяженности самый короткий маршрут. В дополнение ко всему после окончания марафона начертим этот маршрут на экране. Для достижения этой цели создадим в агенте «Main» три переменные «bestAnt», «bestDistance» и «numberFinish». В переменной «bestAnt» мы будем хранить индекс самого «быстрого» муравья, тип переменной будет «int» а начальное значение установим «-1». В переменной «bestDistance» будем хранить текущее значение наилучшего по протяженности маршрута между городами, тип переменной будет «double» а начальное значение установим равным бесконечности «infinity». В переменной «numberFinish» будем хранить количество муравьев, которые финишировали в нашем марафоне, тип переменной будет «int» а начальное значение равно «0» (рис. 29).
Рис. 29 – Создаем событие переменных
Далее создадим функцию, которая после финиширования всех муравьев будет рисовать линии наилучшего маршрута между городами. Для чего из «Палитры» перетаскиваем в агент «Main» элемент с названием функция. Имя функции устанавливаем drawPath и во вкладке «Свойства» в поле тело функции добавляем следующий код:
В итоге у Вас должно получиться так как показано на рисунке 29а.
Рис. 29а – Создаем функцию «drawPath»
Теперь возвращаемся обратно к нашим муравьям и дописываем код, который будет определять муравья победителя, протяженность наилучшего маршрута и рисовать этот маршрут между городами. Для чего во вкладе «Проекты» выбираем агента «MyAnt» далее выбираем блок «Все_обошел» и добавляем в поле «Действие при входе» нижеприведенный код:
Должно получиться как показано на рисунке 30.
Рис. 30 – Добавление логики в блок «Все_обошел»
После чего можете нажать «F5» и запустить модель. Муравьи будут бегать искать маршруты, а когда финишируют города соединит синяя линия, которая и есть наилучший маршрут.
Добавим гистограмму в модель
Для того чтобы модель стала более научной нужно обязательно добавить график. Поэтому мы с Вами добавим не просто график и гистограмму, которая будет показывать нам распределение протяженности маршрутов, которые преодолели муравьи. Для чего во вкладке «Проекты» выбираем агента «Main» и переходим в его пространство. Далее В «Палитре» переходим во вкладку «Статистика» и оттуда в агент «Main» переносим элемент «Данные гистограммы» и непосредственно саму «Гистограмму». Потом выбираем мышкой гистограммы и во вкладке «Свойства» в поле «Данные» прописываем имя наших «Данных гистограммы» т.е. «data».
Должно получиться как показано на рисунке 31
Рис. 31 – Строим график
После чего нам придется опять вернуться к нашему муравью и заставить его наполнять «Гистограмму» значениями протяженности маршрута. Для чего во вкладке проекты выбираем агента «MyAnt» и переходим в его пространство. Далее выбираем блок «Все_обошел» и добавляем в него одну строчку «main.data.add(distance);». Должно получиться как показано на рисунке 32.
Рис. 32 – Строим график
Далее нажимает «F5» и приступаете к исследованию поведения муравьиного алгоритма. Должно получиться что, то вроде как показано на рисунке 33.
Рис. 33 – Моделируем
Заключение
И в конце рекомендую добавить в модель еще больше непредсказуемости. Для чего во вкладке «Проекты» выбираете мышкой элемент «Simulation: Main» и во вкладке свойства устанавливаете параметр «Случайность» в положение «Случайное начальное число (уникальные прогоны)» — это позволит каждый запуск модели сделать уникальным (рис. 34).
Рис. 34 – Делаем случайными прогоны