Computer science 如何模拟非确定性有限换能器?

Computer science 如何模拟非确定性有限换能器?,computer-science,state-machine,automata-theory,transducer,Computer Science,State Machine,Automata Theory,Transducer,通过跟踪自动机所处的状态以及它在输入字符串中所处的距离,可以很容易地在输入字符串上模拟非确定性自动机。但是,如何才能模拟非确定性传感器(当然,传感器可以将输入符号转换为输出符号,并将字符串作为输出,而不仅仅是布尔值)?这似乎更复杂,因为我们需要以某种方式跟踪输出字符串,由于不确定性,输出字符串可能会很多。基本上与NFA相同,但这次不是返回true或false,而是将输出添加到输出集中。这里有一些伪代码: function rec(in, current_state, pos, out) if(

通过跟踪自动机所处的状态以及它在输入字符串中所处的距离,可以很容易地在输入字符串上模拟非确定性自动机。但是,如何才能模拟非确定性传感器(当然,传感器可以将输入符号转换为输出符号,并将字符串作为输出,而不仅仅是布尔值)?这似乎更复杂,因为我们需要以某种方式跟踪输出字符串,由于不确定性,输出字符串可能会很多。

基本上与NFA相同,但这次不是返回true或false,而是将输出添加到输出集中。这里有一些伪代码:

function rec(in, current_state, pos, out)
 if(current_state.isFinal && pos == in.length) out_set += out

 for(t <- lambda transition going out from current_state)
  rec(in, t.destination, pos, out + t.output_symbol)

 for(t <- transition going out from current_state for symbol in(pos)
  rec(in, t.destination, pos+1, out + t.output_symbol)
功能rec(输入、当前状态、位置、输出)
如果(当前_state.isFinal&&pos==in.length)out_set+=out

对于(t首先,一些理论。以下是不同的代数结构:

  • 发电机(过渡系统)

  • 接受者(自动机)

  • 传感器(机器)

括号中的术语在文献中很常见,可惜它们经常被错误地使用。这些代数结构彼此非常相似,并且可以通过许多小的变化从一个转换到另一个或混合。但这不应该转移注意力,因为它们是根本不同的:

  • 生成器是一种语言的构造性表示,即一组(有限或无限)单词。您可以不确定地遍历生成器,并在此过程中生成该语言中的所有单词

  • 接受者同样是定义一组词(语言)的结构,但每个词都代表所有可能的词(有限或无限)的指示符函数。因此,它们将每个词映射为布尔值(可以适当地扩展到有限或无限输出字,以便与传感器进行比较——尽管存在明显的代数差异)

  • 传感器表示将每个允许的有限输入字映射到有限输出字的函数

在有限语言的上下文中,接受器和转换器之间的区别变得不那么明显,因为接受器可以接受或不接受任何有限字,而不管其长度如何,因此它为每个这样的字生成一个输出字。通过接受器的布尔输出的链接,可以为每个字创建一个有限的输出字有限输入字(即,通过连接给定输入字的每个前缀的输出)。这种连接两个概念的尝试,虽然在机械上是正确的,但却扭曲了所涉及的概念

在无限词语言的上下文中,区别更为明显。一个给定(无限)输入词的有限前缀不能产生输出。这个限制是在整个(无限)输入词上定义无限词接受的结果因此,接受者将每个输入字映射为布尔值,或输出字(如果首选这种观点)。相反,转换器(机器)将任何输入字的每个有限前缀映射为长度相等的有限输出字。因此,它们被称为顺序机,因为它们会一步一步地反应

有两种不同类型的传感器:

Moore机器可以用Mealy机器表示。并非所有Mealy机器都可以用Moore机器表示。文献在定义和比较这两种类型的传感器时通常是错误的,有关正确的定义,请参考原始出版物

因此,这两个定义都是确定性的。对确定性的限制有一个原因:传感器用于控制系统,因此我们想确定下一个控制动作应该是什么。这导致确定性传感器成为文献中的标准

然而,非确定性传感器也可能有用,例如,作为多个策略的紧凑表示。然而,当它们被执行时,只遵循一条路径并产生一个输出字是有意义的,而不是同时产生多个输出字(如执行期间产生的非确定性接收器的副本)

因此,很明显,传感器的非确定性模拟不符合其预期用途。它代表了一组替代策略(如果在每次播放过程中没有以固定方式确定,也可以混合使用)


所以实际上,你必须创建一个(不断扩展的)可能输出单词的树,这个树很快就会爆炸。这个树本质上是生成器(转换系统)的展开你可以从传感器的输入注释中去掉它。

这肯定更复杂。我不确定有没有比从起始节点简单地进行深度优先搜索更好的方法。我的意思是,你可以定义一个传感器,其中每个路径都是有效的,并产生唯一的输出…所以你需要在最坏的情况下遍历它们我不明白,你能详细解释一下吗?