自动机缺陷状态识别

Unsafe State用于解决如何识别缺陷的问题。
第一类对应的识别语法为(next(相关属性) = 相关值)。

next(flag_onestate):=
  case
    -- unsafe对应的相关属性
    next(attribute1)=1 & next(change_attribute)=1: 1;
    -- TRUE: 0
    TRUE:0;
  esac;

第二类对应的识别语法为(flag_open和flag_close,若当前状态满足trigger则相应置为1,如果flag_open=flag_close,说明下一状态存在A.1)。

next(window.switch):=
  case
    next(flag_open)=1 & next(flag_close)=1:uncertain;
  esac;

next(flag_open):=
  case
    humidity > 60: 1;
    TRUE:0;
  esac;

next(flag_close):=
  case
    temperature < 20: 1;
    TRUE:0;
  esac;

第三类对应的识别语法为连续两个state出现属性变化且不同值(loop / 开了马上关)。


4.2.4 变化规则配置——只改变规则配置解决Trigger-Interference中的loop

规则1: when illuminance < 100 , turn on light
规则2: when illuminace > 500 , turn off light
只会在illuminace < 100时出现缺陷
正常的修复方式:
100 + turn on light(可能实际是500但误判为300,是错在这,这个要在原始信息里获取) + 400 - light预期值300

可能smv 581就算修复好了,如何获得600、700

1.将常量配置信息light > 500改为变量light > config_value,其初始值为配置值

2.往大于500的值变化,因为light > 500

3.config_value:
	  flag:变化
	  TRUE:不变

4.2.5 变化规则语义——只改变语义解决A.1

if 8:00 am while Temperature < 20℃ , close window
if 8:00 am while humidity > 60% , open window
正常的修复方式:
生成新规则 if 8:00 am while Temperature < 20℃ and humidity > 60% ,让用户选择open、close window
改变老规则,调整为 Temperature < 20℃ & humidity < 60%;humidity > 60% & Temperature > 20℃

可能的方式:
因为trigger在建模前要写入文件,且不能像配置随意变化,所以考虑提前准备语义模板
如该例中,温度和湿度的模板
temperature_copy在flag时生效,用于修复,原属性代表实际环境


实验一

attribute是自然属性
change_attribute 安全的情况下让其等于原属性,不安全的情况下让其变为其它值

MODULE main
  VAR
    attribute1:0..1;
    change_attribute:0..1;
    change_attribute_copy:0..1;
    another_trigger:{on, off};
    flag_onesate:0..1;

  ASSIGN
    init(attribute1):= 0;
    -- 模拟不可变的自然现象
    next(attribute1):= 1;

    init(another_trigger):= on;

    init(change_attribute):= 0;
    next(change_attribute):= 
      case
        another_trigger = off:1;
        another_trigger = on:0;
        TRUE:change_attribute;
      esac;

    init(change_attribute_copy):= 0;
    next(change_attribute_copy):= 
      case
        -- 变化为非
        next(flag_onesate)=1:0;
        -- 安全的情况下让其等于原属性
        TRUE:next(change_attribute);
      esac;

    init(flag_onesate):= 0;
    next(flag_onesate):=
      case
        -- unsafe对应的相关属性
        next(attribute1)=1 & next(change_attribute)=1: 1;
        -- TRUE: 0
        TRUE:0;
      esac;

实验二

MODULE main
  VAR
    window.switch:{open, close, uncertain};
    window.switch_old:{open, close, uncertain};
    temperature:0..10;
    humidity:10..20;
    flag_open:0..1;
    flag_close:0..1;


  ASSIGN
    init(temperature) := 5;
    init(humidity) := 10;

    init(window.switch) := close;
    next(window.switch):=
      case
        next(flag_open)=1 & next(flag_close)=1:uncertain;
        temperature < 5: close;
        TRUE:window.switch;
      esac union
      case
        next(flag_open)=1 & next(flag_close)=1:uncertain;
        humidity > 15: open;
        TRUE:window.switch;
      esac;

    init(window.switch_old) := close;
    next(window.switch_old) := window.switch;

    init(flag_open) := 0;
    next(flag_open):=
      case
        humidity > 15: 1;
        TRUE:0;
      esac;

    init(flag_close) := 0;
    next(flag_close):=
      case
        temperature < 5: 1;
        TRUE:0;
      esac;

