Nusmv состояния и переходы

Я хочу сформулировать эту проблему в NuSMv: введите здесь описание изображения

  • Пользователь может находиться в одном из этих трех состояний: U-потребность, U-использование, U-грусть (представляющий собой пользователя, который нуждается в услуге, начинает пользоваться и он/она доволен качеством этой услуги или начинает пользоваться и он /она грустит из-за плохого качества его обслуживания соответственно).

  • Услуга может находиться в одном из следующих трех состояний: S-предложение, S-хорошее, S-плохое; ;(обозначает услугу, которая не используется, услугу, предлагающую хорошее качество, или услугу, предлагающую плохое качество соответственно).

  • Набор событий: просмотр, использование, остановка, мониторинг, обнаружение-p, устранение-p, представляющих поиск службы, начало использования службы, прекращение использования службы, мониторинг качества, обнаружение проблемы в службе и устранение неполадок. проблема соответственно.

  • это мой код SMV:

     MODULE main
     VAR
    
    
     Service: {S-offer,S-good,S-bad};
     User:{U-need,U-using,U-sad};
     Event:{look,use,stop,monitor,detect-p,remedy-p};
    
      ASSIGN
    
          init(Event) := look; 
          init(User) := U-need;
          init(Service) := {S-offer,S-good};
    
    
        next(Event) := case
    
        (Event = look) &  (Service=S-offer) : look;
        (Event = look) &  (Service=S-good) : use;
        (Event = use) &  (Service=S-good) : monitor;
        (Event = monitor) &  (Service=S-good) : {monitor,stop,detect-p};
        (Event = detect-p)  : remedy-p;
        (Event = remedy-p)  : monitor;
    
        TRUE:Event;
    
                 esac;
    
    
        next(User) := case
    
        (Event = look) &  next(Event)=look : U-need;
        (Event = look) &  next(Event)=use : U-using;
        (Event = use) &  next(Event)=monitor : U-using;
        (Event = monitor) &  next(Event)=monitor : U-using;
        (Event = monitor) &  next(Event)=stop : U-need;
        (Event = monitor) &  next(Event)=detect-p : U-sad;
        (Event = detect-p ) &  next(Event)=remedy-p :  U-using; 
    
                    TRUE:User;
    
                 esac;
          next(Service) := case
    
        (Event = look) &  next(Event)=look : S-offer;
        (Event = look) &  next(Event)=use : S-good;
        (Event = use) &  next(Event)=monitor : S-good;
        (Event = monitor) &  next(Event)=monitor : S-good;
        (Event = monitor) &  next(Event)=stop : S-offer;
        (Event = monitor) &  next(Event)=detect-p : S-bad;
        (Event = detect-p ) &  next(Event)=remedy-p :  S-good; 
    
                    TRUE:Service;
    
                 esac;
    

-Я хочу подтвердить, что этот код представляет проблему, которую я описал выше - я представляю как события, так и состояния сервисов и пользователей как переменные, это правильно?


person sam    schedule 30.05.2019    source источник
comment
ИМХО, сложно ответить на этот вопрос как есть. Эскиз не соответствует подробной спецификации на естественном языке, а спецификация недостаточно детализирована, чтобы оценить, реализует ли модель желаемое поведение или нет. Вы можете попробовать смоделировать систему и проверить, соответствуют ли отношение перехода и набор состояний тому, что вы имеете в виду. Также: модель была бы более читаемой, если бы каждый агент содержался в отдельном модуле.   -  person Patrick Trentin    schedule 30.05.2019
comment
что я хочу точно знать: правильно ли использовать перечисляемые переменные для моделирования помеченных переходов, как я сделал с переменной Event (я использую ее для представления помеченных переходов, таких как запуск, остановка, мониторинг и обнаружение-P)   -  person sam    schedule 30.05.2019
comment
Есть ли разница между использованием структуры крипке и LTS (маркированные переходные системы)?   -  person sam    schedule 30.05.2019
comment
Насколько я знаю, в NuSMV нет помеченных переходов. В общем, я бы лично смоделировал событие как недетерминированный ввод системы. Однако то, что вы называете событием в спецификации, больше похоже на действие, чем на событие. Пример системы агент+действие см. в это   -  person Patrick Trentin    schedule 30.05.2019
comment
Хорошо, доктор Патрик Трентин, я говорил о помеченном переходе, потому что я читал ранее документ, в котором athours сказал, что они реализуют LTS в средстве проверки модели NuSMV. Подход к проверке модели для управления взаимоотношениями с пользователями в социальной сети. emeraldinsight.com/doi/abs/10.1108/K-02- 2018-0092   -  person sam    schedule 31.05.2019
comment
Одно дело моделируемая абстракция, другое дело язык. Помеченный переход TR(S1, S2) можно тривиально смоделировать, заменив его парой переходов TR'(S1, ST) и TR''(ST, S2), где ST — это новое состояние, помеченное именем TR(S1,S2). Могут существовать и другие, более сложные, но и более эффективные подходы. При этом я говорил по памяти, так что могу ошибаться: проверьте документацию!   -  person Patrick Trentin    schedule 31.05.2019
comment
Хорошо, доктор Патрик Трентин, как я уже говорил, я новичок в программе проверки моделей NuSMV и формальной проверке (не более одного месяца), и я действительно многому научился у вас, удачи...   -  person sam    schedule 31.05.2019
comment
примечание: здесь нет необходимости использовать заголовки. ;)   -  person Patrick Trentin    schedule 31.05.2019