Первую статью «Изменение софтверного бизнеса: переход от продуктов к услугам» (The Changing Software Business: Moving from Products to Services) написал Майкл Кузумано. Разительные изменения, происшедшие в бизнесе, связанном с разработкой программного обеспечения, оказывают серьезное влияние на пользователей и производителей программных продуктов и сервисов. Падают продажи, дешевеют лицензии, а значительную часть дохода приносят услуги по предоставлению обновлений, технической поддержке и т.п. В статье приводится анализ состояния бизнеса разных софтверных компаний, и предлагаются некоторые характеристики бизнес-моделей, которые складываются в этой новой ситуации.

Автор следующей статьи— известный многим Дэвид Харел. Статья называется «Можно ли освободить программирование, пауза?» (Can Programming Be Liberated, Period?). Девять лет назад автор решил написать о своей мечте, исполнение которой позволило бы программистам вести разработку, начиная от «проигрывания» инкрементальных сценариев поведения программной системы и заканчивая работающим программным кодом. Некоторые части той статьи, представляющие наибольшие технические затруднения, были представлены без достаточного обоснования осуществимости предлагаемых подходов, а потому автор назвал свою идею «мечтой». Со времени первой публикации статьи в январе 2001 (см. www.osp.ru/os/2001/02/179956 ) эта мечта не только не исчезла, но с каждым годом продолжает все больше изводить автора, вызревая и уточняясь. Была выполнена большая работа, результаты которой пока еще далеки от того, чтобы превратить мечту в план работ, но, тем не менее, обеспечивают некоторое предварительное обоснование ее реализуемости. Автор решил еще раз изложить свою мечту заново, предложив ее более яркий и расширенный вариант.

Как отмечает Харел, не считая материала, размещенного во вкладке (обоснование осуществимости подхода к программированию на основе сценариев), к статье можно относиться как к сбивчивым рассуждениям восторженной и ошеломленной личности. Заголовок же статьи, чтобы привлечь читателя, обращается к названию Тьюринговской лекции и статьи Джона Бэкуса (John Backus, Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs, www.stanford.edu/class/cs242/readings/backus.pdf ).

По мнению Харела, мы прошли долгий путь с того времени, когда программирование заключалось в утомительном и скучном перечислении команд машинного уровня, предписывающих правила изменения и перемещения бит и слов в памяти конкретного компьютера. Историю программирования можно охарактеризовать как восхождение по ступеням лестницы создания компьютерных языков: от машинных к ассемблеру, затем к императивным языкам программирования, а от них к разнообразным стилям программирования— функциональному, логическому, параллельному, визуальному, синхронному, объектно-ориентированному, аспектно-ориентированному и т.д. Однако в некотором смысле программирование все еще остается тем же самым технически утомительным делом. По-прежнему приходится писать программы, обычно используя символы, ключевые слова и операционные инструкции, чтобы указать компьютеру, что ему делать. От программиста по-прежнему требуется тестирование и отладка (а лучше— верификация) программ. Необходимо тщательно специфицировать, какие именно результаты требуется получить, и эти спецификации зачастую не менее сложны и чреваты ошибками, чем сами программы.

Ко всему этому сегодня добавилась сложность, происходящая из возрастающего числа приложений, несколько частей которых выполняется параллельно и часто в распределенном режиме (Internet-приложения и Web-сервисы). Проблема в том, что каждую часть приходится программировать по отдельности, а затем убеждаться в том, что совместное поведение частей системы, их оркестровка приводят к требуемым результатам. Харел утверждает, что даже современным подходам свойственны ограничения, которые он называет «оковами» программирования: (i) необходимость записывать программу в виде символьного, текстуального или графического артефакта; (ii) необходимость специфицировать требования («что») отдельно от программы («как») и противопоставлять их друг другу; (iii) необходимость структурировать поведение в соответствии со структурой системы, обеспечивая поведение каждой части или каждого объекта системы.

