Файл: Модель сегрегации т. Шеллинга практическое задание.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 15
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ЗАДАНИЕ 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.
Запустите модель, изучите ее поведение и выполните необходимые доработки в соответствии с заданием.