В ТРИЗ есть такой трюк – «дерево эволюции». Если не сильно вдаваться в подробности, то это переизобретенный тризовцами(со всем моим уважением и к этим людям, и к этой технологии) синтез морфологического анализа и метода ветвей и границ.
Суть этого метода заключается в том, чтобы нечто исследуемое соотнести с соответствующим типом эталонов, по которым заблаговременно определены виды корректных преобразований. Например, если мы имеем дело с инженерными системами, то у их эталонов могут быть следующие виды преобразований (использую тризовскую терминологию): изменение условных типов степеней свободы (так называемые в ТРИЗ «моно-би-поли»), членение на составные части («дробление»), геометрическая эволюция, варианты реализации внутренней структуры, изменение характера согласованности элементов в системе и т.д. Всего для инженерных систем их пока определено 10. Но 10 — это не догма. Для конкретных задач их может быть и 5, и 25, и любое другое количество.
Затем, когда нам необходимо решить какую-то изобретательскую задачу в сфере инженерии, мы берем эту классификацию, берем несколько существующих вариантов решений, близких к тому, которое нам необходимо создать или найти, и «прикладываем» их к соответствующей классификации так, чтобы стало понятно – какой из потенциально возможных вариантов еще не реализован, но он имеет право на жизнь. Его и исследуем детально. Иногда их несколько, значит, исследуем все. Например, если мы решаем задачу движения и во всех опорных вариантах используем колесо в качестве движителя, а в шаблоне есть вариант преобразования движения – червячная передача, то мы придумываем в качестве движителя шнек.
Это чем-то очень похоже на морфологический анализ, хорошо известный в среде инженеров и им подобных. Однако, если в морфологическом анализе мы просто генерируем новые варианты на основе некоторого набора вариантов реализации составляющих проектируемой системы, а потом ступенчато отсекаем нежизнеспособные варианты этой системы, то тризовцы, как это уже ясно из вышеприведенного описания, поступают несколько более экономно. Но необходимо понимать, что эта экономия имеет и свои недостатки, ключевой из которых знает любой математик – локальный экстремум.
Для того, чтобы как-то избежать проблемы «застревания» в локальных экстремумах, тризовцы переизобрели метод ветвей и границ. Точнее, лишь наметили своё движение в этом направлении.
Зачем я – кибернетик так подробно рассказываю о том, что сделали тризовцы?
Дело в том, что я пытаюсь найти, где это только возможно (в том числе и в решениях тризовцев) то рациональное зерно, которое можно было бы применить в задачах моделирования сложных объектов и систем в условиях неопределенности, а также в условиях дефицита ресурсов на моделирование.
Сразу отмечу, подход, чем-то похожий на тризовский, у меня уже описан здесь – на Катакомбе. Это касалось феномена «черных лебедей».
Суть этого подхода достаточно легко понятна: мы разделяем объект исследования и его окружение на подсистемы таким образом, чтобы для каждой из них можно было описать алгоритм ее эволюции. Причем, это может быть не обязательно детерминированный алгоритм – вполне может быть и вероятностный. Более того, практически идеальным вариантом является вариант вероятностно-детерминированного описания (логико-вероятностная модель) эволюции для каждой составляющей. А над этими составляющими или внутри них мы описываем алгоритм (тоже в виде логико-вероятностной модели), который обеспечивает их согласованное состояние.
Имея такого рода модель, мы проводим над ней множество модельных экспериментов и получаем, в итоге, - характер, вероятность и условия возникновения редких и ранее ненаблюдаемых состояний - «черных лебедей». Что и требовалось получить!
Легко заметить, что и в ТРИЗ, и в описанном выше методе исследования «черных лебедей» применяется практически один и тот же фундаментальный подход, суть которого в следующем: континуум состояний кластеризуется, в результате чего мы получаем уже не бесконечное множество состояний, которое за разумное время практически невозможно проанализировать, а их вполне конечное и практически приемлемое для исследований множество.
А потом на основе конечного множества этих конечных множеств мы исследуем все их комбинации. Комбинаторика!
И технологический вопрос здесь лишь в том, как сделать исследование всех актуализированных комбинаций наиболее эффективно. Но это всегда очень тесно связано с конкретной предметной областью, поэтому пока что я оставлю это в стороне, но обращу внимание на другой, как мне кажется – более фундаментальный – вопрос: «Как бесконечное множество состояний корректно и эффективно превратить в приемлемое конечное множество?»
Для начала обратимся к определению категории «состояние». Для этого идем на любимый мною словарь академик.ру и… просто тонем в огромном количестве контекстных определений.
Однако, если обобщить приведенные в словаре определения, то категорию «состояние» в кибернетическом контексте можно определить следующим образом:
· Состояние – определенная совокупность значений характеристик объекта, определяющая возможность его перехода к другим определенным совокупностям значений характеристик.
И это не просто кластеризация. Это больше соответствует графу, которым «накрывается» некий континуум, причем узлы графа – это не просто точки, а нечто, что ограничивает области этого континуума. И если объект-прототип меняется, то он может «двигаться» лишь по дугам этого графа.
Неплохо это видно на следующей иллюстрации:
Здесь черным показан граф и выделены кругами его узлы, а красным – области, сопоставленные каждому узлу.
Разбив всё фазовое пространство реализации объекта на области так, что из каждой можно перейти лишь в какую-то соседнюю, мы получим пространство состояний. Вопрос лишь в том, как это сделать правильно.
В некоторых случаях такая разбивка «самоочевидна». Например, обратите внимание на план эвакуации при пожаре, который обязательно висит (должен висеть!) в каждом здании где имеется скопление людей. Каждую комнату или кабинет или любое другое помещение, если это не спортивный или актовый зал, в контексте задачи эвакуации можно описать точкой, поскольку для задачи эвакуации не важно, в какой части комнаты находится человек, главное, что он в конкретном помещении, и из него есть, например, только два выхода: дверь в другое помещение и окно.
Но далеко не всегда возможна «самоочевидная» декомпозиция фазового пространства и сведение его к пространству состояний. Как правило, всё, как раз, очень неочевидно. Более того – области, на которые разбивается пространство, в общем случае не односвязные, а связи между ними могут связывать далеко не соседние области. И, опять же, в общем случае, области могут… пересекаться!
С учетом всего изложенного возникает вопрос необходимости наличия технологии, используя которую, можно было бы такого рода преобразования фазового пространства в пространство состояний делать с наименьшими потерями сути объекта исследования в контексте решаемой задачи и при этом получать наиболее компактное результирующее пространство состояний.
Как уже было отмечено выше, кластеризация для этого совсем не подходит, и причина в том, что при кластеризации мы осуществляем разбивку фазового пространства на области без учета самого важного для нас при работе с состояниями – без взаимообусловленности состояний через допустимость переходов между ними. Можно, конечно, кластеризовать всё пространство, а потом попытаться установить связь между областями, придумав, почему можно переходить между теми или иными кластерами, но такой подход создает больше проблем, чем дает решений.
Здесь следует отметить, что описываемый подход ("жонглирование" пространствами) в математике давно и хорошо известен. В некоторых случаях возможно и очень выгодно перевести решение какой-то математической задачи в другое – специфическое для этой задачи пространство, в котором эта задача решается относительно просто, а потом результат вернуть в пространство исходное. Главное при этом не потерять суть, а на практике это - точность.
Теперь, когда основа решения более-менее понятна, попробуем разобраться как из этого можно было бы сделать инструмент, с помощью которого пользователь мог бы, лишь выполняя некий несложный регламент, решать в отношении конкретных объектов исследований практические задачи выявления значимых для пользователя состояний.
Для этого воспользуемся трюком, которым часто пользуются разработчики математических моделей, когда перед ними стоит задача создания модели сложного объекта – прототипа. Трюк заключается в том, чтобы виртуально разделить исследуемый объект иерархически на части так, чтобы, описав достаточно грубо модель эволюции атомарных частей и алгоритм их взаимодействия, а потом повторив эту операцию снизу-вверх по иерархии для всех уровней, и придя, таким образом, к самому верхнему, разработчик получил бы приемлемую модель эволюции объекта прототипа. Это вариант подхода «разделяй и властвуй», при котором разделение идет не по горизонтали, а по вертикали – вглубь моделируемого объекта.
Хорошим примером такого подхода является задача моделирования боя, например, дивизии. Для того, чтобы создать адекватную модель боя дивизии, мы ее разделяем на полки, полки – на батальоны, батальоны – на роты, роты – на взводы. Затем грубо описываем модель поведения взводов, потом на их основе описываем модель поведения рот, потом из рот складывается модель батальоны, из батальонов – полков, а из полков уже – дивизии. И в результате, как правило, получаем добротную модель для решения задач, например, исследования возможных вариантов хода и исхода боя, или даже боевых действий.
Перенося этот подход на задачу выделения состояний, мы делаем примерно то же самое – разделяем составляющие системы на еще более мелкие составляющие и для каждой из них описываем (сначала достаточно грубо) перечень несовместимых состояний. Тут необходимо особо подчеркнуть – несовместимых. Затем увязываем эти состояния зависимостями (для начала – тоже достаточно грубыми). Этими зависимостями мы отражаем то, с какой вероятностью одни элементы системы будут в определенных состояниях, если какие-то другие элементы будут в определенных других.
Описывать такого рода связи можно различным способом – графически или в виде, например, базы знаний специализированной экспертной системы. И в том, и в другом случае инструмент описания ориентирован на экспертов предметной области и не требует даже прикладного программирования (в классическом понимании этого слова). Когда база знаний сформирована, специальный механизм анализирует сформированную пользователями схему и правила на предмет наличия суперпозиций в схеме. Если какой-то элемент при какой-то конфигурации состояний других элементов равновероятно (допустим так) может находиться в двух разных состояниях (а они, напоминаю, несовместимы), то это означает, что или база знаний неполна/некорректна, или некорректно осуществлено разделение исследуемой системы на составляющие, или конфликтный элемент необходимо дополнительно декомпозировать. Итерации корректировки объекта и базы знаний продолжаются пользователем до тех пор, пока не будут разрешены все конфликты – пока не будут устранены все суперпозиции.
В итоге мы получаем некоторую модель, которую и саму по себе можно уже использовать для решения многих очень полезных практических задач управления, но здесь для нас она представляет интерес лишь как основа для выявления ключевых состояний – тех состояний объекта-прототипа этой модели, которые мы планируем применять для анализа надсистемы.
Задачи, связанные с выделением устойчивых состояний, решаются над этой моделью автоматически.
При этом многократно из различных случайных состояний система (схема с соответствующей базой знаний) восстанавливают внутрисогласованное состояние. Каждое согласованное состояние - точка в фазовом пространстве модели. В результате формируется набор точек в фазовом пространстве модели – аттракторов, к которым "притягивается" всё фазовое пространство. То есть модель из любой точки потенциального фазового пространства в результате согласования значений параметров ее составляющих окажется в одной из найденных точек.
Полученный набор точек анализируется на устойчивость, что фактически является решением задачи определения параметров и конфигурации зоны. Сопутствующим результатом такого анализа является информация о вероятностях переходов от одного аттрактора к другому.
К полученному результату может быть применен дополнительно ряд инструментов, например, из теории графов, чтобы при необходимости максимально корректно сократить размер полученного графа.
Результирующий граф – это и есть та укрупненная модель элемента системы, которую мы собираемся моделировать. Остается лишь дать предметные интерпретации узлов графа и его дуг – и можно применять такую модель в морфологическом анализе.
На основе этой модели можно даже относительно легко сделать и логико-вероятностный автомат, который позволяет эффективно, и даже иногда эффектно, решать ряд задач, например, задачи исследования конфликтов.
С точки зрения кибернетики описанный здесь подход вполне рабочий и достаточно ингерентен (легко внедряется), вот только не дает мне покоя одна вещь…
… я про интерпретации.
Если мы видим устойчивое состояние модели объекта исследования, выраженное как совокупность значений параметров и видим вероятность того, что из этого состояния она перейдет в какое-то другое, то как назвать эти состояния? А назвать необходимо, иначе мы не сможем нормально с ними работать на более высоком уровне. В некоторых случаях мы, конечно же, сможем соотнести наблюдаемую математическую абстракцию с какой-то уже привычной нам категорией и на основании этого получить какое-то название, но чаще всего будет совсем иначе. И тут действительно хороша метафора абстрактной живописи. Каждый в ней увидит что-то своё. И как потом нам всем договариваться о единой интерпретации? Мы уже несколько сот лет не можем договориться даже о том, с чем сталкиваемся в обыденной жизни, а тут…
В общем, чтобы широко применять описанный тут подход необходимо еще и философию в части формирования ею корпуса основных понятий, поставить на поток.
А это возможно?…
… что-то мне подсказывает, что возможно. И заходить тут надо со стороны инструмента «эталонизатор». Но это тема для другого текста.