Что сложнее определить в системе
Сложность систем и способы «борьбы» с ней
Все мы так или иначе проектируем и реализуем системы. Будь то программные комплексы, инфраструктурные или платформенные решения. И в рамках этой работы мы постоянно сталкиваемся с понятием «сложной системы». В рамках этой заметки я хочу поделиться своим видением на сложность систем и «борьбу» с ней.
Начнем с определения системы. Мне нравится определение данное в книге System Architecture. Strategy and Product Development for Complex Systems. Перевод звучит примерно так:
Система, это набор компонентов и их связей. Функциональность всей системы больше, чем сумма функциональностей отдельных ее составляющих.
Это очень важное определение. Оно говорит о том, что система должна генерировать «полезность». Если система не дает прироста «полезности», в сравнении с компонентами, ее составляющими, то, вероятно, такая система не очень нужна.
Следующий вопрос, который можно себе задать — а что же такое «сложная система». Можно много рассуждать на этот счет, но на мой взгляд сложной можно назвать систему, которую сложно оценить умом, с которой сложно работать, сложно понять, сложно держать в голове все взаимодействия, которые происходят в этой системе.
И тут для нас, как инженеров, важно иметь механизм, какой-то способ, позволяющий эту сложность измерить. В качестве базы для этого механизма ребята из MIT предлагают использовать широко известное «магическое число семь плюс минус два». На эту тему есть оригинальное исследование, а так же статьи на хабре и презентации TED. В двух словах, идея всех этих исследований состоит в том, что «рабочая память» человека может одновременно удерживать и работать с ограниченным числом различных объектов. Тут очень важно понятие «различных» объектов, поскольку мозг борется со сложностью группируя объекты. Например, связи между объектами одинакового вида или типа можно держать в голове как одну связь. Или, более наглядно — не надо представлять себе систему из кучи перемешанных шариков разных цветов. Достаточно просто сгруппировать их в голове, сказать, что есть, скажем, пять красных шариков, семь желтых и три синих. Это упрощает работу с системой, уменьшая количество объектов с пятнадцати до трех. Поэтому в контексте оценки сложности мы говорим именно о разных объектах, атомарных, которые невозможно сгруппировать.
В конечном итоге есть разные оценки емкости рабочей памяти. Кто-то говорит о четырех объектах, кто-то — о пяти, кто-то — о семи. В своих рассуждениях я буду придерживаться классического подхода — «семь плюс минус два».
Исходя из этих оценок можно сказать, что если с системой становится сложно работать, удерживать ее компоненты и связи в памяти, то, видимо, она превышает тот самый предел емкости в «семь плюс минус два». Это в свою очередь означает, что это самое «магической число семь» можно использовать как базовую оценку сложности системы. Я думаю, что следующее, пока, промежуточное определение, имеет право на жизнь:
Сложная система, это система состоящая из 7+-2 атомарных компонентов и их связей в различных соотношениях.
Классические способы борьбы со сложностью
Теперь давайте вкратце вспомним классические способы или инструменты борьбы со сложностью на этапе проектирования. Их немного: абстракция, декомпозиция, иерархия и иерархическая декомпозиция.
Все эти средства в конечном итоге призваны упростить отдельные подсистемы нашей системы таким образом, чтобы при работе с каждым отдельным блоком он «влезал в голову» целиком.
О чем это все в конце концов
Что же все эти вещи нам дают? Попросту говоря, идея состоит в том, чтобы, используя различные методы, преобразовать неструктурированный набор компонентов системы, к некоему структурному виду. При этом, памятуя о магической семерке, можно сказать, что каждый блок в декомпозиции не должен содержать больше чем семь плюс/минус два элемента. Иначе, при детальном рассмотрении такого блока, его будет сложно контролировать.
С другой стороны, если мы имеем систему с большим количеством блоков, разбитых на иерархические уровни, то количество таких уровней, желательно, не должно превышать семи (плюс/минус два). В качестве иллюстрации хочу привести слайд из Fundamentals of Systems Engineering. Как видно из слайда, сложность системы растет с ростом количества уровней декомпозиции.
Таким образом правильный процесс проектирования системы можно описать примерно следующим тезисом:
Не стройте сложные системы. Стройте системы с необходимым уровнем сложности.
Сложная система: характеристика, структура и методы определения
Существуют естественные и искусственные системы. Система, состоящая из других систем, считается сложной. Это, например, яблоко или завод по производству тракторов, пчелиный улей и написание компьютерной программы. Системой может быть процесс, объект, явление. Информация является средством описания систем.
Простые и сложные системы
Вам будет интересно: Ненормальный — это какой? Толкование слова
Вам будет интересно: На английском прилагательные (с переводом)
Современная наука утверждает: в амебе и булыжнике легко обнаружить химические вещества, молекулы, атомы, летающие по орбитам электроны и элементарные частицы.
Если верить астрономам, то Земля не единственная планета во Вселенной и подобные ей существуют в огромной системе галактик.
Все системы простые на одном уровне. Все системы сложные, как только исследователь опускается на уровень ниже или поднимается уровнем выше.
Статика и динамика
Здание завода или станина станка неподвижны. Гора менее подвижна, чем океан у ее подножия. Это всегда сложные динамические системы. Здание завода обеспечивает необходимый функционал для нормальной работы трудового коллектива, станков, оборудования, хранения материалов и готовой продукции. Станина гарантирует нормальную работу механизмов станка. Гора участвует в формировании климата, «управляет» движением ветра, дает пищу и кров живым организмам.
Вам будет интересно: Конфидент – это хранитель ваших секретов
Структура системы
Авторитетных специалистов по теории систем достаточно, чтобы эффективно решать задачи моделирования, но недостаточно, чтобы предложить концептуально законченную теорию систем, их структуры и методов определения (разработки) объективных и достоверных моделей.
Как правило, специалисты манипулируют смыслом, который вкладывают в термины: цель, функциональность, структура, пространство состояний, целостность, уникальность. Используются графические или блочные нотации для наглядного построения моделей. Главным является текстовое описание.
Характерной составляющей структуры является спектр данных, их целостность, количественное и качественное описание, внутренние и внешние методы сложных систем, которыми они манипулируют:
Хорошим примером структуры системы является программирование. Конец прошлого века ознаменовался переходом от концепции классического программирования к объектно-ориентированному.
Объекты и системы объектов
Решая задачу посредством объектно-ориентированного программирования, программист мыслит объектами, и сложная система в его сознании представляется совокупностью более простых. Всякая система складывается из одного или нескольких объектов. Каждый объект обладает своими данными и методами.
Точка и система точек
Занимаясь решением практических задач, специалист строит модели. С опытом приходит умение видеть сложные системы как точки в пространстве-времени. Эти точки наполнены уникальным и конкретным функционалом. Системы «принимают» входящую информацию и дают ожидаемый результат.
Каждая точка включает в себя систему точек, которые также следует интерпретировать как системы. Обратная процедура, когда решаемая задача представлена системой подзадач, а следовательно, навязывает специалисту относительно систематизированный комплект разделенных функций, обязательно приведет к нестыковкам в решении.
Только одно начало есть в любой системе, только его можно расписать на подзадачи, требующие решения. Анализируя системы, все специалисты употребляют термины:
Знания и умения
Расхожая фраза «незаменимых нет» безнадежно устарела. Даже простую работу можно выполнить разумно, затратив меньше сил, сэкономив время и деньги.
Серьезная теоретическая подготовка, практический опыт и умение системно мыслить определяют результат решения каждой задачи. При объективном подходе каждая из них дает точный результат вне зависимости от того, какой специалист выполнил работу.
Теория систем: Закономерности во взаимоотношениях между объектами Статьи редакции
Менеджер проектов компании Innova (разрабатывает игровую платформу 4game.ru и онлайн-кинотеатр ayyo.ru), ведущий блога Exploring the weird Искандер Хабибрахманов написал для рубрики «Рынок игр» материал о теории систем, принципах поведения в них, взаимосвязях и примерах самоорганизации.
Мы живем в сложном мире и не всегда понимаем, что происходит вокруг. Мы видим людей которые становятся успешными не заслужив этого и тех, кто действительно достоин успеха, но остается в безвестности. Мы не уверены в завтрашнем дне, мы все больше закрываемся.
Чтобы объяснить непонятные нам вещи, мы придумывали шаманов и гадалок, легенды и мифы, университеты, школы и онлайн-курсы, но это, кажется, не помогло. Когда мы учились в школе, нам показывали картинку ниже и спрашивали, что случится, если потянуть за нитку.
Со временем большинство из нас научались давать правильный ответ на этот вопрос. Однако затем мы выходили в открытый мир, и наши задачи начинали выглядеть так:
Это вело к фрустрации и апатии. Мы стали похожими на мудрецов из притче о слоне, каждый из которых видит лишь маленькую часть картины и не может сделать правильный вывод об объекте. У каждого из нас свое непонимание мира, нам сложно коммуницировать его друг с другом, и это делает нас еще более одинокими.
Дело в том, что мы живем в век двойного сдвига парадигмы. С одной стороны, мы отходим от механистической парадигмы общества, доставшейся нам от индустриального века. Мы понимаем, что входы, выходы и мощности не объясняют всего разнообразия мира вокруг нас, и зачастую на него гораздо сильнее влияют социокультурные аспекты общества.
С другой стороны, огромное количество информации и глобализация ведут к тому, что вместо аналитического анализа независимых величин мы должны изучать взаимозависимые объекты, неделимые на отдельные составляющие.
Кажется, что от умения работать с этими парадигмами зависит наше выживание, и для этого нам нужен инструмент, как когда-то нужны были инструменты для охоты и обработки земли.
Одним из таких инструментов является теория систем. Ниже будут примеры из теории систем и ее общие положения, будет больше вопросов чем ответов и, надеюсь, будет немного вдохновения узнать об этом больше.
Теория систем
Теория систем — это довольно молодая наука на стыке большого количества фундаментальных и прикладных наук. Это своего рода биология от математики, которая занимается описанием и объяснением поведения тех или иных систем и общего между этим поведением.
Существует множество определений понятия системы, вот одно их них. Система — множество элементов, находящихся в отношениях, которое образует определенную целостность структуры, функции и процессов.
В зависимости от целей исследований, системы классифицируют:
Также у систем существуют особые состояния, изучение которых дает понимание о поведении системы.
Зачастую при работе с системами, мы хотим сделать их лучше. Поэтому нужно задавать себе вопрос, в какое особое состояние мы хотим ее привести. Идеально, если интересующее нас новое состояние является устойчивым фокусом, тогда мы можем быть спокойны, что если мы достигнем успеха, то он не исчезнет на следующий день.
Сложные системы
Мы все чаще встречаем вокруг нас сложные системы. Здесь я не нашел звучащих терминов в русском языке, поэтому придется говорить на английском. Существует два принципиально разных понятия сложности.
Первый (complicatedness) — означает некоторую сложность устройства, которая применяется к навороченным механизмам. Такой вид сложности зачастую порождает неустойчивость системы к малейшим изменениям в окружающей среде. Так, если на заводе остановится один из станков, он может вывести из строя весь процесс.
Второй (complexity) — означает сложность поведения, например, биологических и экономических систем (либо их эмуляций). Такое поведение напротив сохраняется даже при некоторых изменениях окружающей среды или состояния самой системы. Так, при уходе крупного игрока с рынка, игроки меньше поделят его долю между собой, и ситуация стабилизируется.
Дальше понятие сложность используется именно во втором смысле.
Зачастую сложные системы обладают свойствами, которые способны ввергнуть непосвященного в апатию, и сделать работу с ними трудной и интуитивно непонятной. Такими свойства являются:
Простые правила сложного поведения
Мы привыкли, что если нечто демонстрирует сложное поведение, то оно, скорее всего, сложно устроено внутри. Поэтому мы видим закономерности в случайных событиях и пытаемся объяснить непонятные нам вещи происками злых сил.
Однако это не всегда так. Классическим примером простого внутреннего устройства и сложно внешнего поведения является игра «Жизнь». Она состоит из нескольких простых правил:
В целом, для написания программы, которая будет реализовывать эти правила, потребуется пять-шесть строчек кода.
При этом данная система может производить довольно сложные и красивые шаблоны поведения, так что не видя самих правил их сложно угадать. И уж точно сложно поверить, что это имплементируется несколькими строчками кода. Возможно, реальный мир также построен на нескольких простых законах, которые мы еще не вывели, а все безграничное многообразие порождается этим набором аксиом.
Эффект бабочки
В 1814 году Пьер-Симон Лаплас предложил мысленный эксперимент, заключающийся в существовании разумного существа, способного воспринять положение и скорость каждой частицы вселенной и знающего все законы мира. Вопрос заключался в теоретической способности такого существа предсказывать будущее вселенной.
Данный эксперимент вызвал множество споров в научных кругах. Ученые, вдохновленные прогрессом в вычислительной математике, склонялись к положительному ответу на данный вопрос.
Да, мы знаем, что принцип квантовой неопределенности исключает существование такого демона даже в теории, и предсказание положения всех частиц в мире принципиально невозможно. Но возможно ли оно в более простых детерминированных системах?
Действительно, если мы знаем состояние системы и правила, по которым они изменяются, что мешает нам вычислить следующее состояние? Нашей единственной проблемой может стать ограниченное количество памяти (мы можем хранить числа с ограниченной точностью), но все вычисления в мире так и работают, поэтому это не должно стать проблемой.
В 1960 году Эдвард Лоренц создал упрощенную модель погоды, состоящую из нескольких параметров (температура, скорость ветра, давление) и законов, по которым из текущего состояния получается состояние в следующий момент времени, представляющих набор дифференциальных уравнений.
xn+1 = xn + a(-xn + yn)dt
zn+1 = zn + (-czn + xnyn)dt
Он вычислял значения параметров, выводил их на монитор и строил графики. Получалось что-то вроде этого (график для одной переменной):
После этого Лоренц решил перестроить график, взяв некоторую промежуточную точку. Логично, что график получился бы абсолютно таким же, так как начальное состояние и правила перехода никак не изменились. Однако когда он это сделал, получилось нечто неожиданное. На графике ниже синяя линия отвечает за новый набор параметров.
То есть вначале оба графика идут очень близко, различий почти нет, но затем новая траектория все более отдаляется от старой, начиная вести себя по-другому.
Как выяснилось, причина парадокса крылась в том, что в памяти компьютера все данные хранились с точностью до шестого знака после запятой, а выводились с точностью до третьего. То есть микроскопическое изменение параметра привело к огромному различию в траекториях системы.
Это была первая детерминированная система, обладающая таким свойством. Эдвард Лоренц дал ей название «Эффект бабочки».
Этот пример показывает нам, что иногда события, кажущиеся нам неважными, в конечном итоге имеют огромное воздействие на исходы. Поведение таких систем невозможно предсказать, но они и не являются хаотическим в прямом смысле этого слова, ведь они детерминированы.
Более того, траектории данной системы обладают структурой. В трехмерном пространстве множество всех траекторий выглядит так:
Что символично, оно похоже на бабочку.
Эмерджентность
Томас Шеллинг, американский экономист, рассматривал карты распределения расовых классов в различных городах Америки, и наблюдал следующую картину:
Это карта Чикаго и здесь разными цветами изображены места проживания людей различных национальностей. То есть в Чикаго, как и в других городах Америки, присутствует довольно сильная расовая сегрегация.
Какие выводы мы можем из этого сделать? Первыми в голову приходят: люди нетолерантны, люди не принимают и не хотят жить с людьми, которые отличаются от них. Но так ли это?
Томас Шеллинг предложил следующую модель. Представим город в виде клетчатого квадрата, в клетках живут люди двух цветов (красные и синие).
Тогда почти у каждого человека из этого города есть 8 соседей. Выглядит это как-то так:
При этом если у человека меньше 25% соседей того же цвета, то он случайным образом переезжает в другую клетку. И так продолжается до тех пор, пока каждого жителя не устраивает его положение. Жителей этого города совсем нельзя назвать нетолерантными, ведь им нужно всего лишь 25% людей таких же как они. В нашем мире их назвали бы святыми, настоящим примером терпимости.
Однако если запустить процесс переездов, то из случайного расположения жителей выше, мы получим следующую картину:
То есть мы получим расово сегрегированный город. Если же вместо 25%, каждый житель будет хотеть хотя бы половину соседей таких же как он, то мы получим практически полную сегрегацию.
При этом данная модель не учитывает такие вещи, как наличие локальных храмов, магазинов с национальной утварью и так далее, которые также увеличивают сегрегацию.
Мы привыкли объяснять свойства системы свойствами ее элементов и наоборот. Однако для сложных систем это зачастую приводит нас к неверным выводам, ведь, как мы видели, поведение системы на микро и макро уровнях может быть противоположным. Поэтому зачастую спустившись на микро уровень, мы стараемся сделать как лучше, а получается как всегда.
Такое свойство системы, когда целое не может быть объяснено суммой элементов, называется эмерджентностью.
Самоорганизация и адаптивные системы
Пожалуй, самым интересным подклассом сложных систем являются адаптивные системы, или системы, способные к самоорганизации.
Самоорганизация означает, что система меняет свое поведение и состояние, в зависимости от изменений во внешнем мире, она адаптируется к изменениям, постоянное преображаясь. Такие системы повсюду, практически любая социально-экономическая или биологическая, ровно как комьюнити любого продукта, являются примерами адаптивных систем.
А вот видео с щенками.
Сначала система находится в хаосе, но при добавлении внешнего стимула она упорядочивается и появляется довольно милое поведение.
Поведение муравьиного роя
Поведение муравьиного роя при поиске еды является прекрасным примером адаптивной системы, построенной на простых правилах. При поиске еды, каждый муравей блуждает случайным образом, пока не найдет еду. Найдя еду насекомое возвращается домой, отмечая пройденный путь феромонами.
При этом вероятность выбора направления при блуждании пропорциональна количеству феромона (силе запаха) на данном пути, а со временем феромон испаряется.
Эффективность муравьиного роя настолько высока, что похожий алгоритм используется для нахождения оптимального пути в графах в реальном времени.
При этом поведение системы, описывается простыми правилами, каждое из которых критически важно. Так случайность блуждания позволяет находить новые источники питания, а испаряемость феромона и привлекательность пути, пропорциональное силе запаха, позволяет оптимизировать длину маршрута (на коротком пути, феромон будет испаряться медленнее, поскольку новые муравьи будут добавлять свой феромон).
Адаптивное поведение всегда находится где-то между хаосом и порядком. Если хаоса слишком много, то система реагирует на любое, даже незначимое, изменение и не может адаптироваться. Если же хаоса слишком мало, то в поведении системы наблюдается стагнация.
Я наблюдал это явление во многих командах, когда наличие четких должностных инструкций и жестко регламентированных процессов делало команду беззубой, и любой шум вовне выбивал ее из колеи. С другой стороны, отсутствие процессов приводил к тому, что команда действовала неосознанно, не накапливала знания и поэтому все ее несинхронизированные усилия не вели к результату. Поэтому построение такой системы, а именно в этом задача большинства профессионалов в любой динамической сфере, является своего рода искусством.
Для того, чтобы система была способна к адаптивному поведения необходимо (но не достаточно):
Напоследок, хочется привести пример модели, подчеркивающей необходимость разнообразия элементов.
Для колонии пчел очень важно поддерживать постоянную температуру улья. При этом если температуру улья опускается ниже желаемой для данной пчелы, она начинает махать крыльями, чтобы согреть улей. У пчел нет координации и желаемая температура заложена в ДНК пчелы.
Если у всех пчел будет одинаковая желаемая температура, то при ее опускании ниже, все пчелы начнут одновременно махать крыльями, быстро согреют улей, а затем он также быстро остынет. График температуры будет выглядеть так:
А вот другой график, где желаемая температура для каждой пчелы сгенерирована случайно.
Температура улья держится на постоянном уровне, потому что пчелы подключаются к согреванию улья по очереди начиная с самых «мерзнущих».
На этом все, напоследок хочется повторить некоторые идеи, которые обсуждались выше:
Почитать про это подробнее можно, например, вот в этой классной книжке: Complex Adaptive Systems: An Introduction to Computational Models of Social Life (John H. Miller, Scott E. Page).