Unsafe State用于解决如何识别缺陷的问题。
第一类对应的识别语法为(next(相关属性) = 相关值)。

next(flag_onestate):=
  case
    -- unsafe对应的相关属性
    next(attribute1)=1 & next(change_attribute)=1: 1;
    -- TRUE: 0
    TRUE:0;
  esac;

第二类对应的识别语法为(flag_open和flag_close,若当前状态满足trigger则相应置为1,如果flag_open=flag_close,说明下一状态存在A.1)。

next(window.switch):=
  case
    next(flag_open)=1 & next(flag_close)=1:uncertain;
  esac;

next(flag_open):=
  case
    humidity > 60: 1;
    TRUE:0;
  esac;

next(flag_close):=
  case
    temperature < 20: 1;
    TRUE:0;
  esac;

第三类对应的识别语法为连续两个state出现属性变化且不同值(loop / 开了马上关)。


4.2.4 变化规则配置——只改变规则配置解决Trigger-Interference中的loop

规则1: when illuminance < 100 , turn on light
规则2: when illuminace > 500 , turn off light
只会在illuminace < 100时出现缺陷
正常的修复方式:
100 + turn on light(可能实际是500但误判为300,是错在这,这个要在原始信息里获取) + 400 - light预期值300

可能smv 581就算修复好了,如何获得600、700

1.将常量配置信息light > 500改为变量light > config_value,其初始值为配置值

2.往大于500的值变化,因为light > 500

3.config_value:
	  flag:变化
	  TRUE:不变

4.2.5 变化规则语义——只改变语义解决A.1

if 8:00 am while Temperature < 20℃ , close window
if 8:00 am while humidity > 60% , open window
正常的修复方式:
生成新规则 if 8:00 am while Temperature < 20℃ and humidity > 60% ,让用户选择open、close window
改变老规则,调整为 Temperature < 20℃ & humidity < 60%;humidity > 60% & Temperature > 20℃

可能的方式:
因为trigger在建模前要写入文件,且不能像配置随意变化,所以考虑提前准备语义模板
如该例中,温度和湿度的模板
temperature_copy在flag时生效,用于修复,原属性代表实际环境


实验一

attribute是自然属性
change_attribute 安全的情况下让其等于原属性,不安全的情况下让其变为其它值

MODULE main
  VAR
    attribute1:0..1;
    change_attribute:0..1;
    change_attribute_copy:0..1;
    another_trigger:{on, off};
    flag_onesate:0..1;

  ASSIGN
    init(attribute1):= 0;
    -- 模拟不可变的自然现象
    next(attribute1):= 1;

    init(another_trigger):= on;

    init(change_attribute):= 0;
    next(change_attribute):= 
      case
        another_trigger = off:1;
        another_trigger = on:0;
        TRUE:change_attribute;
      esac;

    init(change_attribute_copy):= 0;
    next(change_attribute_copy):= 
      case
        -- 变化为非
        next(flag_onesate)=1:0;
        -- 安全的情况下让其等于原属性
        TRUE:next(change_attribute);
      esac;

    init(flag_onesate):= 0;
    next(flag_onesate):=
      case
        -- unsafe对应的相关属性
        next(attribute1)=1 & next(change_attribute)=1: 1;
        -- TRUE: 0
        TRUE:0;
      esac;

实验二

