Как вы моделируете таксофон как конечный автомат?

Я не понимаю, как конечный автомат применяется к проблеме. В частности, описывает ли модель все возможные перестановки состояний по определению? Как включить память, которая сохраняется и изменяется от состояния к состоянию?

В качестве самого упрощенного примера возьмем только ту часть телефона-автомата, которая принимает монеты и определяет, можно ли совершить звонок. Стоимость звонка 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 направляет поток управления и отклоняет то, что я определяю как недопустимые последовательности событий.


person user10530562    schedule 20.08.2019    source источник
comment
Вторая версия - выход. Если бы вы попытались закодировать каждую комбинацию значений в конечный автомат, вам потребовалось бы бесконечное количество состояний.   -  person 500 - Internal Server Error    schedule 20.08.2019
comment
Если вы хотите смоделировать это как конечный автомат, вы можете иметь каждую долю 5c в качестве состояния, 0, 5, 10, ..., 50 плюс слишком много состояний, а затем соответствующим образом подключить состояния. Вы начинаете с 0 и заканчиваете в состоянии 50, что будет означать, что ввод действителен.   -  person jdehesa    schedule 20.08.2019
comment
Первый способ жизнеспособный, но трудный. Ваша цель — определить, можно ли сделать вызов, чтобы даже ваша первая версия имела suffucient конечное состояние для любой суммы в 50 центов и более. Однако создание отдельных состояний для каждого узла во всех действительных перестановках до этого момента оставило бы вас с излишне большим конечным автоматом порядка 100 состояний. Используйте второй метод.   -  person Prune    schedule 20.08.2019


Ответы (1)


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

Нужно ли вам дополнительное состояние для "переполнения", зависит... Если телефон-автомат отклонит любую монету, которая не представляет собой переход в модели, то он вам не нужен: отсутствие перехода (края ) в модели (графике) было бы достаточно. Но в очень подробной реализации вы бы также добавили состояния, когда монета застревает, вставлена ​​недействительная монета, вставлено слишком много (как будет реагировать телефон-автомат? вернет ли он монеты или просто вернет все? . ..etc ), кнопка нажата, ...

Но вот самая основная модель:

введите здесь описание изображения

Вам, вероятно, также понадобятся переходы для набора номера, совершения и завершения вызова. После завершения вызова вы снова перейдете в состояние 0, чтобы можно было принимать новые платежи.

person trincot    schedule 21.08.2019