Моделируем журнал (часть 1) Блог стайного советника / 26.06.2016 Помните, я писал про прото-истории и вот тут я бы хотел проследить такую историю с учебной аналитикой. У нас есть ситуации, когда на входе есть данные - и это не очень хорошо для модели - в этом случае модель детерминирована данными на 100%. Еще у нас была модель, где связи возникали между страницами - участники создавали страницы и потом обращались к этим страницам - и тоже мне не очень нравилось. А вот теперь мы попробуем провести исследование совместной деятельности, когда черепахи специально ничего о связях думать не будут. Плюс к этому мы будем думать об учебной аналитике и данных о деятельности. И может быть мы увидим то, что обычно скрыто от глаз. Отдельно скажу про данные - что такое в этой модели большие данные или вообще данные - это такой тотальный мониторинг происходящего. Каждый участник деятельности в этой системе не просто совершает действие, но и сообщает об этой деятельности - записывает это действие в журнал. Черепаха-типа-участник номер 19 создала черепаху-статью номер 25 и сделала это на 30 ходу.1. Создаем модель NetLogo, в которой сначала все будет очень просто.(вот здесь можно поиграть с тем, что получилось в результате - http://www.uic.unn.ru/pustyn/netlogo/colla2_editing.html)Что хотим получить - последовательность записи в журнале. Что происходит в системе? Авторы создают и редактируют статьи. Примеры таких журналов можно посмотреть и в википедии Ниже в хронологическом порядке перечислены последние изменения на страницах Википедиии в ЛетописиНиже в хронологическом порядке перечислены последние изменения на страницах Летописи.руДа, практически везде, где есть совместная деятельность, можно найти такой журнал с записями о том, кто и что сделал.Что есть в системе: Авторы Статьи И мы создадим специальные породы черепах - авторы и статьи: breed [users user] ; breed [pages page] ; Интерфейс будет содержать всего несколько кнопок: Рычажок u - чтобы регулировать число авторов в системе - от 1 до 50 Кнопка Startup - команда очистить экран и создать авторов. Кнопка Go - команда авторам создание и редактирование Кнопка Записать историю - история действий преобразуется в записи журнала. Здесь мы создаем исполнителей и еще создаем пустой журнал - список с именем wikihistoryto startup clear-all ; reset-timer set-default-shape users "person" ; set-default-shape pages "square" ; set wikihistory [] ; create-pages 1 create-users u ask users [rt random 360] endПояснения к кнопке Goэто обращение ко всем черепахам типа Автор с указанием - что делать. А делать предписывается следующее: Если прямо перед тобой стоит другой участник и что-то делает, то не пытайся встать на место другого участника, а повернись направо на случайное число и больше ничего не делай.Если поле свободно от авторов, то перейди на новое поле и проверь, есть ли на этом поле статья. Если статья есть, то отредактируй эту статью (покрась ее в свой цвет) и запиши в журнале, что ты (имя Автора) отредактировал статью (название статьи), окрасил эту статью в свой цвет (собственный цвет) и произошло это в определенное время (показание таймера). Если статьи еще нет, то создай эту статью и оставь об этом запись в журнале. Правила поведения для участников обязательно будем менять - с этими правилами будем экспериментировать и придумывать для них в модели рычажки, изменяя положения которых будем менять параметры модели. Но, пока и на это стоит обратить внимание - запись в журнал. Мы постоянно требуем от участника, чтобы он не только действия совершал, но и записывал эти действия в журнал. Да, еще интересный момент, который важен для понимания того, как все устроено в среде NetLogo, - если автор создает страницу (команда hatch), то он делегирует этой странице функцию записи в журнал. Создай страницу и скажи этой странице записать в журнал, что ты её создал. Выглядит несколько необычно, но в NetLogo это нормальный способ обращения к акторам - нам тут безразлично, что автор, что статья.to go ask users [build]endto build if any? users-on patch-ahead 1 [rt random 360 stop] ;; если передо мной стоит другой участник, то я остановлюсь fd 1 ifelse any? pages-on patch-here [ let P1 one-of pages-on patch-here ask P1 [set color [color] of myself] set wikihistory lput (se [who] of self [who] of P1 "edit" [color] of self timer) wikihistory ] [hatch-pages 1 [ set size 0.5 set wikihistory lput (se [who] of myself [who] of self "create" [color] of self timer) wikihistory ] ]endПояснения к кнопке Записать ИсториюЗдесь мы просто переводим короткие записи [12 13 "create" 45 2.56] в более подробные и понятные. [12 13 "create" 45 2.56] = [В 2.56 Автор 12 создал статью 13. Теперь у статьи оттенок 45.]Т.е. мы тут из прото-рассказа делаем более понятным для восприятия текстto table_output3 file-open user-new-file foreach wikihistory [ let action item 2 ? let act 0 ifelse action = "create" [set act "создал статью"] [set act "отредактировал статью"] show act file-print ( se "В" last ? "Автор" item 0 ? act word item 1 ? "." "Теперь у статьи оттенок" word item 3 ? "." ) ] file-close;endТут я приведу 12 строк из 86 - просто, чтобы показать, что у нас встречается и создание и редактирование В 2.56 Автор 12 создал статью 13. Теперь у статьи оттенок 45. В 2.585 Автор 1 создал статью 14. Теперь у статьи оттенок 65. В 2.605 Автор 4 создал статью 15. Теперь у статьи оттенок 115. В 2.629 Автор 11 создал статью 16. Теперь у статьи оттенок 85. В 2.653 Автор 3 создал статью 17. Теперь у статьи оттенок 45. В 2.685 Автор 1 создал статью 18. Теперь у статьи оттенок 65. В 2.701 Автор 2 создал статью 19. Теперь у статьи оттенок 105. В 2.717 Автор 3 создал статью 20. Теперь у статьи оттенок 45. В 2.733 Автор 12 создал статью 21. Теперь у статьи оттенок 45. В 2.749 Автор 7 создал статью 22. Теперь у статьи оттенок 25. В 2.765 Автор 11 создал статью 23. Теперь у статьи оттенок 85. В 2.785 Автор 9 отредактировал статью 17. Теперь у статьи оттенок 75. В 2.805 Автор 5 отредактировал статью 13. Теперь у статьи оттенок 25. Итак, что у нас пока есть:1. Модель работает. Участники создают и редактируют статьи и оставляют об этом записи в журнале.2. А что мы еще можем узнать из журнала?Мы можем на основании данных журнала построить двумодальный граф редактирований.Пояснение к кнопке Двудольный графto viz_bigraph foreach wikihistory [ let action item 2 ? let act 0 ifelse action = "create" [ask user item 0 ? [create-bond-to page item 1 ?]] [ask user item 0 ? [create-editbond-to page item 1 ?] ] ] repeat 50 [layout-spring turtles links 0.1 1 0.3 ]end И можем на основании данных журнала построить социограмму связей участниковПояснение к кнопке Однодольный графto viz_one_mode foreach edits [ let friend1 item 0 ? let p1 item 1 ? let friend2 first first filter [(p1 = item 1 ?) and ("create" = item 2 ?)] wikihistory if friend1 != friend2 [ ask user friend1 [ create-friendbond-to user friend2 ] ] ] ask pages [ht] repeat 50 [layout-spring users links 0.1 1 0.3 ] endto-report editsreport filter ["edit" = item 2 ?] wikihistoryendТеперь у нас есть простая рабочая модель для изучения того, что влияет на образование связей между участниками.3. Очень мало редактирований по сравнению с созданием новых статей. Как можно изменить условия деятельности, чтобы совместных редактирований стало больше? Это, на самом деле, вопрос дизайна - как обустроить среду так, чтобы увеличить число взаимодействий? Предложения принимаются в любой форме. NetLogo Модель история прото-история