抽象的艺术 - 状态机

简介: 道林.格雷 : "你喜欢什么类型的音乐 What sort of music would you like?" 温妮莎·艾芙斯 : "看这一刻我想成为什么样的人 Meaning who do I want to be at this moment." ## FSM 有限状态机 Finite State Machine,又称有限状态自动机Finite State Automaton,又

道林.格雷 : "你喜欢什么类型的音乐 What sort of music would you like?"

温妮莎·艾芙斯 : "看这一刻我想成为什么样的人 Meaning who do I want to be at this moment."

FSM

有限状态机 Finite State Machine,又称有限状态自动机Finite State Automaton,又称有限自动机Finite Automaton,简称状态机 State Machine。简单的讲,状态机描述的是:有限个状态以及状态迁移过程中条件、事件、动作之间关系的一种数学模型。状态机可以分为很多种类型:

  • Acceptors and recognizers

    • 原理:产生一个二元输出,说要么“是”要么“否”来回答输入是否被机器接受。所有FSM的状态被称为要么接受要么不接受。在所有输入都被处理了的时候,如果当前状态是接受状态,输入被接受,否则被拒绝。
    • 606px-Fsm_parsing_word_nice.svg.png
  • Classifiers

    • 原理:和Acceptor类似,但是有超过二元以上的输出。
  • Transducers

    • 原理:基于输入的动作和状态决定下一个状态。
    • Fsm_Moore_model_door_control.svg.png
  • Others

状态机的应用范围很广:分布式数据一致性(Paxos,Raft)、Akka框架、神经网络的动态模型、语言识别器。

业务开发中用得比较多的是Transducer模式,用来管理事件和状态之间的迁移关系,与业务代码解耦合。

Mathematical model

Transducer的数学模型是一个六元组 :screenshot.png

  • screenshot.png 是输入字母表(符号的非空有限集合)。
  • screenshot.png 是输出字母表(符号的非空有限集合)。
  • S 是状态的非空有限集合。
  • s0 是初始状态,它是S的元素。在非确定有限状态自动机中,是初始状态的集合。
  • screenshot.png 是状态转移函数: screenshot.png
  • screenshot.png 是输出函数。

Code

使用Python编写一个简单的FSM框架(Python用得还不太6,看官请见谅)。

State

class State(object):
    def __init__(self, name):
        if name is None:
            raise RuntimeError('State name is none')
        self.name = name

Event

class Event(object):
    def __init__(self, name):
        self.name = name
        self.transitions = []

    def add_transition(self, transition):
        self.transitions.append(transition)

    def get_transition(self, state):
        for transition in self.transitions:
            if transition.sourceState.name == state.name:
                return transition

Transition

class Transition(object):
    def __init__(self, sourceState, targetState, event):
        self.sourceState = sourceState
        self.targetState = targetState
        self.event = event

Machine

class Machine(object):
    def __init__(self, name, initialState, transitions):
        self.name = name
        self.initialState = initialState
        self.currentState = initialState
        self.transitions = transitions
        self.states = []
        self.init_states()
        self.events = []
        self.init_events()

    def init_states(self):
        for transition in self.transitions:
            self.states.append(transition.sourceState)
            self.states.append(transition.targetState)

    def init_events(self):
        for transition in self.transitions:
            event = transition.event
            event.add_transition(transition)
            self.events.append(event)
            logger.info("event: %s", event.name)

    def get_event(self, name):
        for event in self.events:
            if event.name == name:
                return event

    def transit(self, event):
        cevent = self.get_event(event)
        transition = cevent.get_transition(self.currentState)
        self.currentState = transition.targetState
        print ("transit from %s to %s on %s " % (
            transition.sourceState.name, transition.targetState.name, transition.event.name))


if __name__ == "__main__":
    t1 = Transition(State('CLOSED'), State('OPENED'), Event('open'))
    t2 = Transition(State('OPENED'), State('HEATED'), Event('heat'))
    t3 = Transition(State('HEATED'), State('CLOSED'), Event('cool'))
    transitions = []
    transitions.append(t1)
    transitions.append(t2)
    transitions.append(t3)
    machine = Machine('Coffee Machine No.1', State('CLOSED'), transitions)
    machine.transit('open')
    machine.transit('heat')
    machine.transit('cool')

Penny Dreadful - S01E06

你喜欢什么类型的音乐 What sort of music would you like?

看这一刻我想成为什么样的人 Meaning who do I want to be at this moment.

道林.格雷,你想成为什么样的人 Dorian Gray,who do you want to be?

我自己,不受限制的自己 Myself,without limits.

那就放舞曲吧 Then put on music for dancing.

你还真是异常的冷靜 You have exceptional composure.

是吗 Do I?

我是说,镇静 Poise, I mean.

自制力 Control.

对 Yes.

如果没了自制力,你会怎样 What if you were to abandon it?

不可能的 I couldn't.

为什么 Why?

我们内心总有一些东西不会被释放出来 There are things within us all that can never be unleashed.

如果释放了会怎样 And what would happen if they were?

他们会吞噬我们 They would consume us.

我们将不复存在,不受控制的自我会取而代之 We would cease to be and another would exist in our place, without control.

无法无天 Without limits.

目录
相关文章
|
1天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
5天前
|
Kubernetes 算法 Go
Kubeflow-Katib-架构学习指南
本指南带你深入 Kubeflow 核心组件 Katib,一个 Kubernetes 原生的自动化机器学习系统。从架构解析、代码结构到技能清单与学习路径,助你由浅入深掌握超参数调优与神经架构搜索,实现从使用到贡献的进阶之旅。
277 139
|
5天前
|
人工智能 中间件 API
AutoGen for .NET - 架构学习指南
《AutoGen for .NET 架构学习指南》系统解析微软多智能体框架,涵盖新旧双架构、核心设计、技术栈与实战路径,助你从入门到精通,构建分布式AI协同系统。
294 142
|
16天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
11天前
|
缓存 并行计算 PyTorch
144_推理时延优化:Profiling与瓶颈分析 - 使用PyTorch Profiler诊断推理延迟,优化矩阵运算的独特瓶颈
在2025年的大模型时代,推理时延优化已经成为部署LLM服务的关键挑战之一。随着模型规模的不断扩大(从数亿参数到数千亿甚至万亿参数),即使在最先进的硬件上,推理延迟也常常成为用户体验和系统吞吐量的主要瓶颈。
357 147
|
5天前
|
人工智能 移动开发 自然语言处理
阿里云百炼产品月刊【2025年9月】
本月通义千问模型大升级,新增多模态、语音、视频生成等高性能模型,支持图文理解、端到端视频生成。官网改版上线全新体验中心,推出高代码应用与智能体多模态知识融合,RAG能力增强,助力企业高效部署AI应用。
294 1
|
11天前
|
机器学习/深度学习 存储 缓存
92_自我反思提示:输出迭代优化
在大型语言模型(LLM)应用日益普及的今天,如何持续提升模型输出质量成为了业界关注的核心问题。传统的提示工程方法往往依赖一次性输入输出,难以应对复杂任务中的多轮优化需求。2025年,自我反思提示技术(Self-Reflection Prompting)作为提示工程的前沿方向,正在改变我们与LLM交互的方式。这项技术通过模拟人类的自我反思认知过程,让模型能够对自身输出进行评估、反馈和优化,从而实现输出质量的持续提升。
429 136
|
15天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
414 135
|
14天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
543 133
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话