задание 8. ЗАДАНИЕ 8. Модель сегрегации т. Шеллинга практическое задание
Скачать 187.68 Kb.
|
ЗАДАНИЕ 8 МОДЕЛЬ СЕГРЕГАЦИИ Т.ШЕЛЛИНГА ПРАКТИЧЕСКОЕ ЗАДАНИЕ точки зрения практического применения агентное моделирование можно определить как метод имитационного моделирования, исследующий поведение отдельных агентов и то, как это поведение определяет поведение всей системы в целом. При создании агентной модели, разработчик задает параметры агентов (это могут быть люди, компании, активы, проекты, транспортные средства, города, животные и т.д.), определяет их поведение, помещает их в некую окружающую среду, устанавливает возможные связи, после чего запускает моделирование. Индивидуальное поведение каждого агента образует глобальное поведение моделируемой системы. ОПИСАНИЕ ПРОБЛЕМЫ Модель сегрегации Шеллинга – классическая агентная модель системы, способной к самоорганизации. Две социальные группы, например, две различные расы; мужчины и женщины; курящие и некурящие и т.д. помещаются на шахматную доску, где каждая клетка представляет собой дом, в котором может находиться не больше одного человека. Человек счастлив, если определенный процент его соседей принадлежит к той же социальной группе. Счастливые люди остаются на месте, в то время как несчастливые перемещаются на другие свободные места. Шеллинг установил, что если задать "условия счастья", при которых отдается предпочтение сегрегации, то доска быстро примет вид сегрегированного шаблона расположения. Удивительно , но полная сегрегация установится даже в том случае, если индивидуумы лишь слегка склонны к тому, чтобы иметь соседей одного с ними социального типа. Требуется построить модель сегрегации Шеллинга с возможностью интерактивного изменения "условия счастья" по ходу выполнения модели, изучить ее поведение и выполнить необходимые доработки. МОДЕЛЬ Создайте новую модель Сегрегация на основе шаблона Агентное моделирование. Начальное количество агентов установите 9000. Выберите тип пространства Дискретное, остальные параметры оставьте без изменения. КЛАСС АКТИВНОГО ОБЪЕКТА – PERSON Откройте диаграмму класса Person, вы увидите небольшой квадратик в начале координат. Увеличьте масштаб для упрощения работы и выделите мышью этот квадрат. Во вкладке Дополнительные панели свойств укажите расположение по осям X и Y: 0 и 0, а ширину и высоту: 3 и 3, соответственно. Перейдите на вкладку Динамические и в поле Цвет заливки напишите: color. Теперь, нужно объявить этот параметр color типа Color со значением по умолчанию: randomTrue( 0.5 ) ? Color.blue : Color.green Как Вы помните, это условное выражение присвоит начальное значение параметру color, с вероятностью 50%, либо синий, либо зеленый цвет. Из постановки проблемы видно, что каждый агент может быть «счастлив» и оставаться на месте, или «несчастлив» и стремиться переехать в другое место. Поэтому, в классе Person нужно объявить простую переменную счастье типа boolean. На этом с агентом пока закончим и перейдем к конструированию класса Main. . КЛАСС АКТИВНОГО ОБЪЕКТА – MAIN Откройте диаграмму класса Main, вы увидите вложенный реплицированный объект people, объект environment и вложенную презентацию (небольшой квадрат), рис. 12.1. свойствах вложенного объекта people мы увидим, что он связан со средой environment и, что в его основе лежит класс Person. Количество агентов можно изменить в поле Количество свойствах вложенного объекта environment, на вкладке Основные, следует поставить галочку в поле Выполнять шаги. На вкладке Дополнительные мы увидим, что наше пространство Дискретное2D, ширина, высота, число строк и столбцов – в соответствии с выбранными параметрами шаблона. Тип соседства – Мурово, то есть соседями считаются агенты, располагающиеся в 8 соседних ячейках , в отличие от соседства Евклидово, где соседями считаются агенты, располагающиеся в 4 соседних ячейках. Объявим параметр порог, который будет управлять допустимым процентом соседей, принадлежащих к той же социальной группе, со значением по умолчанию 0,7. Для наглядного представления процесса сегрегации создайте презентацию модели, как показано на рис. 12.2. Размер прямоугольника презентации 500 на 650, цвет – зеленый. Размер прямоугольника рабочего поля 402 на 402, расположение 48 по осям X и Y, цвет – blanchedAlmond . Рис 12.1 Для того, чтобы расположение агентов совпало с рабочим полем, переместите презентацию агента(небольшой квадрат) в позицию 50 по осям X и Y. Для управления параметром порог создайте слайдер в нижней части презентации, установите пределы регулировки от 0 до 1. Для дополнительного удобства добавим кнопки, передвигающие бегунок слайдера на 1% вверх или вниз. В поле Действие: кнопки «–» впишите следующий код: порог = limitMin( 0, порог - 0.01 ); setControlValueToDefault( slider ); для кнопки «+» первая строка должна выглядеть иначе: порог = limitMax( порог + 0.01, 1 ); Здесь метод limitMin возвращает порог - 0.01, если он больше или равен 0, соответственно limitMax возвращает порог + 0.01, если он меньше или равен 1 Метод setControlValueToDefault устанавливает бегунок слайдера в соответствии с измененным параметром порог. нижней части презентации напишите текст: Предпочтение иметь соседей того же самого цвета:, а немного правее введите текст, показывающий значение параметра порог. Для этого во вкладке Динамические в поле Текст: введите: format(порог * 100) + "%" – это позволит избавиться от десятичных значений и добавит знак процентов к числу. Для того чтобы презентация открывалась в окне, совпадающем по размерам с нашей презентацией, откройте свойства эксперимента Simulation и на вкладке Окно измените ширину и высоту на значения 500 и 650, соответственно. На вкладке Презентация выберите режим Виртуальное время – модель будет выполняться с максимальной скоростью. . ФУНКЦИОНИРОВАНИЕ МОДЕЛИ Для того чтобы наша модель работала, нужно написать, что делать агентам на каждом шаге. Откройте свойства класса активного объекта Person и перейдите на вкладку Агент. В поле Действие перед выполнением шага напишите следующий код int рядом = 0; Agent[] соседи = getNeighbors(); // строим массив агентов - соседей if( соседи == null ) { счастье = true; // нет соседей - это тоже хорошо return;} // выход for( Agent a : соседи ) // перебираем весь массив соседей if(((Person)a).color == color)//сравниваем цвет соседа со своим рядом++; // если цвет совпал - суммируем //счастлив, если процент того же цвета больше/равен заданному порогу: счастье = (рядом >= get_Main().порог * соседи.length); В поле Действие на шаге напишите следующий код if(!счастье && randomTrue(0.3))//если не счастлив, то с вероятн. 0,3 jumpToRandomEmptyCell(); // переход на другую свободную клетку Комментарии можно не вводить. СБОР СТАТИСТИКИ Реплицированные объекты поддерживают удобный способ сбора статистики. Поддерживаются следующие типы функций сбора статистики: количество, сумма, среднее, минимальное, максимальное. Откройте свойства реплицированного объекта people и перейдите на вкладку Статистика. Нажмите на кнопку Добавить ф-ю сбора статистики. В появившиеся поля введите: Имя: people_Сч Тип: кол-во Условие: item.счастье Текущий элемент реплицированного объекта (т.е. тот, по которому в текущий момент проходит итерационный цикл функции сбора статистики ) доступен в этих полях как item. В приведенном примере мы будем подсчитывать число «счастливых» людей, т.е. агентов у которых переменная счастье имеет значение true. Заданную функцию сбора статистики можно будет вызывать, как и любую другую функцию: написав ее имя, после которого должны следовать круглые скобки. То есть, чтобы произвести сбор статистики с помощью заданной выше функции, нужно будет написать people_Сч(). Аналогичным образом добавьте функцию сбора статистики people_Не для «несчастных» людей. Рис. 12.2 Для отображения статистических данных можно использовать элементы из палитры Статистика. Перенесите на презентацию элемент Круговая диаграмма. В свойствах на вкладке Основные нажмите на кнопку Добавить элемент данных и в появившиеся поля введите: Заголовок: Несчастливы Значение: people.people_Не() Цвет на Ваше усмотрение Добавьте аналогичным образом еще один элемент данных для «счастливых» людей и перейдите на вкладку Внешний вид. Здесь выберите Расположение легенды справа от диаграммы, а Цвет текста: желтый, рис. 12.2. Запустите модель, изучите ее поведение и выполните необходимые доработки в соответствии с заданием. |