Jump to content

Макропрограммирование

В информатике . макропрограммирование — это парадигма программирования направленный на выражение макроскопического, глобального поведения всей системы агентов или вычислительных устройств. [1] В макропрограммировании локальные программы для отдельных компонентов распределенной системы компилируются или интерпретируются из макропрограммы, обычно выражаемой с точки зрения системного уровня или с точки зрения намеченной глобальной цели. [1] Целью подходов макропрограммирования является поддержка выражения макроскопического интерактивного поведения целой распределенной системы вычислительных устройств или агентов в одной программе или, аналогичным образом, содействие их коллективному разуму . [2] Его не следует путать с макросами — механизмом, часто встречающимся в языках программирования (таких как C или Scala ) для выражения правил замены частей программы.

Макропрограммирование зародилось в контексте беспроводных сенсорных сетей. программирования [3] [4] [5] и обнаружил возобновление интереса к Интернету вещей. [6] и роевая робототехника . [7] [1]

Макропрограммирование имеет схожие цели (связанные с программированием системы в глобальной перспективе) с многоуровневым программированием , хореографическим программированием и агрегатными вычислениями .

и мотивация Контекст

Программировать распределенные системы , мультиагентные системы и коллективы программных агентов (например, рои роботов ) сложно, поскольку необходимо должным образом учитывать многие вопросы (такие как связь, параллелизм и сбои). В частности, общая повторяющаяся проблема заключается в том, как вызвать предполагаемое глобальное поведение, определяя поведение отдельных задействованных компонентов или агентов. Эту проблему можно решить с помощью подходов к обучению, таких как многоагентное обучение с подкреплением , или путем ручного определения программы управления, управляющей каждым компонентом. Однако решение проблемы с полностью индивидуальной (или одноузловой) точки зрения может быть подвержено ошибкам, поскольку, как правило, трудно предвидеть общее поведение, возникающее из сложных сетей действий и взаимодействий (ср. сложные системы и возникновение ). Поэтому исследователи начали исследовать способы повышения уровня абстракции, продвигая программирование распределенных систем с более глобальной точки зрения или с точки зрения общей цели, которую необходимо достичь коллективно.

Примеры [ править ]

СкаФи [ править ]

Следующая программа на совокупном языке программирования ScaFi. [8] [1] определяет логику управления циклом, необходимую для вычисления канала (логическое поле, в котором устройства, выдающие true — это те, которые соединяют по шаговому пути исходное устройство с целевым устройством) через большой набор расположенных устройств, взаимодействующих с соседями.

class SelfContainedChannel extends AggregateProgram with SensorDefinitions {
  def isObstacle = sense[Boolean]("obstacle")
  def isSource = sense[Boolean]("source")
  def isDestination = sense[Boolean]("target")
  
  override def main(): Boolean = 
  branch(isObstacle){ false }{ channel(isSource, isDestination, 5) }

  def channel(src: Boolean, dest: Boolean, width: Double): Boolean =
    dilate(distanceTo(src) + distanceTo(dest) <= distanceBetween(src,dest), width)

  type OB[T] = Builtins.Bounded[T]
  def G[V:OB](src: Boolean, field: V, acc: V=>V, metric: =>Double): V =
    rep( (Double.MaxValue, field) ){ dv =>
      mux(src) { (0.0, field) } {
        minHoodPlus {
          val (d, v) = nbr { (dv._1, dv._2) }
          (d + metric, acc(v))
        } } }._2

  def distanceTo(source: Boolean): Double =
    G[Double](source, 0, _ + nbrRange(), nbrRange())

  def broadcast[V:OB](source: Boolean, field: V): V =
    G[V](source, field, x=>x, nbrRange())

  def distanceBetween(source: Boolean, target: Boolean): Double =
    broadcast(source, gradient(target))

  def dilate(region: Boolean, width: Double): Boolean =
    gradient(region) < width
}

Что интересно отметить, так это то, что channel функция, а также функции, которые используются для ее реализации, а именно distanceTo, distanceBetween, dilate, broadcast и т. д. можно интерпретировать не только с точки зрения индивидуального поведения устройства, но и с макроскопической точки зрения . В действительности, например, distanceTo(s) используется для вычисления поля минимальных расстояний от ближайшего устройства, для которого выражение s урожайность true: по сути, это распределенная структура данных , которая поддерживается за счет обработки и связи с соседями самоорганизующимся способом. Семантически такие функции определяют поведение макроуровня (или коллектива), которое создает структуру данных макроуровня (или коллектива). Такие функции/поведения макроуровня можно скомпоновать вместе, чтобы получить другую, более сложную функцию/поведения макроуровня.

полк [ править ]

Следующая программа на языке полка [4] может использоваться для расчета средней температуры, воспринимаемой всей системой:

% function definition
doSum :: float (float, int) -> (float, int);
doSum(temperature, (sum, count)) { (sum+temperature, count+1) }

% functional reactive program logic
temperatureRegion = rmap(fun(node){ sense("temperature", node) }, world);
sumSignal = rfold(doSum, (0.0, 0), temperatureRegion)
avgSignal = smap(fun((sum,count)){ sum / count }, sumSignal)

BASE <- avgSignal % move such information to the base station

PyoT [ edit ]