Можно ли освободить программирование от этих ограничений? В чем состоит альтернатива? Как можно программировать компьютер, не говоря ему точно, что он должен делать, без потребности в использовании материальной среды для представления этого предписания? Как можно убедиться в том, что будут получены желаемые результаты, если каким-то образом не сформулировать требования и способ их удовлетворения и не сравнить эти формулировки? И как можно программировать множество вещей, не обеспечивая каждую из них отдельными инструкциями? Так, по отношению к ограничению (i) для некоторых прикладных областей разработаны новые методы для сокращения объема трудозатрат при написании программ, соответствующих некоторому классу требований. Примерами таких методов являются Query-By-Example для реляционных баз данных (http://old.osp.ru/dbms/1996/03/149.htm ), а также электронные таблицы.

Что касается ограничения (ii), то логические и функциональные языки, а также многие работы в области, обобщенно называемой автоматическим программированием, в частности, чрезвычайно амбициозная идея «интенционального программирования» (research.microsoft.com/research/pubs/view.aspx?tr_id=4), направлены на то, чтобы позволить программисту формулировать то, чего он хочет, оставляя многое из того, как это сделать, на транслятор. Аналогичная цель преследуется в языках, основанных на ограничениях, и специализированных генераторах приложений.

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

Мечта Харела амбициознее: почему бы не натянуть над всем этим общую оболочку и не попытаться изменить сам облик программирования? Причем эти изменения должны происходить не только за счет нового поколения языков программирования или новой методологии, но и за счет применения совсем иного подхода к программированию. Мечта состоит в освобождении программистов от «оков» и предоставлении им возможности работать в условиях большей свободы, превращении программирования в интуитивный, естественный и приносящий удовольствие процесс. Автор призывает к тому, чтобы использовать всю огромную мощь компьютеров для реализации этой идеи, для совершения более глубокого перехода, чем тот, который связан с компиляцией, перехода, основанного на использовании естественных и почти игровых средств программирования, для получения полностью функциональных и исполняемых машиной программ.

Статью «Оценка архитектур, основанных на интегрированных цифровых клеточных автоматах» (An Assessment of Integrated Digital Cellular Automata Architectures) представили Виктор Жирнов, Ральф Кэвин, Грег Лиминг и Космас Галацис. Появление двухъядерных процессоров, возможно, означает начало широкомасштабного перехода к параллельной обработке. Как будет развиваться параллельная обработка, и какой будет доминирующая компьютерная архитектура в будущем? По мере того, как технология достигает пределов КМОП и превосходит их, ответы на эти вопросы могут определяться физическими реалиями компьютерного оборудования.

Уровень интеграции наномасштабных электронных устройств может, в конечном счете, достичь показателей в 1010— 1011 устройств на квадратный сантиметр. На этом уровне длинные внутренние шины представляют значительную проблему для функционирования (потребление энергии), проектирования и производства (нерегулярные массивы внутренних шин с произвольными соединениями). Кроме того, наномасштабным элементам, вероятно, будет свойственна более высокая интенсивность отказов. Требования же к низкому энергопотреблению и малым размерам транзисторов, видимо, приведут к более высокой интенсивности тепловых и квантовых ошибок. Более того, проблема проектирования сложных нерегулярных структур на этих уровнях плотности становится все менее и менее разрешимой.

При наличии этих реалий будущие наномасштабные технологии могут привести к использованию совсем других подходов к обработке информации. Один из возможных подходов может опираться на цифровые клеточные автоматы. Возможный переход к новым компьютерным архитектурам предсказывался и ранее. Так, в 1993 году Джанфранко Биларди и Франко Препарата утверждали (ftp.cs.brown.edu/pub/techreports/93/cs93-20.ps.gz ), что при достижении технологиями физических пределов масштабирования, задаваемых скоростью света, предельно малых размеров устройств, предельных значений коэффициентов разветвления по входу и выходу практические компьютерные архитектуры придется основывать на регулярных массивах локально соединенных вычислительных элементов.

Архитектуры, основанные на клеточных автоматах, являются возможной альтернативой фон-неймановских архитектур (в действительности фон-Нейман предложил оба эти подхода в начале 50-х).

Как показано на рис. а, традиционная фон-неймановская, или последовательная, архитектура характерна для компьютера, состоящего из процессора (PU) и запоминающего устройства (M). В памяти хранятся и команды, и данные, и последовательность логических операций основывается на флагах и шинах управления. На основе такой системы локальной памяти и логических устройств можно реализовать компьютер общего назначения. С другой стороны, клеточный автомат (рис. б) состоит из одинаковых ячеек с одной и той же структурой соединений с соседними ячейками. Каждую ячейку отличает от ее соседей только состояние. Анализируя возможность применения клеточных автоматов в качестве архитектурной основы для компьютеров общего назначения авторы стремились найти ответы на ряд вопросов:

  • Какова должна быть минимальная внутренняя сложность ячеек клеточного автомата, чтобы поддерживать вычисления общего назначения?
  • Сколько должно содержаться ячеек в архитектурах, основанных на цифровых клеточных автоматах, чтобы они были бы настолько же эффективны при вычислениях общего назначения, как и фон-неймановские архитектуры?
  • Уменьшается ли сложность внутренних взаимосвязей в архитектуре, основанной на клеточных автоматах?
  • Существуют ли реальные методы обеспечения устойчивости к жестким и мягким ошибкам в клеточных автоматах?
  • Обеспечивают ли архитектуры, основанные на клеточных автоматах, преимущества по отношению к потребляемой мощности, надежности, проектированию и производству?

Архитектура фон Неймана 

В частности, авторы установили, что для построения клеточного автомата с изменяемыми правилами формирования состояния ячеек потребуются ячейки, содержащие по 2300 элементов, что составляет малую часть от числа ячеек такого микропроцессора, как Intel 4004. Не удалось установить, сколько потребуется ячеек в архитектуре, основанной на клеточном автомате, чтобы она была столько же вычислительно эффективна, что и фон-неймановские архитектуры общего назначения.

Deep Green играет пока на любительском уровне, но цель — состязаться с  чемпионами по пулуАвторами статьи «На пути к роботу, играющему в бильярд» (Toward a Competitive Pool-Playing Robot) являются Майкл Гринспан, Джозеф Лэм, Марк Годард, Имран Заиди, Сэм Джордан, Уилл Лекай, Кен Андерсон и Донна Дюпуа. Разрабатываемая авторами основанная на машинном зрении интеллектуальная робототехническая система для игры в пул, называемая Deep Green, играет пока на уровне выше любительского, но целью является развитие ее до чемпионского уровня.

Статью «Использование цифровой эволюции» (Harnessing Digital Evolution) написали Филип Маккинли, Бетти Ченг, Чарльз Офриа, Дэвид Ноустер, Бенджамин Бекман и Хизер Голдсбай. Около 150 лет тому назад Чарльз Дарвин объяснил, как эволюция и естественный отбор преобразовали примитивные формы жизни в сегодняшнее разнообразие жизненных форм. По оценкам ученых, этот процесс длится на Земле по меньшей мере 3,5 млрд лет. Но сейчас наблюдается период расцвета эволюции другого мира, мира компьютеров, что помогает решать сложные технические проблемы и обеспечивает понимание процесса эволюции в природе. Авторы исследуют проблему применимости компьютерных методов эволюции для построения более качественного программных систем. Они должны адаптироваться к своей среде, восстанавливаться после сбоев, оптимизировать свою производительность и защищаться от атак злоумышленников.

У живых организмов имеется поразительная возможность приспосабливаться к изменениям окружающей среды— как к краткосрочным, за счет фенотипической пластичности, так и к длительным, путем эволюции. Сложность ни одной киберсистемы не превосходит сложности биосферы, а жизнь на Земле эволюционирует не только для того, чтобы справляться с этой сложностью, но и чтобы процветать на ее основе.

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

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

В описываемом исследовании используется платформа цифровой эволюции Avida (devolab.cse.msu.edu). Каждый цифровой организм состоит из циклического списка команд (генома) и виртуального центрального процессора. В Avida имеется несколько ячеек, в каждой из которых содержится не более одного организма, называемого «авидианом» (Avidian). Когда авидиан размножается, система помещает отпрыска в случайным образом выбираемую ячейку, прекращая существование любого ее предыдущего обитателя. Организмы могут посылать друг другу сообщения, производить и потреблять ресурсы, а также воспринимать и изменять свойства своей окружающей среды. На основе этих взаимодействий организм может приобретать или утрачивать циклы виртуального центрального процессора, что влияет на его скорость выполнения команд.

Архитектура виртуального центрального процессора, используемого в большинстве исследований, является простой: три регистра общего назначения, два стека общего назначения и четыре специализированных головки. Эти головки служат указателями на геном организма и напоминают традиционный счетчик команд или указатель стека. Набор команд этого виртуального центрального процессора полон по Тьюрингу, и, следовательно, на нем можно реализовать любую вычислительную функцию. Доступные команды позволяют выполнять основные вычислительные действия (сложение, умножение, сдвиги), управлять потоком выполнения, производить коммуникации и размножаться. Хотя набор команд напоминает традиционный язык ассемблера, он разработан таким образом, что случайная мутация (вставка, удаление или изменения инструкций) всегда приводит к образованию синтаксически корректной программы.

Авидианы получают поощрительные циклы виртуального центрального процессора для выполнения определяемых пользователями задач, которые обычно определяются в терминах наблюдаемого извне поведения организмов— их фенотипа. Например, от организма можно потребовать выполнения конкретной математической или логической операции с выводом результата или коммуникацией с соседними организмами, полезной для распределенного решения проблемы. Задачи оказывают на популяцию давление отбора, причем поддерживаются геномы, мутации которых производят последовательности команд, позволяющие добиться решения задачи.

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

Avida является расширяемой платформой, что позволяет исследователям и разработчикам применять цифровую эволюцию к различным прикладным областям, включая те из них, которые не относятся к биологии. Пользователь может полностью настроить многие характеристики Avida, включая архитектуру виртуального центрального процессора, набор команд и задачи. Сегодня пользователь с использованием современного вычислительного кластера может исследовать сотни популяций и миллионы поколений.

Авторами статьи «Анализ общественного строя древних городских центров с применением культуральных алгоритмов» (Mining the Social Fabric of Archaic Urban Centers with Cultural Algorithms) являются Роберт Рейнольдс, Мустафа Али и Тэер Яуси. Применение набора инструментальных средств искусственного интеллекта и интеллектуального анализа данных к существующим археологическим данным из доисторического городского центра обеспечивает потенциал для построения основанных на агентах моделей вновь обнаруживаемых древних городских центров. Более точно, авторы исследовали период, связанный с появлением этого древнего городища. Целью являлось порождение набора правил принятия решений с использованием методов анализа данных с последующим применением комплекса инструментов так называемых «культуральных алгоритмов» для установления исходных социальных взаимодействий между первыми обитателями.

Археологический объект Монте Альбан в Центральной МексикеАрхеологический объект Монте Альбан находится в Долине Оахаса в Центральной Мексике. На рисунке показан общий вид городища, центральная площадь которого находится в южной части плоской вершины холма, на 400 метров выше уровня долины. В этом месте имеется более 2 тыс. террас, на которых жили и работали обитатели городища. Каждая терраса в Монте Альбан описывается сотнями характеристик культуры и окружающей среды, полученных в ходе интенсивного археологического исследования, которое проводилось в рамках проекта Valley of Oaxaca Settlement Pattern. В описываемом исследовании набор данных об этих террасах обрабатывался с использованием нескольких различных методов анализа, включая обучение на основе деревьев принятия решения.

Доисторические городские центры Центральной Америки появились в результате социальных изменений и представляли собой платформу для будущих изменений. Такие архаические поселения описываются в следующих измерениях: количество населения или площадь города; местоположение или природные условия (на реке, на морском побережье, на вершине горы и т.д.); функция (культовая, коммерческая, оборонная, административная); позиция в иерархии поселений; морфология, на которую влияют все остальные измерения.

Подход авторов опирается, главным образом, на морфологию поселения, поскольку в ней отражаются все остальные характеристики. Типовой древний город состоит из четырех основных частей: однородные части, такие как крупные многосемейные кварталы; центральная часть, или площадь; уличная сеть; специальная область, такая как рынок. Не во всех городах обязательно присутствуют все части, но в них отражаются особенности, которые были запланированы в морфологии города.

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

Модели отчетливо показывают, что внутри современного города будут присутствовать образцы, отражающие структуру города в целом, а также образцы, отражающие специфические области деятельности. Авторы ожидают, что в случае успешного применения ими методов интеллектуального анализа данных будут получены правила, свойственные образцам архаического города, а также правила, свойственные конкретным регионам. Пространственное расширение этих извлеченных правил может позволить распознать конкретную морфологию, связанную с заданным городом. Задача авторов состоит в том, чтобы убедиться в возможности использования какой-либо из упомянутых моделей для описания морфологии любого архаического города.

В предыдущих исследованиях авторы использовали деревья принятия решений для получения характеристик образцов поселений в области, примыкающей к Монте Альбан, для одного периода времени, однако проводимое теперь исследование городского поселения гораздо сложнее изучения более мелких периферийных поселений. Дерево принятия решений— это направленный ациклический граф, описывающий некоторый образец в терминах вариантов, выбираемых в соответствии со значениями выбранных переменных. Варианты, выбираемые в верхней части дерева, более важны при определении образца, чем те, которые выбираются вблизи листьев. Путь в дереве принятия решений от корня дерева к некоторому листовому узлу представляет последовательность действий или вариантов.

Культуральные алгоритмы— это один из нескольких подходов к моделированию «общественного интеллекта» (social intelligence) для решения оптимизационных проблем. Культуральные алгоритмы включают класс вычислительных моделей, полученных на основе наблюдений над процессом культурной эволюции в природе. Авторы встроили инфраструктуру культуральных алгоритмов в систему имитационного моделирования Repast. Система CAT (Cultural Algorithm Toolkit, CAT) включает культуральные алгоритмы, ядро системы, подсистему визуализации, базу данных и подсистему анализа.

Всего вам доброго, до следующей встречи, Сергей Кузнецов (kuzloc@ispras.ru ).