Автоматы Вагнеров 003
Конечный автомат — это модель поведения;
Как правило, он моделирует систему управления, которая должна контролировать приложение.
Машина принятия решений, которая генерирует сигналы, представляющие действия: сделай это или сделай это. Конечный автомат стимулируется входными данными, которые представляют собой доступные знания об управляемом приложении.
Любая проблема управления может иметь несколько решений.
Точно такой же контроль может быть достигнут несколькими моделями конечного автомата.
За исключением тривиальных случаев, трудно или невозможно доказать, что один конечный автомат лучше другого (какие критерии мы могли бы использовать?).
Доминирующими факторами в дискуссиях о решениях конечных автоматов являются:
- понимание,
- ремонтопригодность
Конечный автомат отражает способность проектировщика перевести неформальную спецификацию управления в формальную логическую модель в виде конечного автомата.
Мили или Мура / Mealy or Moore.
Мур не обращает внимание на входные данные.
И иногда он выгоднее.
Лучшим решением является уместное комбинирование.
Самое важное - определение состояний.
Компромисс между наукой и реальностью.
Приходит с опытом.
Ошбики
сценарии солнечного дня в системе управления не сложны.
Истинные трудности возникают, если мы хотим правильно справляться со всеми ситуациями сбоя.
Учет ситуаций отказа значительно увеличивает сложность проблемы управления.
Часто проблема становится настолько сложной, что некоторые люди считают, что любые формальные методы потерпят неудачу, и они возвращаются к решениям «здравого смысла» (как будто проблема может стать проще). Чтобы уменьшить сложность, мы должны различать
- состояния ошибки и
сигналы тревоги.
Всё или ничего
Конечный автомат должен выполнять полную функцию управления поведением.
Это важнейшее правило проектирования конечного автомата.
Если это правило не соблюдается, окончательная система управления, которая частично реализована конечным автоматом, а частично в другом месте кода, не имеет смысла.
Большая ошибка использовать переменную глобальную состояния автомата в коде не автомата.
Обмен инфой
Концепции, представленные в этой книге, основаны на полном разделении между данными и потоком управления, что означает, что:Нет никаких оснований для обмена данными между конечными автоматами — конечные автоматы обмениваются только управляющей информацией.
Иерархия
При проектировании конечных автоматов мы можем допускать логические ошибки, которые могут привести к бесконечным циклам или взаимоблокировкам.
Чем больше конечных автоматов в системе, тем выше вероятность таких ошибок, и найти эти ошибки сложнее. Представьте себе систему из 100 конечных автоматов, где каждый конечный автомат может послать команду любому другому конечному автомату и использует состояния любого конечного автомата для определения своего поведения.
Очень сложно понять, как на самом деле ведет себя такая система и «структура» такой системы соответствует неструктурированному программному обеспечению.
В отличие от неструктурированной системы, иерархическую систему легче спроектировать и понять, так как при ее проектировании или отладке мы обычно решаем несколько локальных задач: как для Ведущего, так и для его Ведомых.
Построение иерархии — это эволюционный процесс, состоящий из нескольких испытаний, и он не имеет окончательного решения. Решение отражает способности и предпочтения конструктора.