Следующая программа в PyoT [9] может использоваться для включения вентилятора, если средняя температура, рассчитанная несколькими датчиками, превышает определенный порог.

temperatures = Resource.objects.filter(title="temp")
results = [temp.GET() for temp in temperatures]
avg = sum(results) / len(results)
TEMP_THRESHOLD = 24
if avg > TEMP_THRESHOLD:
    Resource.objects.get(title="fan").PUT("on")

TinyDB [ править ]

В TinyDB [10] используется подход макропрограммирования, ориентированный на данные, при котором программист пишет запрос, который превращается в одноузловые операции и маршрутизацию в беспроводной сенсорной сети.

SELECT nodeId , temperature WHERE temperature > k FROM sensors SAMPLE PERIOD 5 minutes

См. также [ править ]

Ссылки [ править ]

  1. Перейти обратно: Перейти обратно: а б с Касадеи, Роберто (11 января 2023 г.). «Макропрограммирование: концепции, современное состояние и возможности макроскопического моделирования поведения». Обзоры вычислительной техники ACM . 55 (13с). Ассоциация вычислительной техники (ACM): 1–37. arXiv : 2201.03473 . дои : 10.1145/3579353 . ISSN   0360-0300 . S2CID   245837830 .
  2. ^ Касадеи, Роберто (01 ноября 2023 г.). «Инженерия искусственного коллективного разума: обзор концепций и перспектив». Искусственная жизнь . 29 (4). Массачусетский технологический институт Пресс: 433–467. arXiv : 2304.05147 . дои : 10.1162/artl_a_00408 . ISSN   0360-0300 .
  3. ^ Ньютон, Райан; Уэлш, Мэтт (2004). «Региональные потоки». Материалы 1-го международного семинара по управлению данными для сенсорных сетей совместно с VLDB 2004-DMSN '04 . Нью-Йорк, Нью-Йорк, США: ACM Press. п. 78. дои : 10.1145/1052199.1052213 .
  4. Перейти обратно: Перейти обратно: а б Ньютон, Райан; Моррисетт, Грег; Уэлш, Мэтт (2007). «Система макропрограммирования полка». Материалы 6-й международной конференции «Обработка информации в сенсорных сетях» IPSN '07 . Нью-Йорк, Нью-Йорк, США: ACM Press. п. 489. дои : 10.1145/1236360.1236422 . ISBN  978-1-59593-638-7 .
  5. ^ Гуммади, Рамакришна; Гнавали, Омпракаш; Говиндан, Рамеш (2005). «Макропрограммирование беспроводных сенсорных сетей с использованием Kairos». Распределенные вычисления в сенсорных системах . Берлин, Гейдельберг: Springer Berlin Heidelberg. стр. 126–140. дои : 10.1007/11502593_12 . ISBN  978-3-540-26422-4 . ISSN   0302-9743 .
  6. ^ Джуниор, Ивенс Г.С.; САНТАНА, Талия С. де; Булькао-Нето, Ренато де Ф.; Портер, Барри Ф. (18 ноября 2022 г.). «Состояние макропрограммирования в Интернете вещей: обновление» . Журнал Интернет-услуг и приложений . 13 (1). Бразильское компьютерное общество - SB: 54–65. дои : 10.5753/jisa.2022.2372 . ISSN   1869-0238 . S2CID   254365168 .
  7. ^ Моттола, Лука; Пикко, Джан Пьетро (2011). «Программирование беспроводных сенсорных сетей». Обзоры вычислительной техники ACM . 43 (3). Ассоциация вычислительной техники (ACM): 1–51. дои : 10.1145/1922649.1922656 . hdl : 11311/635123 . ISSN   0360-0300 . S2CID   1837434 .
  8. ^ Касадеи, Роберто; Вироли, Мирко; Агуцци, Джанлука; Пианини, Данило (2022). «ScaFi: Scala DSL и набор инструментов для совокупного программирования». Программное обеспечениеX . 20 . Elsevier BV: 101248. doi : 10.1016/j.softx.2022.101248 . hdl : 11585/903248 . ISSN   2352-7110 .
  9. ^ Аззара, Андреа; Алессандрелли, Даниэле; Боккино, Стефано; Петракка, Маттео; Пагано, Паоло (2014). «PyoT, среда макропрограммирования для Интернета вещей». Материалы 9-го Международного симпозиума IEEE по промышленным встраиваемым системам (SIES 2014) . IEEE. стр. 96–103. дои : 10.1109/sies.2014.6871193 . ISBN  978-1-4799-4023-3 .
  10. ^ Мэдден, Сэмюэл Р.; Франклин, Майкл Дж.; Хеллерштейн, Джозеф М.; Хун, Вэй (2005). «TinyDB: система обработки запросов для сенсорных сетей». Транзакции ACM в системах баз данных . 30 (1). Ассоциация вычислительной техники (ACM): 122–173. дои : 10.1145/1061318.1061322 . ISSN   0362-5915 . S2CID   2239670 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5c99fe0d714e335105326de37404108b__1710986220
URL1:https://arc.ask3.ru/arc/aa/5c/8b/5c99fe0d714e335105326de37404108b.html
Заголовок, (Title) документа по адресу, URL1:
Macroprogramming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)