Я не понимаю, как конечный автомат применяется к проблеме. В частности, описывает ли модель все возможные перестановки состояний по определению? Как включить память, которая сохраняется и изменяется от состояния к состоянию?
В качестве самого упрощенного примера возьмем только ту часть телефона-автомата, которая принимает монеты и определяет, можно ли совершить звонок. Стоимость звонка 50 центов, разрешены пятаки, десятицентовики и четвертаки.
Будет ли конечный автомат таким деревом:
quarter -> quarter -> valid
quarter -> dime -> dime -> nickel -> valid
dime -> dime -> dime -> dime -> dime -> valid
Или это будет больше похоже на:
Accepting_Coins -> Quarter_Inserted -> Add_25c_to_Balance -> Check_balance -> Balance_is_50c -> valid
Accepting_Coins -> Quarter_Inserted -> Add_25c_to_Balance -> Check_balance -> Balance_is_NOT_50c -> Accepting_Coins
Accepting_Coins -> Dime_Inserted -> Add_10c_to_Balance -> Check_balance -> Balance_is_50c -> valid
Для этой второй версии требуется переменная баланса в памяти.
Я хочу писать программы, управляемые событиями, в которых модель FSM направляет поток управления и отклоняет то, что я определяю как недопустимые последовательности событий.
suffucient
конечное состояние для любой суммы в 50 центов и более. Однако создание отдельных состояний для каждого узла во всех действительных перестановках до этого момента оставило бы вас с излишне большим конечным автоматом порядка 100 состояний. Используйте второй метод. - person Prune   schedule 20.08.2019