更新:
再次感谢这些例子,他们非常有帮助,以下我并不是要从他们身上拿走任何东西.
就我理解它们和状态机而言,目前给出的例子不是我们通常理解的状态机的一半吗?
在某种意义上,示例确实改变了状态,但这只是通过改变变量的值来表示(并允许在不同的状态中允许不同的值变化),而通常状态机也应该改变它的行为,并且行为不是(仅)在根据状态允许变量的不同值更改的意义,但是允许针对不同状态执行不同方法.
或者我对状态机及其常见用途存在误解?
最好的祝福
原始问题:
我在c#中找到了关于状态机和迭代器块的讨论以及创建状态机的工具以及C#没有的东西,所以我发现了许多抽象的东西,但作为一个菜鸟,所有这些都有点令人困惑.
因此,如果有人可以提供一个C#源代码示例,它可以实现一个简单的状态机,可能有3,4个状态,只是为了得到它的要点.
我正在用混合C和C++制作一个小项目.我正在我的一个工作线程的核心构建一个小型状态机.
我想知道你是否会在SO上分享你的状态机设计技巧.
注意:我主要是经过久经考验的实施技术.
更新:基于SO上收集的所有重要输入,我已经确定了这个架构:
显然,boost包含两个独立的状态机库:Statechart和Meta State Machine(MSM).标语给出了非常相似的描述:
你知道两者之间的主要区别和选择考虑因素是什么?
我想知道您的具体问题 - SO读者 - 使用工作流程引擎解决了您使用的库和框架,如果您没有使用自己的库.我还想知道什么时候工作流引擎不是最佳选择以及是否/如何选择更简单的东西,比如使用状态机的TaskList/WorkList/Task-Management类型应用程序.
问题:
我正在寻找第一手经验.
我检查过的一些资源:
business-process-management state-machine task-management workflow-engine
有限状态机只是马尔可夫链的实现吗?两者有什么不同?
我只是想知道是否有人知道在互联网上开发状态机的一些很好的教程.还是电子书?
我开始在状态机上工作,只需要一些通用的东西让我开始.
我试图利用Akka的有限状态机框架来处理我的用例.我正在研究一个处理通过各种状态的请求的系统.
此处的请求是需要与其依赖的应用程序一起部署的应用程序名称:
Request for application A -> A is in a QUEUED state
Discover A's dependency B -> B is in a QUEUED state
B is being processed -> B is in a PROCESSING STATE
A is being processed -> A is in a PROCESSING STATE
B is processed -> B is in a DONE state
A is processed -> A is in a DONE state
Run Code Online (Sandbox Code Playgroud)
为此我在发现时初始化有限状态机.所以AFSM是在请求进入时创建的,当从其中一个actor发现B时,FSM被初始化B.
我是否初始化FSM实例并将其传递给所有actor,同时tellFSM是否正在对数据执行操作以使状态机进入正确的状态?
这是状态机的相关部分:
when(QUEUED, matchEvent(requestAccepted.class, MyApp.class, …Run Code Online (Sandbox Code Playgroud) 我需要匹配Web应用程序中的某些URL,即/123,456,789编写此正则表达式以匹配模式:
r'(\d+(,)?)+/$'
Run Code Online (Sandbox Code Playgroud)
我注意到它似乎没有评估,即使在测试模式几分钟后:
re.findall(r'(\d+(,)?)+/$', '12345121,223456,123123,3234,4523,523523')
Run Code Online (Sandbox Code Playgroud)
预期的结果是没有匹配.
但是,此表达式几乎立即执行(请注意尾部斜杠):
re.findall(r'(\d+(,)?)+/$', '12345121,223456,123123,3234,4523,523523/')
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?
在阅读一些关于递归神经网络的图灵完整性的论文时(例如:使用神经网络进行图灵可计算性,Hava T. Siegelmann和Eduardo D. Sontag,1991),我感觉到那里给出的证据并不是真的那样实际的.例如,参考文献需要神经网络,神经元活动必须具有无限精确性(可靠地表示任何有理数).其他证明需要无限大小的神经网络.显然,这并不是那么实用.
但是我开始怀疑现在是否真的有意义要求图灵的完整性.根据严格的定义,现在没有计算机系统是图灵完整的,因为它们都不能模拟无限的磁带.
有趣的是,如果编程语言规范完整或不完整,那么编程语言规范最常开放.这一切归结为问题,如果它们总是能够分配更多的内存,并且函数调用堆栈大小是无限的.大多数规范并没有真正指定这一点.当然,所有可用的实现都受到限制,因此编程语言的所有实际实现都不是图灵完整的.
所以,你可以说是所有计算机系统都和有限状态机一样强大而不是更多.
这让我想到了这样一个问题:图灵这个词完全有用吗?
回到神经网络:对于神经网络(包括我们自己的大脑)的任何实际实现,它们将无法表示无限数量的状态,即通过严格定义图灵完整性,它们不是图灵完整的.那么神经网络图灵完全是否有意义的问题呢?
他们是否像有限状态机一样强大的问题早已得到了回答(1954年由明斯基回答,答案当然是肯定的)并且似乎也更容易回答.即,至少在理论上,这已经证明它们和任何计算机一样强大.
其他一些问题更多的是我真正想知道的:
是否有任何理论术语可以说明计算机的计算能力?(鉴于其有限的存储空间)
你怎么能比较神经网络的实际实现与计算机的计算能力?(如上所述,图灵完整性没有用.)
finite-automata state-machine turing-complete neural-network
state-machine ×10
c ×2
c++ ×2
akka ×1
architecture ×1
boost ×1
boost-msm ×1
business-process-management ×1
c# ×1
c99 ×1
fsm ×1
java ×1
math ×1
performance ×1
python ×1
regex ×1
scala ×1
statistics ×1