MODULE main
  VAR
    window.switch:{open, close, uncertain};
    window.switch_old:{open, close, uncertain};
    temperature:0..10;
    humidity:10..20;
    flag_open:0..1;
    flag_close:0..1;


  ASSIGN
    init(temperature) := 5;
    init(humidity) := 10;

    init(window.switch) := close;
    next(window.switch):=
      case
        next(flag_open)=1 & next(flag_close)=1:uncertain;
        temperature < 5: close;
        TRUE:window.switch;
      esac union
      case
        next(flag_open)=1 & next(flag_close)=1:uncertain;
        humidity > 15: open;
        TRUE:window.switch;
      esac;

    init(window.switch_old) := close;
    next(window.switch_old) := window.switch;

    init(flag_open) := 0;
    next(flag_open):=
      case
        humidity > 15: 1;
        TRUE:0;
      esac;

    init(flag_close) := 0;
    next(flag_close):=
      case
        temperature < 5: 1;
        TRUE:0;
      esac;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 以下是一个简单的Python程序,用于绘制有限状态自动机状态转换图。该程序使用了Graphviz软件包,需要先安装该软件包。 ```python from graphviz import Digraph # 定义状态转换图 fsm = { ('q0', '0'): 'q0', ('q0', '1'): 'q1', ('q1', '0'): 'q0', ('q1', '1'): 'q2', ('q2', '0'): 'q3', ('q2', '1'): 'q2', ('q3', '0'): 'q3', ('q3', '1'): 'q2', } # 定义初始状态和接受状态 start_state = 'q0' accept_states = {'q2'} # 创建状态转换图对象 dot = Digraph() # 添加状态节点 for state in set([start_state] + list(accept_states) + [x[0] for x in fsm.keys()]): dot.node(state) # 添加状态转换边 for (start, symbol), end in fsm.items(): dot.edge(start, end, label=symbol) # 设置初始状态和接受状态的样式 dot.node(start_state, shape='doublecircle') for state in accept_states: dot.node(state, shape='doublecircle') # 输出状态转换图 dot.render('fsm', view=True) ``` 程序中的`fsm`变量定义了状态转换图,使用元组`(start_state, symbol): end_state`来表示从起始状态`start_state`通过输入符号`symbol`转移到结束状态`end_state`。`start_state`和`end_state`都是字符串类型的状态名称。 `start_state`变量定义了初始状态,`accept_states`变量定义了接受状态的集合。 程序使用Graphviz的`Digraph`类创建状态转换图对象。首先创建状态节点,然后添加状态转换边,最后设置初始状态和接受状态的样式。最终使用`render`方法将状态转换图输出到文件中,并调用`view`方法在默认浏览器中查看状态转换图。 注意,该程序中的状态转换图是硬编码的,如果需要绘制不同的状态转换图,需要修改`fsm`、`start_state`和`accept_states`变量。 ### 回答2: 有限自动机状态转换图显示程序是一种用于可视化表示有限自动机状态状态之间转换关系的软件程序。这个程序可以帮助用户更好地理解有限自动机的工作原理和状态转换规则。 这个程序的主要功能是通过绘制状态转换图,将有限自动机状态状态之间的转换关系可视化出来。用户可以通过图形界面直观地观察到有限自动机的各个状态以及它们之间的转换路径。 在这个程序中,用户可以输入有限自动机状态集合、转换函数和初始状态等相关信息。然后,程序会根据用户提供的信息自动生成状态转换图,并将其显示在图形界面上。 在状态转换图中,每个状态用一个节点表示,节点上标注有状态的名称。状态之间的转换关系用有向边表示,边上标注有触发该转换的输入符号。 通过这个程序,用户可以更加直观地了解有限自动机的工作机制,可以观察有限自动机在不同输入下状态之间的转换过程,从而更好地理解和分析有限自动机在不同情况下的行为。 总而言之,有限自动机状态转换图显示程序是一种用于可视化表示有限自动机状态状态之间转换关系的软件程序,它可以帮助用户更好地理解和分析有限自动机,提高问题建模和解决的效率。 ### 回答3: 有限自动机状态转换图显示程序是一种能够将有限自动机状态状态之间的转移关系以图形化的方式展示出来的软件程序。它通常由一系列节点和箭头组成,节点代表自动机的不同状态,箭头则表示不同状态之间的转移条件。 在这个程序中,用户可以通过简单的操作来创建并编辑有限自动机状态转换图。用户可以添加、删除或修改节点,设置节点的属性,例如状态名称和附加信息。用户还可以通过添加、删除或修改箭头来指定不同状态之间的转移条件,例如输入符号或条件语句。 此外,这个程序还可以提供一些额外的功能来帮助用户分析和理解有限自动机的行为。例如,它可以自动检测自动机的可达状态和回溯状态,帮助用户找出潜在的错误或漏洞。它还可以提供验证功能,用于验证用户定义的自动机是否满足特定的性质或规范。 除了基本的状态转换图显示功能,这个程序还可以支持导出和导入功能,使用户可以将自动机的定义保存为文件,并在需要时进行加载和使用。此外,它还可以提供打印和分享功能,方便用户与他人交流和分享自动机的定义和设计。 综上所述,有限自动机状态转换图显示程序是一种方便用户创建、编辑和分析有限自动机的软件工具,它通过图形化的方式展示自动机状态状态之间的转移关系,帮助用户更好地理解和设计有限自动机

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q1uTruth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值