• Главная
  • Архив новостей
  • Android
  • Google
  • Apple
  • Microsoft
  • Информационная безопасность
  • Веб – разработка

PVSM.RU - Новости информационных технологий
    • Новости
    • Программирование
    • информационная безопасность
    • Это интересно
    • Гаджеты и устройства для гиков
    • Научно-популярное
    • Текучка
    • javascript
    • android
    • diy или сделай сам
    • управление проектами
    • гаджеты
    • Веб-разработка
    • системное администрирование
    • будущее здесь
    • Железо
    • разработка
    • Google
    • космонавтика
    • open source
  • Это интересно

  • Из архивов

    • 2019-10-28 15:58:18
      Приложение на ТСД и связь с 1С: Предприятие 8.3 через HTTP-Сервис
    • 2019-09-20 08:56:00
      AMD может выпустить долгожданную замену для Radeon RX 570 до середины октября
    • 2019-08-20 03:24:00
      Тонкие рамки и огромный экран: опубликовано первое официальное изображение 70-дюймового телевизора Redmi
    • 2019-07-20 04:45:00
      Подробности о складном смартфоне Huawei Mate X: в базовой версии всего 6 ГБ ОЗУ
    • 2019-07-12 06:19:00
      Экшн-камера SiOnyx Aurora Sport оценена в 399 долларов
    • 2019-06-06 04:01:00
      Первое обновление прошивки Redmi K20 добавило функцию, которая изначально должна была быть в смартфонах
    • 2019-04-26 07:06:21
      Когда новые технологии важнее основ: почему «сгибаемый» Samsung Galaxy Fold оказался провалом
    • 2019-04-10 06:00:05
      Почему операторы испугались eSIM
    • 2019-01-08 06:59:00
      Xiaomi представила умную колонку XiaoAi Speaker HD, которая похожа на Amazon Echo и Google Home
    • 2018-11-01 13:22:42
      Открылась самая высокая статуя в мире
  • Обсуждаемое

    • Игорь к записи Гипотеза гидридной Земли
    • Дмитрий к записи HTC может возродить один из старых смартфонов. А какую модель хотели бы реинкарнировать вы?
    • Максим к записи «Никто не говорит другим, что им нужно делать»: Nicolò Ribaudo о разработке Babel и многом другом
    • Руслан к записи Twister: Децентрализованный, P2P аналог Twitter’a
    • Сергей к записи Самодельная гальваническая развязка, в простонародии – грозозащита
    • Егор к записи Как выбрать стиральную машину
    • Алексей к записи Почему кремний и почему КМОП?
    • Stanislav к записи Текстовые редакторы vs IDE
    • Yurij к записи Про интерактивные картинки и MEGAVISOR.com
    • diatryba к записи Система «Умный дом» своими руками

Рекомендуем

  • REG.RU - надежный хостинг!
    Промокод на 5% скидку
    39CC-C72F-6342-560A
Наверх

NetLogo: И взрослым, и детям

NetLogo: И взрослым, и детям 2014-06-16 в 6:49, admin, рубрики: Анализ и проектирование систем, моделирование, робототехника, Учебный процесс в IT, метки: лого, моделирование

NetLogo: И взрослым, и детям

Многие сложные системы удается исследовать только моделированием. Для систем, состоящих из большого количества независимых объектов, такие как поведение толпы, развитие многоклеточных организмов или военные операции, наиболее адекватным оказывается агентное моделирование. Есть много предназначенных для этого систем, например российская проприетарная AnyLogic.
Я же хочу рассказать об языке NetLogo, хорошо зарекомендовавшим себя в образовании, но годный и для взрослых задач.

Синтаксис

Синтаксис Logo минималистичен — разделенная пробелами последовательность имен и констант с редкой группировкой с помощью [] или (). [] служат для создания списков и группировки команд в блок в большинстве конструкций, () — обычные скобки для подвыражений. Имена ссылаются на встроенные или определенные программистом сущности — функции, переменные
Команды (процедуры) объявляются

to имя [список имен аргументов]
  тело
end

Функции в NetLogo называются «репортеры» и объявляются немного по другому:

