А.Е.Осоргин_-_AnyLogic_6_Лабораторный_практикум. Министерство образования и науки российской федерации федеральное государственное образовательное учреждение среднего профессионального образования Поволжский государственный колледж
Скачать 3.11 Mb.
|
ПРАКТИЧЕСКОЕ ЗАДАНИЕ В этом задании необходимо построить модель динамической системы, в которой требуется учесть как непрерывные процессы (движение маятника), так и дискретные события (изменение структуры системы при встрече с ограничителем). 8.1. ОПИСАНИЕ ПРОБЛЕМЫ Эта модель является дальнейшим развитием предыдущей модели маятника. Маятник, (см. рис. 8.1) при соприкосновении нити с ограничителем начинает закручиваться вокруг ограничителя, т.е. в модели появляется второй центр вращения. Уравнения, описывающие движение маятника без ограничителя (на нити длиной L+l) и с ограничителем (на нити длиной l) , представлены ниже: Движение без ограничения. ω α = dt d ; ; ) sin( 2 ω μ α ω ⋅ − + ⋅ − = l L g dt d ); sin( ) ( α ⋅ + = l L x ) cos( ) ( α ⋅ + = l L y 59 Движение при ограничении. ω α = dt d ; ; ) sin( 2 ω μ α ω ⋅ − ⋅ − = l g dt d ); sin( ) sin( Pin L l x α α ⋅ + ⋅ = ) cos( ) cos( Pin L l y α α ⋅ + ⋅ = , где: α - текущий угол отклонения маятника от вертикали, ω - его угловая скорость, μ - коэффициент сопротивления среды, пропорциональной квадрату угловой скорости. Начальные условия: 0 ) 0 ( ; 0 ) 0 ( = = ω α α 8.2. ОПИСАНИЕ МОДЕЛИ Маятник с ограничителем – это система, в которой происходят как непрерывное движение, так и дискретные события, изменяющие характер движения. Такая модель должна содержать уравнения, описывающие непрерывное движение, и стейтчарты, для описания дискретных событий. Рис. 8.1 Модель должна содержать четыре переменные: х, у, alpha и omega , и шесть параметров: L, l, mu, alphaPin, g и alpha0 Их физический смысл ясен из рис. 8.1. Как и в предыдущей модели, alpha0 – начальное значение угла отклонения маятника. Поведение маятника описывается стейтчартом с именем Колебания, рис.8.2, с двумя состояниями. В одном состоянии описывается непрерывное движение маятника без ограничения (состояние Без_ограничения ), в другом (состояние С_ограничением ) – описывается движение вокруг ограничителя. В зависимости от состояния, в котором находится система, переменные х, у и omega будут описываться различными уравнениями. Рис. 8.2 Условия перехода из одного состояния в другое, а, следовательно, изменение поведения системы определяются следующим образом. Начальное положение маятника задается его углом α0. Маятник соприкасается с ограничителем, если он движется против часовой стрелки ( ω >0) и его угол равен α Pin или если он движется по часовой стрелке и его угол меньше, чем -(2 π - α Pin) . Запишем это на языке Ява в условии перехода из состояния Без_ограничения в состояние С_ограничением : α Pin ω L g (x, y) α l 60 alpha >= alphaPin && omega>0 || alpha <= -(2*PI-alphaPin) && omega <0 Условие перехода от движения с ограничением к движению без ограничения запишем аналогичным образом: alpha > 0 && alpha <= alphaPin && omega < 0 || alpha < 0 && alpha >= -(2*PI-alphaPin) && omega > 0 При соприкосновении с ограничителем и изменении длины нити маятника должна сохраняться его линейная скорость, значит, справедливо соотношение: V огр = V не_огр или omega огр *l = omega не_огр *(L+l) или omega огр = omega не_огр *(L+l)/l и omega не_огр =omega огр *l/(L+l), где: V огр и V не_огр – линейная скорость маятника при движении с ограничителем и без ограничителя, соответственно; omega огр и omega не_огр – угловая скорость маятника при движении с ограничителем и без ограничителя, соответственно. Эти соотношения следует записать в соответствующие поля Действие панели свойств пере- ходов стейтчарта, рис. 8.3. Рис. 8.3 Теперь настало время задать различные формулы для переменных х, у и omega в зависимости от состояния системы. Для этого можно использовать метод класса isStateActive( ). Если модель работает по схеме без ограничения, то вызов метода Колебания.isStateActive(Без_ограничения) вернет значение true. Если модель работает по ограниченной схеме, то вызов этого метода вернет значение false. Откройте свойства переменной omega и в поле d(omega)/dt= запишите следующее условное выражение: Колебания.isStateActive(С_ограничением) ? -g*sin(alpha)/l - mu*omega*abs(omega) : -g*sin(alpha)/(L+l) - mu*omega*abs(omega) Если система находится в состоянии С_ограничением , то переменная omega будет логическое И логическое ИЛИ 61 вычисляться по формуле ; ) sin( 2 ω μ α ω ⋅ − ⋅ − = l g dt d иначе по формуле ) sin( 2 ω μ α ω ⋅ − + ⋅ − = l L g dt d По аналогичному принципу запишите уравнения для переменных х и у . Для переменной alpha – уравнение в обоих состояниях остается неизменным. 8.3. ПРЕЗЕНТАЦИЯ Презентацию в этой модели следует построить так же, как и в предыдущей модели простого маятника. Координаты ( Х, Y ) ограничителя, который задается овалом, определены так: Х: L * sin(alphaPin) Y: L * cos(alphaPin) Для отрисовки нити следует использовать два отрезка. Один отрезок анимирует движение нити L, другой отрезок анимирует движение нити l. Координаты начала нити L строятся точно так же как и в предыдущей лабораторной работе. А вот координаты конца нити L (или начала l) строятся иначе, заметьте, что в этих точках нити соединяются и их координаты будут одинаковы – это точка излома. Координаты точки излома зависят от того по какой схеме (ограниченной или не ограниченной) работает модель в текущий момент. Предположим, что модель работает по схеме без ограничителя, т.е. нить не встречает препятствия. Тогда координату точки излома можно найти так: ) sin( : α ⋅ L X , ) cos( : α ⋅ L Y Соответственно, в случае, когда модель работает по схеме с ограничителем, т.е. нить коснулась препятствия и остановилась, координата ее точки излома совпадет с координатой ограничителя: ) sin( : пин L X α ⋅ , ) cos( : пин L Y α ⋅ Остается только определить, по какой схеме модель работает в текущий момент. Для этого следует использовать, уже известный, метод класса isStateActive( ). Для определения координаты Х конца нити L запишите следующее выражение: L*sin(Колебания.isStateActive(Без_ограничения)? alpha: alphaPin) и аналогично для координаты Y. Координаты конца нити l совпадают с координатами центра овала, т.е. они должны быть x и y , но в свойствах линии требуется указать смещение конца по осям X и Y относительно начала линии. Поэтому, в поле dx: динамических свойств линии L нужно указать не координату x , а разницу между x и координатой начала линии по оси X, т.е.: x - L*sin(Колебания.isStateActive(Без_ограничения)? alpha: alphaPin) Аналогично заполняется поле dy: Достройте презентацию модели, как показано на рис. 8.4, и продемонстрируйте построенную модель преподавателю. 62 Рис. 8.4 8.4. КОНТРОЛЬНЫЕ ЗАДАНИЯ 1. Доработайте модель таким образом, чтобы при закручивании нити вокруг ограничителя учитывалось укорачивание нити на определенную длину за 1 оборот (наматывание). Учесть сохранение линейной скорости. (5+) 2. Доработайте модель таким образом, чтобы при изменении длины нити сохранялась линейная скорость маятника, а не угловая, как в базовой модели. (5+) 3. Добавьте в модель второй ограничитель, расположенный на противоположной стороне от первого. При изменении положения первого ограничителя, второй должен перемещаться зеркально. (5+) 4. Доработайте модель таким образом, чтобы в случае, когда растягивающее усилие, действующее на нить, становится отрицательным, цвет нити на презентации становится красным. (5) 5. Доработайте модель таким образом, чтобы она адекватно работала при alphaPin < 0. (5) 6. Доработайте презентацию модели таким образом, чтобы в момент касания ограничителя нитью маятник изменял свой цвет на случайный. (5) 7. Доработайте модель таким образом, чтобы маятник колебался в 2-х средах с различными коэффициентами сопротивления, см. рис. справа. (5) 8. Доработайте модель таким образом, граница раздела сред 63 чтобы учитывалось изменение коэффициента сопротивления в зависимости от высоты, например, по линейному закону. (4) 9. Доработайте модель таким образом, чтобы показывалось время, прошедшее с момента касания нити ограничителя. При следующем касании показания должны сбрасываться и считаться заново. (4) 10. Доработайте модель таким образом, чтобы на презентации показывалась линейная скорость маятника только при касании нити ограничителя. (4) 11. Доработайте модель таким образом, чтобы на презентации показывался график линейного тангенциального ускорения маятника. (4) 12. Доработайте модель таким образом, чтобы показывалось время, прошедшее с момента запуска модели до касания нити ограничителя. (4) 13. Доработайте модель таким образом, чтобы показывалась длительность касания нити ограничителя. (4) 14. Доработайте презентацию модели таким образом, чтобы при движении без ограничителя высвечивалась надпись «Длинная нить», а при движении с ограничителем – «Короткая нить». (3) 15. Добавьте в модель кнопку, при нажатии которой маятник увеличивает скорость на 20%. (3) 16. Измените положение ограничителя на противоположное относительно вертикальной оси. (3) 17. Как в модели реализовано изменение структуры системы? (3) 18. С помощью какого метода можно узнать, в каком состоянии находится стейтчарт? (3-) 64 ЗАДАНИЕ 9 ОПТИМИЗАЦИОННАЯ МОДЕЛЬ ПОЛЕТА ЯДРА ЦЕЛИ ЗАНЯТИЯ • освоение методов решения оптимизационных задач; • самостоятельное построение оптимизационных моделей физических процессов; • построение оптимизационной модели полета пушечного ядра. ФОРМА ОРГАНИЗАЦИИ ЗАНЯТИЯ Фронтальная. СТУДЕНТ ДОЛЖЕН ЗНАТЬ технологию построения оптимизационных моделей, понятия: целевая функция, параметр оптимизации, оптимизационный эксперимент, интерфейс программы AnyLogic. СТУДЕНТ ДОЛЖЕН УМЕТЬ создавать модели в программе AnyLogic. ОБЕСПЕЧЕННОСТЬ компьютер с установленной программой AnyLogic версии 6, настоящий курс лабораторно-практических работ. ПРАКТИЧЕСКОЕ ЗАДАНИЕ В этой работе требуется построить оптимизационную модель полета снаряда. 9.1. СОДЕРЖАТЕЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ Тело (ядро/снаряд) массой 1 кг выстреливается из пушки под углом α к горизонту со скоростью 100 м/с. Требуется найти оптимальный угол α, при котором достигается максимальная дальность стрельбы. 9.2. КОНЦЕПТУАЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ Примем следующие предположения: • объектом исследования является тело массой 1 кг, принимаемое за материальную точку; • движение тела подчиняется второму закону Ньютона; • тело находится под действием двух сил: силы тяжести mg и силы сопротивления воздуха, пропорциональной квадрату скорости движения. 65 9.3. МАТЕМАТИЧЕСКАЯ ПОСТАНОВКА ЗАДАЧИ С математической точки зрения имеем задачу Коши. Модель ядра имеет четыре вещественных переменных: положение его центра х и y в координатах Х и Y , и составляющие скорости Vx и Vy по этим координатам (см. рис. 9.1). Координаты являются интегралами от соответствующих скоростей: Vx dt dx = ; Vy dt dy = Производная от проекций скоростей определена как: 2 Vx K dt dVx ⋅ − = ; 2 Vy K g dt dVy ⋅ − − = , где K – коэффициент сопротивления воздуха, g = 9,81 – ускорение свободного падения. Начальные условия: x = 0, y = 0; Vx = V0 * cos( α ), Vy = V0 * sin( α ). Рис. 9.1 9.4. ОПИСАНИЕ МОДЕЛИ Представим, что наш снаряд вылетает из пушки под очень маленьким углом – почти горизонтально, тогда дальность полета снаряда получится небольшой. Напротив, если выстрелить снарядом под очень большим углом – почти вертикально, то дальность тоже получится небольшой. Очевидно, что существует оптимальный угол, при котором дальность полета будет наибольшей. Необходимо найти этот угол. Для решения задачи построим оптимизационную модель. Оптимизация состоит из нескольких последовательных прогонов модели с различными значениями параметров, что позволяет находить значения параметров модели, соответствующие максимуму или минимуму целевой функции. В нашем случае целевая функция – дальность полета ядра. Параметр оптимизации – угол α . Для решения задачи нахождения наивыгоднейшего угла бросания следует выполнить ряд этапов: V Vx Vy α 66 1. Создать имитационную модель. 2. Создать оптимизационный эксперимент. 3. Задать целевой функционал (функцию, которую нужно минимизировать или максимизировать). 4. Задать оптимизационные параметры (параметры, значения которых будут меняться). 5. Задать условия остановки прогона. 6. Задать условия остановки оптимизации. 7. Запустить оптимизационный эксперимент. 9.4.1. СОЗДАНИЕ ИМИТАЦИОННОЙ МОДЕЛИ Создайте новую модель Polet с чистого листа (не используя шаблоны). Откройте палитру Системная динамика. Перенесите 4 элемента типа Накопитель на диаграмму класса активного объекта и переименуйте их соответственно в Х, Y, Vx и Vy . Теперь в нашей модели есть 4 динамических переменных, описывающих координату и скорость перемещения снаряда, как показано на рис. 9.2. Рис. 9.2 Свяжем объявленные переменные вышеприведенными зависимостями, для этого в панели Свойства введите соответствующие формулы и начальные значения, как это показано на рис.9.3. Обратите внимание на уравнение: d(vy)/dt = -g –K*Vy 2 , при возведении Vy в квадрат член уравнения –K*Vy 2 всегда будет отрицательным, независимо от направления движения снаряда, т.е. будет потеряно направление скорости движения, что приведет к ошибке. Необходимо видоизменить это уравнение так, чтобы знак скорости не потерялся: d(vy)/dt = -g –K*Vy*|Vy|. Аналогично нужно изменить и уравнение для Vx Теперь, когда мы описали движение снаряда, нужно объявить и присвоить значения параметрам g, K, V 0 и α Для этого перенесите из палитры Системная динамика 4 элемента типа Параметр на диаграмму класса активного объекта, переименуйте их в g, k, v0 , a и задайте им значения: 9,81; 0,01; 100; 1 соответственно. Рис. 9.3 Теперь нарисуем траекторию движения снаряда. Для этого перенесите из палитры Статистика элемент типа График на диаграмму класса активного объекта, затем в свойствах графика нажмите на кнопку: Добавить элемент данных. 67 В поле Значение по оси X введите x , а в поле Значение по оси Y – y соответственно, как показано на рис. 9.4. Рис. 9.4 Запустив модель на выполнение, мы увидим траекторию движения снаряда, рис. 9.5. Визуализировав траекторию движения снаряда, мы можем оценить адекватность модели в первом приближении, а для более точной проверки нужно выполнить тестовые примеры. Но сейчас нас интересует оптимальный угол выстрела, а для этого нужно определить дальность полета. Рис. 9.5 68 Введем простую переменную D из палитры Основная, в которую будем записывать дальность полета снаряда, а именно: значение переменной x в момент падения снаряда на землю. Отследить момент падения можно с помощью стейтчарта, который мы сейчас и построим. С помощью палитры Диаграмма состояний постройте стейтчарт, как показано на рис. 13.6. Переход в конечное состояние должен происходить при выполнении условия y < 0 , т.е. когда снаряд коснется земли. При этом должно выполниться действие, при котором переменная D получит значение дальности полета, а именно D = x . Сохраните проект и запустите модель для проверки ее работоспособности. Обратите внимание, что при достижении уровня земли, точнее нулевой высоты полета, наш снаряд продолжает движение. Чтобы этого не происходило нужно остановить прогон модели. Для этого в конечном состоянии в поле Действие впишите следующую функцию finishSimulation() , модель будет останавливаться. Рис. 9.6 Мы создали имитационную модель и задали условие остановки прогона, теперь приступим к созданию оптимизационного эксперимента. 9.4.2. СОЗДАНИЕ ОПТИМИЗАЦИОННОГО ЭКСПЕРИМЕНТА Чтобы создать оптимизационный эксперимент в панели Проекты, щелкните правой кнопкой мыши по элементу модели и выберите Создать|Эксперимент из контекстного меню. Появится диалоговое окно Новый эксперимент. Выберите Оптимизация из списка Тип эксперимента, затем введите имя эксперимента в поле Имя, например Optimum . Остальные параметры оставьте без изменений. Щелкните мышью по кнопке Готово. Мы создали оптимизационный эксперимент, теперь нужно ввести целевой функционал. Так как нам нужно максимизировать дальность полета, то в качестве целевой функции следует выбрать переменную D . Корневой активный объект эксперимента доступен здесь как root , поэтому запишем root.D Задайте условие остановки оптимизации – количество итераций = 500 , это максимальное число итераций, доступное в учебной версии. Если выбрать опцию 0> |