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