to-reporter имя [список имен аргументов]
 тело
 report возвращаемая величина
end

Про каждую процедуру или функцию компилятор знает «арность» («валентность») и не требует лишний раз использовать группировку. Правда с функциями высших порядков может ошибаться — тогда ему нужна подсказка в виде круглых скобок.

Пусть у нас определены функции:

to-report inc [x]
 report x + 1
end

to-report add [x y]
  report x + y
end

Тогда можно написать

add add inc 1 inc 2 inc 3

и получить заслуженную девятку.
Правильно работает так же

map inc [1 2 3]

который возвращает список [2 3 4]. А для add уже придется написать скобки

(map add [1 2 3] [4 5 6])

Агенты

Агенты бывают трех видов — черепашки (turtle — как же без них), связи (link) и пятна (patch — они же места в пространстве). Для черепашек и связей можно задать определяемую пользователем породу (breed). Агенты одного типа объединены в набор соответствующий (agentset) — turtles, links и pathes. Представители одной породы так же объединены в набор. Новая порода создается командой

breed [ninjas ninja]

где ninja — название породы, а ninjas — название набора, объединяющего всех агентов этой породы.
Есть так же особый агент — наблюдатель.

Черепашки создаются командой create-turtles (с аргументом — количество создаваемых черепах), и далее находятся по индексу функцией turtle. Агент — «first class value», при желании его можно сохранить в переменной, но требуется это редко.

Агент или набор агентов могут быть контекстом для команды. Выполнение команд в контексте агентов — основной механизм работы с ними.

ask turtles [fd 1]

Этот код попросит всех черепашек сделать шаг вперед.

ask patch 17 13 [set pcolor pink]

А этот покрасит поле с координатами (17,13) в нежно розовый цвет.

Породу можно установить динамически

ask turtle 1 [set bread ninjas]
ask ninja 1 [set pcolor black]

Переменные

В исходном Logo была реализована динамическая область видимости, что создает неудобства и противоречит современным тенденциями в области языков программирования. Разработчики NetLogo поступили сурово — запретили создание одноименных переменных, область видимости которых могут пересечься. Разработчикам библиотек это удобства не прибавляет, но в обучении школьников скорее полезно. Да и социологам и военспецам в разработке моделей позволит делать меньше ошибок :-).
Область видимости статическая, что упрощает использование функций высших порядков.
Переменные могут быть глобальные, собственные для типа агентов или породы, формальными аргументами и локальные в блоке кода. Одно и то же имя переменной не может ссылаться на разные классы переменных, но локальные переменные в разных блоках, в том числе и в одной функции, могут называться одинаково. Имя локальной переменной не может совпадать с именем аргумента функции, где она определена или с именем глобальной или агентной переменной.

Глобальные переменные описываются

global [имя1 имя2 ...]

собственные

turtles-own [имя3 имя4 ...]
ninjas-own [имя5 имя6 ...]

Локальные переменные создаются командой

let имя7 начальное_значение

Функции высших порядков

Некоторые стандартные функции, такие как map, в качестве одного из аргументов получают другую функцию. Им можно просто указать имя передаваемой функции или написать замыкание. Замыкание представляет из себя код, заключенные в []. То, что это замыкание, а не список, компилятор угадывает по контексту. В качестве формальных параметров используются переменные '?', '?1', '?2' и тд.
Использование своих функций высших порядков сложнее. Присвоить переменной или передать другой функции функцию-значение можно с помощью специальной функции task, а вызвать функцию из переменной — с помощью runresult (или run для команд).

to test1 [f]
  show (runresult f 1)
  show (map f [2 3 4])
end

test1 (task [? + 2])

Лично я такой подход с разделением функций и переменных, ссылающихся на функции, считаю не удачным, но он реализован, например, в Common Lisp, и имеет своих сторонников.

Интерфейс и графика

NetLogo: И взрослым, и детям
В программе присутствуют три вкладки (таба): «интерфейс», документация, и редактор кода. В табе «интерфейс» присутствуют поле графических объектов (в том числе и изображение мира), поле текстового вывода и REPL. В REPL можно переключать режимы, задающие в каком контексте выполняются водимые команды — «наблюдатель», «черепахи», «пятна» и «связи». REPL ограниченный — описывать переменные, породы, процедуры и функции в нем нельзя (они создаются вне контекста), придется переходить в редактор кода.

