А.Е.Осоргин_-_AnyLogic_6_Лабораторный_практикум. Министерство образования и науки российской федерации федеральное государственное образовательное учреждение среднего профессионального образования Поволжский государственный колледж
Скачать 3.11 Mb.
|
Автоматическая остановка, то оптимизация будет продолжаться до тех пор, пока значение целевой функции не перестанет существенно улучшаться (эта функция не доступна в учебной версии программы). Затем следует задать оптимизационные параметры, т.е. параметры, значения которых будут меняться. Мы изменяем только один параметр: угол выстрела α , причем этот угол может принимать любое значение от 0 до 180 0 , поэтому в таблице Параметры напротив параметра a щелкните мышью в ячейке Тип и выберите тип параметра непрерывный и установите минимальное значение – 0 , максимальное – 3.1415 , начальное значение – 1 , рис. 9.7. Нажмите кнопку Создать интерфейс, при этом будет создан интерфейс эксперимента – на презентацию будут добавлены элементы управления, отображающие текущий прогресс оптимизации и облегчающие управление процессом. Затем сохраните проект и запустите оптимизационный эксперимент. 69 9.5. ЗАПУСК МОДЕЛИ Кнопка Запустить оптимизацию на презентации оптимизационного эксперимента выполняет запуск оптимизационного процесса, рис. 9.8. В правой части расположен график, визуально отображающий ход оптимизации. По оси X откладываются номера итераций, а по оси Y - Текущее,_Лучшее_допустимое_и_Лучшее_недопустимое'>Текущее, Лучшее допустимое и Лучшее недопустимое значения, найденные для каждой итерации. Рис. 9.7 Таблица, расположенная в левой части окна, отображает всю необходимую информацию о ходе оптимизационного процесса. В столбце Текущее отображаются: номер последней завершенной итерации, значение целевой функции и значения параметров, при которых оно было получено на момент окончания этой итерации. Рис. 9.8 70 В столбце Лучшее отображается та же информация для найденного решения, которое является оптимальным на данный момент. По завершении оптимизации это решение будет считаться оптимальным найденным решением. Вы можете экспортировать полученное решение в другие эксперименты модели, щелкнув по кнопке copy и вставив его в дальнейшем в нужный эксперимент с помощью кнопки Вставить из буфера, расположенной в нижней части страницы Основные панели Свойства этого эксперимента. Постройте модель и продемонстрируйте полученный результат преподавателю. 9.6. КОНТРОЛЬНЫЕ ЗАДАНИЯ 1. Доработайте оптимизационную модель таким образом, чтобы учитывался встречный ветер со скоростью 10 м/с. (5) 2. Доработайте оптимизационную модель таким образом, чтобы учитывался попутный ветер со скоростью 10 м/с. (5) 3. Доработайте оптимизационную модель таким образом, чтобы учитывалась следующая зависимость коэффициента сопротивления от высоты: при h < h max /10, Ксопр = 0,02; при h >= h max /10, Ксопр = 0,01. (h max – максимальная высота, достигаемая снарядом при отсутствии сопротивления воздуха). (5) 4. Доработайте оптимизационную модель таким образом, чтобы учитывалась следующая зависимость коэффициента сопротивления от вертикальной скорости: при наборе высоты Ксопр = 0, при спуске Ксопр = 0,1. (4) 5. Доработайте оптимизационную модель таким образом, чтобы учитывалась следующая зависимость коэффициента сопротивления от вертикальной скорости: при наборе высоты Ксопр = 0,1 при спуске Ксопр = 0. (4) 6. Доработайте оптимизационную модель таким образом, чтобы учитывалась подъемная сила, зависящая от квадрата скорости полета, Кпод = 0,01. (5) 7. Доработайте оптимизационную модель таким образом, чтобы в качестве целевой функции использовалась дальность броска с несколькими отскоками, сопровождающимися потерей энергии. (5) 8. Доработайте оптимизационную модель таким образом, чтобы учитывалась следующая зависимость коэффициента подъемной силы от вертикальной скорости: при наборе высоты Кпод = 0, при спуске Кпод = 0,5. (5) 9. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда. (5) 10. Доработайте оптимизационную модель таким образом, чтобы определить угол бросания, при котором снаряд упадет в ту же точку, при условии, что на снаряд действует встречный ветер, со скоростью 15 м/с. (5+) 11. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда, прямо пропорциональная высоте полета. (5) 12. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда, действующая только в начале полета и отключаемая через 10 секунд. (5) 13. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда, обратно пропорциональная высоте полета. (5) 14. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда, обратно пропорциональная высоте полета. Целевая функция – продолжительность полета. (5) 15. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила 71 реактивной тяги двигателя снаряда, обратно пропорциональная высоте полета и всегда направленная в верхний сектор, т.е. вертикальная составляющая тяги всегда положительна. (5) 16. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда, обратно пропорциональная высоте полета и всегда направленная в верхний сектор, т.е. вертикальная составляющая тяги всегда положительна. Целевая функция – продолжительность полета. (5) 17. Доработайте оптимизационную модель таким образом, чтобы учитывалась сила реактивной тяги двигателя снаряда, направленная всегда вертикально вверх и включаемая циклически, например 1 сек. – работает, 15 сек. – не работает. (5) 72 ЗАДАНИЯ 10 – 11 АГЕНТНОЕ МОДЕЛИРОВАНИЕ: БРОУНОВСКОЕ ДВИЖЕНИЕ ЦЕЛИ ЗАНЯТИЯ • освоение методов агентного моделирования; • модификация агентной модели плоского соударения шаров; ФОРМА ОРГАНИЗАЦИИ ЗАНЯТИЯ Фронтальная. СТУДЕНТ ДОЛЖЕН ЗНАТЬ технологию построения моделей, понятия: агент, объектно-ориентированное программирование, основы языка Java, интерфейс программы AnyLogic. СТУДЕНТ ДОЛЖЕН УМЕТЬ создавать модели в программе AnyLogic; пользоваться справкой AnyLogic. ОБЕСПЕЧЕННОСТЬ компьютер с установленной программой AnyLogic версии 6, модель Шары, настоящий курс лабораторно-практических работ. ПРАКТИЧЕСКОЕ ЗАДАНИЕ Рассмотрим динамическую систему, имитирующую столкновения: биллиардных шаров, падающих и сталкивающихся мячей или частиц при хаотичном броуновском движении. Эта модель позволяет изучить агентный подход к решению задач, связанных со взаимодействием отдельных объектов. Первым шагом при создании агентной модели является создание агентов. Агент является основным строительным блоком агентной модели. Агентная модель состоит из множества агентов и их окружения. Для каждого агента задается набор правил, согласно которым он взаимодействует с другими агентами; это взаимодействие и определяет общее поведение системы. В нашей модели агентами будут сталкивающиеся шары. Откройте модель с именем Шары и тщательно изучите. В следующей части задания Вам предстоит модернизировать эту модель. 10.1. ОПИСАНИЕ ПРОБЛЕМЫ Шары одинаковой массы двигаются в ограниченном двумерном пространстве с упругим соударением без потери энергии. Столкновение шаров со стенками мы рассматривали в самой первой работе, вспомним, что новое значение скорости шара получается путем изменения знака соответствующей составляющей скорости. Рисунок 10.1 демонстрирует 73 столкновение двух шаров друг с другом. При центральном упругом столкновении шаров они будут обмениваться своими скоростями. В нашей модели силы трения очень малы по сравнению с упругими силами. Поэтому, при нецентральном столкновении действием сил трения можно пренебречь. Проведем через центры соприкоснувшихся шаров прямую и разложим скорость каждого шара на нормальную составляющую, направленную вдоль этой прямой, и касательную составляющую, перпендикулярную к ней. Так как, силы трения отсутствуют, изменяться будут только нормальные составляющие скорости шаров vr так же, как при центральном столкновении, то есть произойдет обмен нормальными составляющими скоростей, рис. 10.1. Рис. 10.1 10.2. ОПИСАНИЕ МОДЕЛИ Модель состоит из двух классов активных объектов: сталкивающихся шаров и плоского пространства, содержащего эти шары. 10.2.1. МОДЕЛЬ ШАРА Как и в первой работе, шары моделируются классом Ball , который содержит параметры, переменные и события. Параметры: r – радиус шара, Хmax и Ymax – размеры прямоугольной области, в которой двигаются шары, V – начальная скорость шара, g – ускорение свободного падения. Пременные: положение его центра х и y в координатах Х и Y, составляющие скорости vx и vy по этим координатам (см. рис. 10.1). Три переменных описаны интегралами: Vx dt dx = ; Vy dt dy = ; g dt dVy = Переменная vx задана как простая переменная, т.к. по оси Х на шары не действуют внешние силы. Кроме того, в классе активного объекта Ball задана переменная color типа Color , с помощью которой можно явно задать значения цветовых компонент цвета (Красный, Зеленый и Синий), (значения задаются в диапазоне от 0 до 255). vx X Y vy v v1 v2 vn1 vr1 vn2 vr2 74 Чтобы программно задать произвольный цвет для любого графического объекта, следует вызвать конструктор, например, для создания розовато-лилового цвета: new Color(255, 127, 255). Для окрашивания шаров в различные случайные цвета, будем использовать функцию uniform_discr(255) , принимающую случайное целое значение, распределенное равномерно между 0 и 255: new Color(uniform_discr(255), uniform_discr(255), uniform_discr(255)). Каждый раз при обращении к переменной color конструктор new Color будет порождать значение случайного цвета. Поле Действие_при_запуске'>Действие при запуске панели Свойства класса активного объекта Ball содержит операции, которые необходимо выполнить при порождении каждого экземпляра шара. Это – задание случайного направления движения любого порождаемого шара, а также случайные значения координат его центра, рис. 10.2. Рис. 10.2 Каждый вновь создаваемый шар будет двигаться со скоростью V в случайно выбранном направлении и все шары будут распределены равномерно в заданном пространстве, так, чтобы не попасть на уже имеющиеся шары. 10.2.2. ПОВЕДЕНИЕ ШАРА Шары движутся в поле силы тяжести или в невесомости (если g=0 ) со скоростями vx и vy , до тех пор, пока не столкнутся с каким либо препятствием: вертикальной границей пространства, в котором движутся шары, горизонтальной границей и другим шаром. 75 Столкновение с каждым видом препятствия отслеживается специальным объектом – событием, которое выполняет определенные действия. В нашей модели определено три события, по одному на каждый тип столкновений. Столкновение с границей происходит, когда центр шара приблизится к ней на расстояние радиуса r и шар движется в направлении этой границы. При наступлении события столкновения с границей, изменяется знак соответствующей составляющей скорости шара, и шар отскакивает от нее. Событие столкновения одного шара с другим проверяется функцией checkHit() , которая возвращает указатель на тот шар, с которым столкнулся другой шар, или пустой указатель null , если столкновения не было. При столкновении шаров, их скорости vx и vy пересчитываются в соответствии с рис. 10.1., а Ява код задан в поле Действие окна свойств события bounceBall 10.2.3. МОДЕЛЬ ПРОСТРАНСТВА Пространство, в котором движутся шары, включает вложенный реплицированный объект типа Ball , с числом элементов 10. Часть параметров ( Хmax, Ymax, g , r ) класса Ball переопределена на странице Параметры панели Свойства, что позволяет управлять ими из корневого объекта. Кроме того, в корневом классе Main определена функция checkHit() типа Ball , в которую передается указатель на проверяемый шар, а возвращается указатель на шар, с которым он столкнулся: return b1. В случае если столкновения нет, функция возвращает пустой указатель: return null; Функция checkHit() вызывается из события bounceBall , которое в качестве параметра передает указатель this на свой шар. Переменная this есть в каждом шаре и содержит ссылку на свой шар. В классе Ball мы не можем задать функцию checkHit() , потому что она должна иметь информацию о положении и скоростях всего множества шаров, а это множество определено в активном объекте Main 10.3. ПРЕЗЕНТАЦИЯ Шар представляется овалом с динамическими значениями: r радиуса, его координат х и y и цветом заливки color. Так как в презентации класса Ball указано, что овал, представляющий шар, виден на верхнем уровне, то в презентации корневого объекта Main автоматически будут включены 10 экземпляров овалов радиуса r и случайно выбранным цветом Эти овалы будут распределены равномерно в прямоугольном пространстве, и будут двигаться в различных (случайных) направлениях, имитируя движения шаров в модели. 10.3.1. ИЗМЕНЕНИЕ РАДИУСА ШАРОВ И СИЛЫ ПРИТЯЖЕНИЯ Рассмотрим, как изменить радиусы шаров r во время работы модели. 76 У каждого шара есть свой параметр r , который может принимать произвольные и различные значения, т.е. радиус каждого шара может быть уникальным, отличным от радиусов других шаров. Для того чтобы сделать возможным изменение радиуса сразу всех шаров из включающего их объекта Main , можно использовать параметр r , определенный в классе Main . В свойствах вложенного реплицированного объекта balls мы переопределили параметр r, как показано на рис. 10.3. Эта связь параметра r , заданного в классе Main с параметром r , заданном в классе Ball позволяет управлять радиусами всех шаров из корневого объекта. Эта связь однонаправленная, мы можем из корневого объекта изменить все параметры r реплицированных объектов, но при изменении r в каком-нибудь реплицированном объекте, параметр r в корневом объекте останется неизменным. Рис. 10.3 Собственно изменение радиуса шаров реализовано с помощью слайдера, связанного с параметром r корневого объекта (класса Main ). Аналогично регулируется параметр g – ускорение свободного падения. 10.4. ИЗМЕНЕНИЕ ЧИСЛА ШАРОВ Для удаления случайного шара (элемента коллекции balls ) из модели, во время ее работы, следует использовать оператор: if ( balls.size() > 0 ) remove_balls( balls.random() ) который сначала проверяет, есть ли в модели хотя бы один шар, с помощью метода size() , а затем, для удаления случайного шара используется метод remove_balls(), которому в качестве параметра передается ссылка на один из реплицированных объектов, выбранных случайным образом balls.random() Для обращения к конкретному объекту, например №3 следует использовать метод get() , в котором указать номер объекта (номера объектов в коллекции начинаются с 0). То есть, для того, чтобы удалить шар под №3 нужно выполнить оператор: remove_balls( balls.get(3)). Для создания в модели нового шара (добавления в коллекцию реплицированных объектов balls дополнительного элемента класса Ваll), во время ее работы, используется метод: 77 add_balls() , без параметров. Можно создавать экземпляры объектов и сразу же задавать значения параметров этих объектов путем вызова следующего метода: add_activeObjectName(parameter1, parameter2, ...) , где activeObjectName – имя реплицированного объекта (в нашем случае balls ), а параметры перечислены в том порядке, в котором они показаны на рис. 10.3. Эти операторы записаны в поле Действие панелей свойств кнопок Добавить шар и Удалить шар. При каждом нажатии на соответствующую кнопку во время работы модели будет создан или удален шар. Обратите внимание, что эти методы создаются в классе Main , так что они могут быть вызваны напрямую из любого места класса Main (например, из его Действия при запуске или из Действия события и т.д.). При необходимости создания или удаления объекта из другого объекта, нужно вначале получить ссылку на объект Main с помощью метода get_Main() . Например, если один шар порождает другой, то следует написать такой код в объекте "родителя": get_Main().add_ balls() Другой часто используемый случай: элемент реплицированного объекта (шар) должен уничтожить сам себя: get_Main().remove_ balls( this ) , здесь параметр this – это ссылка на самого себя. • 10.5. ИЗМЕНЕНИЕ МОДЕЛИ BILLIARD_BALLS Выполните задание своего варианта и продемонстрируйте преподавателю. 10.5.1. НЕКОТОРЫЕ ПОЯСНЕНИЯ К ЗАДАНИЯМ 1. Обратите внимание на то, что в исходной модели, в функции checkHit(), определяющей столкнутся шары или нет, предполагается, что все шары имеют одинаковый радиус r. Следует видоизменить эту функцию таким образом, чтобы при вычислении возможности столкновения шаров учитывалось, что они могут иметь разный размер. 2. В вариантах, в которых требуется моделировать поведение шаров двух типов, например синих и красных, не следует создавать 2 класса активных объектов (для каждого типа шаров). Вместо этого целесообразно объявить параметр, определяющий тип шара и в зависимости от этого параметра задавать внешний вид и поведение шаров. 3. Узнать номер реплицированного элемента из коллекции (номер шара, под которым он стоит в коллекции) можно с помощью метода getIndex() Вариант 1. Требуется модернизировать модель следующим образом: 78 1. Рабочая зона должна быть поделена на 2 части, соответственно верхнюю и нижнюю. 2. В верхней зоне может одновременно находиться не более N шаров. Значение N должно регулироваться слайдером в диапазоне от 0 до 10. 3. Шары могут свободно покидать верхнюю зону, но войти в нее могут, только если в этой зоне число шаров меньше N. 4. В презентации модели отразить количество шаров в верхней зоне. (5) |