Имитационное моделирование процесса распространения инфекций

on

( ) = + ( ) ? ? > ? ?1 ?1 : ( ) ( ) 1 ( ) ( { } ?? ? ??+ ) t 1 , k = 1,p, i nk = 1, . По второму правилу системы необходимо исключить объект из множества объектов типа k, если отведенный ему максимальный срок жизни уже истек. Максимальный срок жизни объектов типа k может изменяться на заданное количество итераций hi, определяющее максимальную продолжительность жизни после изменения типа в результате взаимодействия объектов разных типов: c C k k am a h a h am am i k k t t k t i k t i i k t i k i k i i { ? ? }? ? = + + + + | ( ) ( ) , ( ) , ( 1 1 a h am i k t i k Правила взаимодействия агентов позволяют производить моделирование «снизу вверх», т. е. исследовать динамику сложной системы, оказывая влияние на составляющие ее объекты. Программный комплекс для реализации модели Для реализации программного комплекса были применены методы объектно-ориентированного программирования . Программный комплекс создан в среде Lazarus. Требования к операционной системе: Linux, Microsoft Windows, Mac OS X, FreeBSD, OS/2. Необходимо отметить, что для моделирования большого количества объектов требуется платформа x64. Для хранения объектов использовался класс People (см. листинг 1). При создании объекта определяются его характеристики: тип, возраст, максимальная продолжительность жизни, пол, количество контактов и вероятность инфицирования. Функция kinf позволяет определить количество объектов заданного типа. Процедуры newinf и newdead используются в случае инфицирования и смерти агента соответственно. Для проведения вычислительных экспериментов над выбранным исходным множеством агентов, чтобы каждый раз не вводить параметры объектов, предусмотрены процедуры экспорта и импорта (см. листинг 2). Также для быстрого анализа множества, экспортированного в файл, доступна специальная процедура (см. листиг 3). Визуально рабочая область программы разделена на две зоны, каждая из которых служит для представления различной информации. На рисунке 1 (см. стр. 86) показан общий вид программного комплек- People = class private sex: boolean; age: byte; Mage: byte; typeobject: byte; contact: array of integer; pinf: array of byte; dead: boolean; public Constructor create(qtype, qage, qmaxage: Integer; qsex, qdead: boolean; qcontact: Tpfc; qpinf: Tpfp); function kinf(qtype: byte):Integer; procedure newinf(); procedure newdead(); procedure counter(x : longint); end; Constructor People.create(qtype, qage, qmaxage: Integer; qsex, qdead: boolean; qcontact: Tpfc; qpinf: Tpfp); begin typeobject := qtype; age := qage; Mage := qmaxage; sex := qsex; dead := qdead; contact := qcontact; pinf := qpinf; end; Листинг 1. Описание класса People procedure TMainForm.Export1Click(Sender: TObject); var expf: TextFile; typeobject, ageobject, sexobject, kolinf: Integer; begin try if not(datamodule1.SaveDialog1.Execute) then Abort; AssignFile(expf,datamodule1.SaveDialog1.FileName); Rewrite(expf); Writeln(expf,index); Writeln(expf,kt); Writeln(expf,kpp); for i:=1 to index do begin Writeln(expf,allagent.typeobject); Writeln(expf,allagent.age); Writeln(expf,allagent.Mage); Writeln(expf,integer(allagent.sex)); Writeln(expf,integer(allagent.dead)); for j:=1 to high(allagent.contact) do Writeln(expf,allagent); for j:=1 to high(allagent.pinf) do Writeln(expf,allagent); end; closefile(expf); messagebox(0, RusText( Экспорт данных завершен ), RusText( Экспорт ), MB_OK); except messagebox(0, RusText( Экспорт данных невозможен. Возможно, отстуствуют права на запись в файл или нет данных для экспорта ), RusText( Ошибка экспорта данных ), MB_ OK+MB_ICONERROR); end; end; procedure TMainForm.Import1Click(Sender: TObject); var impf: textfile; countobject: LongInt; typeobject,ageobject,maxageobject,sexobject,deadobject: Integer; begin try Листинг 2. Процедуры экспорта и импорта параметров объектов try if not(datamodule1.OpenDialog1.Execute) then Abort; AssignFile(impf,datamodule1.OpenDialog1.FileName); Reset(impf); Readln(impf,countobject); Readln(impf,kt); Readln(impf,kpp); index := 0; SetLength(allagent,countobject+1); for i:=1 to countobject do begin inc(index); Readln(impf,typeobject); Readln(impf,ageobject); Readln(impf,maxageobject); Readln(impf,sexobject); Readln(impf,deadobject); for j:=1 to high(kv) do Readln(impf,kv); for j:=1 to high(vz) do Readln(impf,vz); agent := People.create(typeobject, ageobject, maxageobject, bool(sexobject), bool(deadobject), kv, vz); allagent := agent; end; Edit7.Text:= inttostr(kt); Edit2.Text:= inttostr(kpp); button7.click; button2.click; closefile(impf); messagebox(0, RusText( Импорт данных завершен. Импортировано объектов: +IntToStr(countobject)), RusText( Импорт ), MB_OK); except messagebox(0, RusText( Импорт данных невозможен. Проверьте формат импортируемого файла ), RusText( Ошибка импорта данных ), MB_OK+MB_ICONERROR); end; end; Продолжение листинга 2 procedure TMainForm.MenuItem3Click(Sender: TObject); var impf: textfile; tempmas: array of byte; countobject: LongInt; typeobject, ageobject, maxageobject, sexobject, deadobject, ksexM, ksexW, kdead: Integer; msg: string; begin try if not(datamodule1.OpenDialog1.Execute) then Abort; AssignFile(impf,datamodule1.OpenDialog1.FileName); Reset(impf); ksexM:=0; ksexW:=0; kdead:=0; for i:=1 to 10 do tempmas := 0; Readln(impf,countobject); Readln(impf,kt); Readln(impf,kpp); index := 0; SetLength(allagent,countobject+1); for i:=1 to countobject do begin inc(index); Readln(impf,typeobject); Readln(impf,ageobject); Readln(impf,maxageobject); Readln(impf,sexobject); Readln(impf,deadobject); for j:=1 to high(kv) do Readln(impf,kv); for j:=1 to high(vz) do Листинг 3. Процедура анализа экспортированного множества Продолжение листинга 3 Readln(impf,vz); if bool(sexobject) then inc(ksexM) else inc(ksexW); if bool(deadobject) then inc(kdead); inc(tempmas); end; msg := ; for i:=1 to kt do msg := msg+#10#13+ Количество объектов типа TYPE + inttostr(i) + : + inttostr(tempmas); closefile(impf); messagebox(0, RusText( Анализ данных завершен. Всего объектов: +IntToStr(countobject) + #10#13 + Мужчин: +IntToStr(ksexM) + #10#13 + Женщин: + IntToStr(ksexW) + msg + #10#13 + Погибших: + IntToStr(kdead)), RusText( Анализ данных ), MB_OK); except messagebox(0, RusText( Анализ данных невозможен. Проверьте формат файла данных ), RusText( Ошибка анализа данных ), MB_OK+MB_ICONERROR); end; end; са. Левая панель предназначена для задания количества типов объектов, путей передачи, а также изменения каталога хранения данных. Он содержит промежуточные и конечные результаты процесса моделирования, которые затем можно анализировать, используя функцию анализа данных. Здесь же задается количество моделируемых итераций. Самая верхняя строка левой панели отображает общее количество заданных объектов. Для отображения актуального количества объектов необходимо кликнуть левой кнопкой мыши по надписи «Обновить данные». После ввода количества типов объектов и путей передачи инфекции становится активной правая панель. Она разделена на 4 вкладки: «Объекты», «Общие параметры», «Взаимодействия» и «Анализ данных». Вкладка «Объекты» позволяет добавлять в систему новых агентов, указывать индивидуальные свойства и предварительно просматривать их. Здесь задаются следующие свойства: тип объекта (из выпадающего списка), возраст, продолжительность жизни, пол, количество взаимодействий и вероятность инфицирования по каждому пути передачи, а также продолжительность жизни после инфицирования. Вкладка «Общие параметры» содержит две области (рис. 2). В левой части задаются общие параметры инфекции: количество взаимодействий, вероятность инфицирования и продолжительность жизни инфицированного агента, которые применяются к тем объектам, в чьих индивидуальных свойствах они отсутствуют. Правая часть позволяет определить процессы иммиграции и эмиграции населения. На любой итерации есть возможность задать количество эмигрантов и иммигрантов. Необходимо отметить, что моделируется только процесс распространения инфекции, общая динамика населения должна задаваться согласно статистическим данным. Для определения процесса миграции на соответствующей итерации следует выбрать направление движения агентов: уд ление из системы (эмигранты) или добавление в нее новых агентов (иммигранты), а затем задать параметры объектов и их количество. С помощью вкладки «Взаимодействия» определяют, какие из существующих взаимодействий в системе приводят к изменению типа объекта. В левой части выбираются типы взаимодействующих объектов, а в правой — результат их взаимодействия (рис. 3). Как отмечалось ранее, взаимодействие возможно одновременно только между двумя объектами системы, однако, агент за одну итерацию совершает несколько таких взаимодействий, в результате чего может изменить состояние нескольких других агентов. Вкладка «Анализ данных» предназначена для исследования процесса распространения инфекции и позволяет определить количество агентов с заданным набором параметров (рис. 4). В левой панели нужно выбрать параметры объектов: пол, возраст и тип. Необходимо отметить, что возможен анализ множества объектов, которое непосредственно определено в программе, и множества, записанного в файл. Для этого в правой панели выбирают соответствующий переключатель и в случае, если выбран анализ файла данных, указывается полный путь к файлу. Кроме файлов, представляющих собой промежуточные результаты моделирования, существует возможность выгрузки текущего множества агентов, например, для проведения над ним нескольких вычислительных экспериментов. С этой целью используется пункт Export меню File. В результате появится диалоговое окно, в котором необходимо указать каталог хранения файла и его имя, а затем кликнуть мышью по кнопке «Сохранить». Также возможно импортирование заданного множества из файла с использованием пункта Import меню File, для чего нужно выбрать файл данных и кликнуть мышью по кнопке Открыть. У программного комплекса свой внутренний формат. dat для хранения данных, содержащий общее количество определенных объектов, количество типов, а также путей передачи инфекции и информации о каждом отдельном объекте (тип, возраст, максимальная продолжительность жизни и т. д.). В случае необходимости возможно создание такого файла с помощью иных средств при соблюдении строгой последовательности записи данных в файл. При попытке импорта файла иного формата возникает сообщение об ошибке импортирования данных. Меню File содержит также пункт Analysis, который позволяет провести быстрый анализ множества, экспортированного в файл, согласно описанной выше процедуре. Заключение Разработанный программный комплекс, предназначенный для анализа и проведения вычислительных экспериментов по мультиагентной модели распространения инфекции, позволяет задавать индивидуальные свойства и параметры объектов. Многие приемы, используемые при применении мультиагентного подхода, в настоящее время проработаны в недостаточной степени. В частности, не решены задачи параметрической идентификации указанных моделей, нахождения необходимого числа агентов, обеспечивающих репрезентативность вычислительных экспериментов, проверки мультиагентных моделей на адекватность. По этой причине разработка новых математических моделей, алгоритмов и программ, предназначенных для применения мультиагентного подхода при анализе различных систем, представляет собой актуальную научную задачу. Разработанный автором программный комплекс обладает кросс-платформенностью и имеет дружественный интерфейс, что обеспечивает хорошую переносимость и позволяет использовать его для анализа процессов распространения инфекций специалистами в области эпидемиологии. При этом пользователи необязательно должны являться специалистами в области математического моделирования, что существенно расширяет практическую востребованность разработанного программного средства. , , Кучер Т. 1. В. Free Pascal и Lazarus. Учебник по программированию. М.: ALT Linux; Издательский дом «ДМК-пресс», 2010. , Имитационное моделирование развития инфекции с использованием агентного подхода // Вестник Тамбовского университета. Серия: Естественные и технические науки. 2010. Т. 15. № 2. , Имитационное моделирование. СПб.: Питер, 2004. , , , Компьютерная имитация экономических процессов / Под. ред. . М.: Маркет ДС, 2010. Имитационное моделирование систем. Введение в моделирование с AnyLogic 5. СПб.: БХВ-Петербург, 2005. D Inverno M., Luck M. Understanding Agent System. New York: Springer-Verlag, 2001. Weiss G. Multiagent Systems: A Modern Approach to Distributed Artificial Intelligence. Cambridge: MIT Press, 1999.