В зоне, где нарисовано поле с миром, можно «мышкой» (нажав правую кнопку на свободном месте) создавать другие графические объекты и элементы интерфейса. При создании им надо задать имена, по которым к ним можно обращаться из программы. Способа порождать графические объекты программно я не нашел. В файле эти объекты сохраняются в текстовом виде после кода, но в малопригодной для ручного редактирования форме.
Например, если мы создадим «график» с именем «plot1», то команда

set-current-plot "Class Histogram"
 histogram map [position ? [red green blue]] ([color] of turtles)

нарисует график распределения черепах по красному, зеленому и синему цветам (предполагая, что другие не встречаются).

Библиотека моделей

К NetLogo прилагается обширная библиотека моделей, от учебных и развлекательных, до исследовательских. Некоторые модели умеют общаться со специализированным железом, таким как GoGo board.
Доступ к модели к модели осуществляется через меню File. Как правило, в интерфейсе моделей есть кнопки Setup и Go и для запуска их надо нажать в этом порядке. Setup инициализирует модель, после чего ее настройки можно изменить через интерфейс.

Автор: potan

Источник


Версия для печати Версия для печати

Рекомендованный контент

Благотворительность напрямую: детям — игрушки, взрослым — права на рисункиБлаготворительность напрямую: детям — игрушки, взрослым — права на рисунки
.NET-разработка: девять вопросов взрослым.NET-разработка: девять вопросов взрослым
Хабраблогеры о хабраблогах или 8 вопросов взрослымХабраблогеры о хабраблогах или 8 вопросов взрослым
Настоящее и будущее Swift: вопросы взрослымНастоящее и будущее Swift: вопросы взрослым
Кроссплатформенная мобильная разработка: вопросы взрослымКроссплатформенная мобильная разработка: вопросы взрослым
Взрослым людям легче дается второй иностранный языкВзрослым людям легче дается второй иностранный язык
Нажмите, чтобы отменить ответ.

* - обязательные к заполнению поля


Новости

  • Официально: Redmi K30 – первый в мире смартфон с 64-мегапиксельным датчиком Sony IMX686
  • Первый коммерческий пуск на «Восточном» пройдёт в 2020 году
  • Стартовали продажи умных часов Xiaomi Mi Watch, которые смогут звонить самостоятельно
  • Глава Razer показал дизайн ноутбука в духе Tesla Cybertruck
  • iPhone 11 уличили в непрерывной слежке за владельцем
  • Анонсирован доступный смартфон Nokia 2.3 с поддержкой ИИ
  • Тайваньские разработчики ищут партнёрства с китайскими производителями чипов
  • Великий порноэксперимент: история Интернета для взрослых

Актуальные темы

android apple c++ e-commerce Facebook Google iOS java javascript linux mail.ru group microsoft PHP python Windows 8 Вконтакте Госвеб Нам пишут Онлайн-медиа Программирование Роскомнадзор Россия СМИ США Текучка аналитика безопасность блокировка законотворчество запуск инвестиции интернет-реклама кадры кейсы медиа мобильные приложения новости онлайн видео советы соцсети статистика суд телеком эффективность бизнеса яндекс

Архив

  • Декабрь 2019 (571)
  • Ноябрь 2019 (3208)
  • Октябрь 2019 (3339)
  • Сентябрь 2019 (2908)
  • Август 2019 (2940)
  • Июль 2019 (3135)
  • Июнь 2019 (2899)
  • Май 2019 (3158)
  • Апрель 2019 (2967)
  • Март 2019 (2935)
Главная   |  Архив новостей  |   Android  |   Google  |   Apple  |   Microsoft  |   Информационная безопасность  |   Веб – разработка
Публикации RSS  |  Комментарии RSS
© 2010-2019 PVSM.RU
Все права на материалы принадлежат их авторам.
Основными материалами сайта являются архивные копии материалов по ИТ тематике Рунета, взятые из открытых и общедоступных источников.