Файл: Модель сегрегации т. Шеллинга практическое задание.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.

Запустите модель, изучите ее поведение и выполните необходимые доработки в соответствии с заданием.