精华内容
下载资源
问答
  • 建立了基于特定需求函数的 Bertrand 双寡头垄断模型,分析了垄断市场下生产同质产品的企业竞争现象。应用有限理性法和不完全信息法实现了竞争模型由静态到动态的转化过程。进一步求解了动态模型的价格均衡解,并分析了...
  • 在不完全信息条件下,讨论两企业对具有一定替代性的两种产品的动态Cournot-Bertrand二维博弈模型及其均衡,证明了两企业对这两种产品联合博弈的策略优于对每一种产品单独博弈的策略,同时说明两企业关于不存在替代性...
  • 提出了一个主从的Cournot-Bertrand 双寡头混合博弈模型援寡头都是在有限理性期望下进行的博弈,并且上级寡头考虑产量,下级寡头考虑价格援分析了该模型的纳什均衡点和它的局部稳定性援通过数值模拟,利用稳定域图、分岔...
  • 设计了一个具有供应商和两个零售商组成的Bertrand双寡头价格博弈的主从闭环供应链系统,给出了分散和集中两种模式下批发价、零售价、回收价以及各方利润的具体表达式并进行了比较,研究了供应链整体利润与产品和废弃品...
  • 基于以价格作为决策变量的Bertrand模型,建立多寡头煤炭企业动态重复博弈模型,对其不同目标策略下动态博弈过程进行了研究,分析了煤炭企业间竞争策略行为对煤炭价格的影响,提出了煤炭企业及行业发展的策略建议。
  • 基于最小二乘法并结合微分几何理论,针对斜航式法向圆弧锥齿轮的特点,提出了一种适合...导出了被测齿廓与设计齿廓的联系,建立了Bertrand齿廓面的回归处理模型。仿真结果表明,该模型具有理论的正确性与实际可行性。
  • 为了研究当零售商间存在竞争时的供应链信息共享价值,基于单供应商、两零售商的两层供应链中成本信息共享的模型,研究了两个零售商间存在Bertrand竞争时,零售商与供应商间的成本信息共享价值问题,分别讨论了两个...
  • 为研究下游企业间存在Bertrand价格竞争时的供应链信息纵向共享激励及其对供应链整体绩效的影响,利用总体均值后验统计推断,建立了由1个上游供应商和n(≥2)个具有私有需求信息的下游制造商构成的两级供应链信息...
  • 为了解决频谱分配中的授权用户定价博弈问题,根据博弈论中的Bertrand 均衡理论,提出了基于Bertrand模型的授权用户信道价格竞争的动态博弈算法。分析了稳定的纳什均衡解与速率调整参数的关系,用控制理论中阶跃函数...
  • 不同于Cournot模型描述的产量竞争和Bertrand模型描述的价格竞争,供应函数均衡模型更适合描述电力市场中竞标函数竞争行为.当电力市场需求函数表示为市场价格与有界随机需求冲击的非线性函数时,每个发电商在其发电...
  • 为了定量研究电力零售市场中用户在零售商间的切换行为对零售商竞价策略的影响,基于Bertrand竞争模型建立电力零售商参与零售市场竞价交易的博弈模型,其中引入市场份额函数反映用户切换行为;从理论上证明该模型纳什...
  • 了解一些基本SOA术语。本文是本系列的第2部分,Bertrand Portier将在其中定义一些术语(包括开发流程、模型和资产)并说明为何这些是SOA成功的基础。作者还将介绍此领域的一些主要标准。  引言  在任何领...

      了解一些基本SOA术语。本文是本系列的第2部分,Bertrand Portier将在其中定义一些术语(包括开发流程、模型和资产)并说明为何这些是SOA成功的基础。作者还将介绍此领域的一些主要标准。

      引言

      在任何领域中,语义都非常重要,而在面向服务的体系结构(Service-oriented architecture,SOA)中更是如此。由于SOA涉及多个团队和组织,因此就相关术语达成一致至关重要。本系列将带着您开始SOA之旅,为您定义基础术语和主要概念。您将了解SOA领域中所使用的各个词汇。对于每个术语,将说明其为何对SOA重要、其在这种情况下的含义、相关的标准有哪些以及与其他术语的区别如何。

      本系列的第1部分确定了业务焦点,并通过定义服务 和SOA等术语为后续部分打好了基础。本文将介绍成功SOA采用所必需的软件工程方法和流程,还说明交付SOA解决方案所需的构件(如模型和资产)。

      开发流程和方法

      成功的软件开发需要以下因素:

      ·需要得到理解和遵循的原则。
      ·进行了正式说明的基于经过验证的最佳实践的方法和技术。
      ·可以进行定制的流程。

      方法内容

      方法内容 描述需要生成什么内容、如何执行相关工作以及由谁执行。

      方法内容构件包括:

      ·角色:定义技能和工作产品职责。软件架构师 就是角色的一个例子。

      ·工作产品:任务的结果,可以为交付内容,也可以不是交付内容。服务模型 就是工作产品的一个例子。

      ·任务:特定角色执行的步骤序列。任务使用输入工作产品来生成或修改输出工作产品。标识服务 就是任务的一个例子。

      ·指南:文档说明。术语表、模板、示例 和工具使用指导信息 都是指南。

      流程

      流程 用于将方法内容组织到开发周期中,并指定要完成的工作的顺序。要完成的工作的顺序独立于开发生命周期模型(如瀑布式或迭代)。可以将流程视为工作流或分解结构。通过流程,项目经理可以确定在项目的每个阶段需要哪些人员以及修改了哪些工作产品。如果熟悉Rational Unified Process (RUP),则可以将RUP规程(如分析与设计实现)视为方法内容,而将RUP阶段(如细化和构造)视为流程元素。

      务必将方法和流程这两个概念加以区分,并提供框架来支持分别对其进行修改。

      Rational Method Composer

      IBM Rational Method Composer(RMC)是基于Eclipse的方法与流程创作平台,用于集成、定制、代码化和发布流程。使用方便而且功能强大的RMC提供了一组流程,可以方便地加以使用或自定义,如Rational Unified Process(RUP)。负责维护流程的项目经理、项目管理者以及程序管理员通常会使用RMC,该工具可为本部分所描述的概念提供支持。

      RMC中进行的工作的输出是作为HTML发布的流程(通常采用网站的形式)。希望遵循该流程的组织可以随后使用此流程站点。

      软件流程工程元模型

      本部分将讨论开发流程。软件流程工程元模型(Software Process Engineering Metamodel,SPEM)是正式描述软件开发流程的的标准规范。作为Object Management Group(OMG)标准,SPEM是独立于供应商、方法和框架的。1.1版于2005年1月正式发布,而包含重大更新的2.0版目前正在制订中。

      Rational Unified Process

      Rational Unified Process(RUP)基于全球数千项目所采用的最佳实践,是能够针对具体项目进行方便定制的软件开发流程。RUP包括有关优先级权衡、迭代开发、可视建模、软件质量和团队协作的主要原则。RUP定义规程(方法内容)和阶段(流程),如图1中所示。

    14780828_200807231304081.jpg

      图1. Rational Unified Process (RUP)
     
      Rational Unified Process for Service-Oriented Modeling and Architecture

    Rational Unified Process for Service-Oriented Modeling and Architecture(RUP Plug-In for SOMA)构建于RUP之上,可提供有关开发面向服务的解决方案的指导。2.4版(请参见参考资料)提供了组合之前RUP for SOA内容和IBM Global Business Services(GBS)SOMA方法的统一方法。RUP Plug-In for SOMA为软件架构师和设计人员提供了有关面向服务的体系结构的分析、体系结构和设计的具体指导信息。

      提供了专用统一建模语言(Unified Modeling Language,UML)概要,用于建模领域特定的解决方案(包括SOA),并随之提供了紧密相关的专用流程。例如,有支持RUP Plug-In for SOMA的UML 2.0 profile for Software Services。

      注意:将在本系列的后续文章中讨论与管理相关的流程。

      IBM技术

      如本系列的第1部分中所述,组件业务建模(Component Business Modeling,CBM)可帮助组织对策略、技术、操作和投资一致性形成大量新的认识。CBM支持对形成差别的业务组件进行标识,还支持对业务流程进行分析。

      面向服务的建模与体系结构(Service-Oriented Modeling and Architecture,SOMA)提供了有关SOA解决方案的分析和设计的指导信息。SOMA支持对与业务保持一致的服务进行标识、规范化和执行(在设计层)。将在稍后详细讨论此主题。

      模型、UML、资产与模式

      元数据

      元数据即关于数据的数据。例如,关于所录制的歌曲的元数据可能包括关于演唱者、专辑、作曲、长度或质量的信息,而数据则是音频记录本身。

      根据上下文不同,相同的数据可能为实际数据,也可能为元数据。以前面讨论的开发方法和流程为例。在RMC中修改开发方法时,定义要类型化的内容(由元数据提供支持)。例如,可能会定义工作产品、任务和角色的新实例。在此级别,工作产品、任务和角色是元数据元素,元数据还定义这些类型(角色执行的任务)之间的关系。现在考虑设计人员定义有关方法的概念时的情况。假定他们在使用UML建模工作产品、角色和任务的概念。在此级别,工作产品、任务和角色是实际的数据,而UML是元数据。将稍后在RMC中将此数据作为元数据使用。这样看来,可以将UML视为元-元数据!

      模型

      RUP将模型定义为系统的抽象表示或模拟,可从特定的角度提供对系统的完整描述。模型经常用于更好地了解系统如何工作,或用于记录实际实现的设计决策。模型经常由多个不同类型的部分组成。这些部分作为模型元素进行归类。

      模型的目标受众是能够理解这些模型的人群。例如,系统分析人员和设计人员创建和使用分析模型,数据库设计人员设计和查看数据模型。模型可以基于文本和/或图形。由于建模是在保持严密性和完整性的情况下减少复杂性(如在较高的抽象级别进行描述),因此最好使用丰富的图形设计符号,例如在RUM中描述为可视建模 的统一建模语言(UML)。模型位于特定的抽象级别,可以将其转换到更低的级别抽象。例如,分析模型通常会转换为设计模型。

      在本系列的第1部分中,我们说明了协作SOA更为重要。例如,您的公司可能会将详细设计或实现外包给其他公司。进行建模时,请牢记要将建模结果提供给其他人使用。另外,您的SOA设计和开发平台也应该能够接受模型,并将其转换为其他模型。

      自动化与转换

      SOA设计与开发平台应该允许进行模型的半自动化转换,从而从高抽象级别转换到低抽象级别,最终转换为代码。例如,UML-to-Java转换能从UML类关系图生成Java代码。

      基础框架还应该考虑可跟踪性,该功能实际上就是回溯到较高的抽象级别。例如,假定您希望了解需求中的变更对您的设计的影响。应该能够通过在进行设计决策来支持特定需求时添加的链接(轨迹),以确定在设计中对此需求进行了何种处理。然后,在影响分析期间,应该能够看到所有与该特定需求相关的设计决策(通过轨迹或链接),应该了解此需求中的更改对您的设计的影响。

      元模型 是关于模型的模型。这是特定领域的模型,定义概念并提供用于创建该领域中的模型的构建元素。例如,可以将SPEM视为流程工程元模型。

      Eclipse Modeling Framework

      作为开源Eclipse项目,Eclipse Modeling Framework(EMF)包括了一个模型元模型(建模领域的元模型)。以下是EMF网站上提供的定义:

      “EMF是用于基于结构化数据模型构建工具和其他应用程序的建模框架和代码生成工具。通过采用XML元数据交换(XML Metadata Interchange,XMI)格式描述的模型规范,EMF提供了工具和运行时支持,从而为模型生成一组Java类;这包括一组适配器类(支持查看模型和基于命令对模型进行编辑)和一个基本编辑器。

      核心EMF框架包括用于描述模型的元模型(Ecore),并为模型提供运行时支持,包括更改通知、采用缺省XMI序列化的保存支持以及用于对EMF对象进行常规操作的非常高效的反射应用程序编程接口(Application Programming Interface,API)。”

      统一建模语言(UML)

      “统一建模语言(UML)是行业标准语言,用于指定、可视化、构造和记录软件系统的构件。它简化了软件设计的复杂流程,为构造创建“蓝图”。”来源:Object Management Group (OMG)

      UML的好处在于其具有广泛的行业支持。该规范最初于1997年提交给OMG,拥有很多供应商的设计与开发环境的全面支持,如IBM Rational Software Modeler(RSM)或IBM Rational Software Architect (RSA)。

      作为OMG标准,该规范的当前正式版本为2.1.1。其中定义了13组概念 和归入两个类别的关系图类型:

      ·结构;类、对象、组件、组合结构、包、部署
      ·行为:用例、活动、状态机、序列、通信、计时、交互概述

      UML是一种通用建模语言,其主要优势之一是能够使用UML概要针对领域特定的建模工作进行扩展。

    UML概要

      UML概要为独立于领域的UML提供了简单的扩展机制。概要支持定义领域特定的实体和规则。UML概要能很好地与开发流程一起使用。例如UML Profile for Business Modeling支持Rational Unified Process (RUP) for Business Modeling Plug-In。

      概要主要由构造型组成。构造型定义哪个UML类(元类)与其关联、该类上的属性以及有关构造型元素如何与其他元素关联的约束。例如,在UML 2.0 Profile for Software Services中,Service Specification构造型扩展Interface UML元类。它定义名为published的属性来指示服务规范是否已发布到服务注册中心。最后,其约束之一是,所有Service Specification操作都应该标记为public。

      UML 2.0 Profile for Software Services

      UML 2.0 Profile for Software Services是“允许对服务、面向服务的体系结构(SOA)和面向服务的解决方案进行建模的UML概要。该概要(有时候称为服务概要)已经在IBM Rational Software Architect(RSA)中实现,已成功在制定复杂客户场景的模型方面得到了应用,可用于帮助传递有关与开发面向服务的解决方案相关的注意事项。”

      该概要定义Message、Service Specification或Service之类的构造型。它还为这些概念提供可方便区分的图形符号。图2显示了UML关系图的一个示例:保险领域的消息设计模型(在 IBM Rational Software Architect 中)。它将使用服务概要中的Message构造型表示为类关系图(一种结构关系图)。

    14780828_200807231313451.jpg

     

      图2. UML类关系图
     
      模型驱动的体系结构

      模型驱动的体系结构(Model-Driven Architecture,MDA)为业务和技术提供独立的模型,能满足业务和技术不断更改的情况下的需要。以下是摘自OMG MDA用户指南的定义:

      “OMG的MDA是一种在软件开发中使用模型的独立于供应商的方法。MDA提供了相应的方法,支持提供用于以下方面的工具:

      ·指定独立于为其提供支持的平台的系统
      ·指定平台
      ·为系统选择特定的平台
      ·将系统规范转换为针对特定平台的规范

      MDA的主要目标是通过从关注点的体系结构分离来实现可移植性、互操作性和可重用性。”

      MDA的核心是系统(现有或以后的系统)、平台(提供J2EE或Web服务等功能)和视角(关注特定概念的抽象概念)之类的概念。

      MDA定义以下模型:

      ·计算独立模型(Computation-Independent Model,CIM):用于定义功能的需求的领域模型。
      ·平台独立模型(Platform-Independent Model,PIM):独立于可以采用其进行构建的技术的业务功能和行为模型。
      ·平台特定模型(Platform-Specific Model,PSM):将PIM的规范与特定类型的平台的使用方式进行组合。

      MDA定义了转换,以将系统的模型转换为同一个系统的另一个模型(如从PIM到PSM)。将一个模型转换为另一个模型的方法使用映射进行说明。

      MDA的主要目标之一是允许提供设计及为其提供支持的开发工具

      模型驱动的开发

      本部分目前所介绍的内容(即模型和转换)形成了模型驱动的开发(Model-Driven Development,MDD)的基础,该方法有时候也称为模型驱动的软件开发(Model-Driven Software Development,MDSD),是采用MDA作为说明标准的软件工程方法。模型驱动的开发(MDD)是基于模型和转换的软件开发方法。MDD支持采用半自动化方式生成代码,可使用一组模型到模型转换以及模型到代码转换从高级业务分析模型生成代码。此功能以一组模型的定义、模型实例的完整性和转换中使用的不同模型间的元素的映射作为后盾。另外,MDD支持对变更的影响进行分析。

      IBM Rational Software Delivery Platform(SDP)支持使用MDD(或其他方法,如业务驱动的开发)方法进行端到端企业解决方案的团队开发。"业务驱动的开发(Business-Driven Development,BDD)是一种基于角色的集成软件开发方法,能使业务和IT保持一致,可大幅度提高业务的性能。“BDD也使用模型,关注的是业务和IT模型在整个SOA生命周期中的协作”(请参见本系列的第1部分)。IBM BDD方法通过IBM Software Delivery Platform支持各种角色,如业务分析人员、IT架构师、J2EE开发人员或集成开发人员。

      请参见参考资料中提供的IBM Systems Journal文章的链接,IBM思想领袖(thought leader)在其中深入地讨论了模型驱动的软件开发方法。

    资产

      资产和模式是SOA成功的关键,因为这二者为进行重用提供支持。事实上,采用基于资产的业务模型的企业可获得巨大的增长能力。此类企业不再像传统的基于人力的业务模型中那样受到其员工的效率或数量的限制。恰当使用资产可以对软件投资带来巨大的变化。不过,采用此模型的任何人都会告诉您,这并不简单,需要恰当的治理和基础设施支持。

      对SOA而言,创造性可能会对效率造成影响。让架构师、设计人员和开发人员完全从头进行每个新项目是我们所不希望的。类似的需求应该能够得到一致的体系结构和设计。资产和模式允许恰当的创造性,使您能够在可能的情况下重用经过验证的解决方案,然后将您的时间和精力集中在需要全新开发的内容上,如特定于该项目的业务逻辑等。

      资产是提供上下文中问题的解决方案的构件集合。在此上下文中,构件可以为任意内容,如需求、设计模型、实现代码或测试用例等。可以将构件视为文件系统上的文件。对其成功至关重要的是,资产包括有关如何使用、自定义和扩展资产的说明。有关资产的构成要素的更多信息,请参见可重用资产规范。

      模式

      模式是对给定上下文中重复出现的问题的解决方案。模式是一种特定类型的可重用资产。可以对模式的规范(问题、上下文、各个因素和解决方案的说明)与实现(如Java Bean)加以区分。单个模式规范可以有很多个实现。

      根据其应用到的开发过程的阶段不同,模式可归入不同的类别。例如,IBM电子商务模式将模式分为以下几类:业务、集成、组合、应用程序和运行时。Gang of Four(GoF)设计模式也非常有名。

      使用模式时,可以确保所提供或代码化的解决方案是正确、有用的,而且经过了验证。不过,和任意可重用资产一样,只有在给出了说明何时、为何以及如何使用模式的上下文和方法时,才可以加以采用。存在很多模式,而上下文是开始使用的必要条件。例如,电子商务的模式以流程的形式提供(基于技能和环境),可帮助您标识处理您的业务问题的相关模式。

      最后,模式的目标之一是提供一致性,以便最终能因为在设计中使用了模式而基于相同的一组需求得到相同的体系结构。

      可重用资产规范

      可重用资产规范(Reusable Asset Specification,RAS)于2005年开始采用,是用于描述可重用软件资产的结构、内容和说明的OMG标准。RAS的目标是提供有关如何以一致的标准方式打包资产的最佳实践。按照规范中的定义,RAS资产的核心特征包括:

      ·分类:资产相关的上下文。
      ·解决方案:资产中包含的构件。
      ·用法:有关安装、使用和自定义资产的规则。
      ·相关资产:此资产如何与其他资产相关。

      构件的类型可以由其文件名后缀决定,如.xml、.txt、.doc或.java;也可以由其用途决定,如用例模型或分析模型。由于软件资产 是较为宽泛的术语,RAS还提供了用于描述特定资产类型的概要。此概念与UML概要相同。可以使用UML概要来扩展独立于领域的UML。类似地,可以采用领域特定(如Web服务)的RAS概要来扩展独立于领域的RAS。

      RAS资产的文件扩展名为.ras,打包为.zip文件,这意味着其中包含一个清单,可以使用WinZip将其打开。图3摘自RAS规范,说明了核心RAS资产的主要部分。

    20080721165149490.gif

      图3. 核心RAS资产的主要部分
     
      结束语

      本文定义了有关软件工程流程和方法的术语。定义了用于构建SOA解决方案的软件构件,如模型、资产和模式等。另外还介绍了主要的标准,如SPEM、UML和RAS。

    fj.png1.jpg

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14780828/viewspace-407060/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/14780828/viewspace-407060/

    展开全文
  • 古诺模型复习 在古诺模型中,多少如我们所预料的,事情很自然的处于极端情况之间,即行业产量在某种程度上是介于在垄断和完全...但是在另外一种情况下能够得到一种完全拨通的模型 --伯川德竞争(Bertrand compet...

    古诺模型复习

    在古诺模型中,多少如我们所预料的,事情很自然的处于极端情况之间,即行业产量在某种程度上是介于在垄断和完全竞争两种情况之间的。它比在垄断下的价格低,比在完全竞争下的价格高;行业利润比垄断下的利润低,比完全竞争时的利润高。如果想要得到不完全竞争的局面,他么他就在垄断与完全竞争之间。
    但是在另外一种情况下能够得到一种完全拨通的模型 -- 伯川德竞争(Bertrand competition)

    伯川德模型的饮料案例

    同样是卖饮料,但是这次的的策略是每单位商品的价格p,
    我们设:
        有两个参与者1和2,他们分别卖可口可乐和百事可乐。
        参与者i的出价策略为pi,i=1,2。
        编辑成本为c。
        对于参与者1,对于不同的出价p1,对应的销量q1为:
            当p1<p2,q1=1-p1
            当p1>p2,q1=0
            当p1=p2,q1=(1-p1)/2

    这种情况下p1=p2=c为纳什均衡。
    如果参与者1选择某个大于c的价格p1=c+3*ε,参与者2就会选择一个较小的价格,如p2c+2*ε,从而迫使价格趋向于两者都为编辑价格c,达到纳什均衡。

    选民投票

    n个人的政治立场平均分布在一条直线上,其中越左边的人的政治立场月偏向于左翼,越右边的人的政治立场月偏向于右翼。他们可以选择竞选总统或者作为选民。如果他们作为选民,那么他们的选票将会投给离他自己政治立场最近的一个参选者。如果有位置一样的则平分。
    举个例子,如果现在在x位置有一个人
        如果x位置的人参选并且获胜,他将得到收益b-c(这里假设b=2*c,c是竞选的成本)     如果x位置的人参选y位置的人获胜,他将得到收益-c-|x-y|     若果x位置的人没有竞选总统,而离他最近的y位置的人赢得了竞选,他将得到的收益为-|x-y|

    假设n为奇数,如果现在每个位置平均只有一个人,那么:
    	只有中间那一个人竞选是纳什均衡,因为当他竞选时不管是他左边有个人想站出来竞选还是他右边有个人想站出来竞选都不会成功。
    	当一开始在中间那个人的左边和右边同时站出来两个人是纳什均衡,因为这个时候有任何一个人站出来都不能竞选成功。
    	当两个人一个在最左侧一个在最右侧的时候不是最佳策略,因为这个时候在中间有任何一个人站出来竞选都会获得所有选民的一半选票。
    如果现在每个位置平均分配两个人,那么:
    	中间位置的两个人同时站起来不是纳什均衡,因为当他们旁边如右侧有一个人站起来时,这个人将获得他右侧所有人的选票,而这两个在同一位置的人将平分左侧的选票。

    转载于:https://www.cnblogs.com/junealan/p/4364656.html

    展开全文
  • LSTM生成文本模型将模仿诗人Bertrand Russell的写作风格。 同样,考虑到计算能力和运行时效率,LSTM将逐个字符地学习而不是在已发表文章中逐个单词地学习。 所使用的书籍是《神秘主义和逻辑学》(MLOE),《精神分析...
  • 级别: 初级Bertrand Portier (bportier@ca.ibm.com), IT ...本文是本系列的第 2 部分,Bertrand Portier 将在其中定义一些术语(包括开发流程、模型和资产)并说明为何这些是 SOA 成功的基础。作者还将介绍此领域的一

    级别: 初级

    Bertrand Portier (bportier@ca.ibm.com), IT 架构师, IBM, Intel, Microsoft,HP

    2007 年 5 月 23 日

    了解一些基本 SOA 术语。本文是本系列的第 2 部分,Bertrand Portier 将在其中定义一些术语(包括开发流程、模型和资产)并说明为何这些是 SOA 成功的基础。作者还将介绍此领域的一些主要标准。

    引言

    在 任何领域中,语义都非常重要,而在面向服务的体系结构(Service-oriented architecture,SOA)中更是如此。由于 SOA 涉及多个团队和组织,因此就相关术语达成一致至关重要。本系列将带着您开始 SOA 之旅,为您定义基础术语和主要概念。您将了解 SOA 领域中所使用的各个词汇。对于每个术语,将说明其为何对 SOA 重要、其在这种情况下的含义、相关的标准有哪些以及与其他术语的区别如何。

    本系列的第 1 部分确定了业务焦点,并通过定义服务SOA 等术语为后续部分打好了基础。本文将介绍成功 SOA 采用所必需的软件工程方法和流程,还说明交付 SOA 解决方案所需的构件(如模型和资产)。

    开发流程和方法

    成功的软件开发需要以下因素:

    • 需要得到理解和遵循的原则。
    • 进行了正式说明的基于经过验证的最佳实践的方法和技术。
    • 可以进行定制的流程。

    方法内容

    方法内容 描述需要生成什么内容、如何执行相关工作以及由谁执行。

    方法内容构件包括:

    • 角色:定义技能和工作产品职责。软件架构师 就是角色的一个例子。

    • 工作产品:任务的结果,可以为交付内容,也可以不是交付内容。服务模型 就是工作产品的一个例子。

    • 任务:特定角色执行的步骤序列。任务使用输入工作产品来生成或修改输出工作产品。标识服务 就是任务的一个例子。

    • 指南:文档说明。术语表模板示例工具使用指导信息 都是指南。

    流程

    流程 用于将方法内容组织到开发周期中,并指定要完成的工作的顺序。要完成的工作的顺序独立于开发生命周期模型(如瀑布式或迭代)。可以将流程视为工作流或分解 结构。通过流程,项目经理可以确定在项目的每个阶段需要哪些人员以及修改了哪些工作产品。如果熟悉 Rational Unified Process® (RUP),则可以将 RUP 规程(如分析与设计实现)视为方法内容,而将 RUP 阶段(如细化和构造)视为流程元素。

    务必将方法和流程这两个概念加以区分,并提供框架来支持分别对其进行修改。

    Rational Method Composer

    IBM Rational® Method Composer (RMC) 是基于 Eclipse 的方法与流程创作平台,用于集成、定制、代码化和发布流程。使用方便而且功能强大的 RMC 提供了一组流程,可以方便地加以使用或自定义,如 Rational Unified Process (RUP)。负责维护流程的项目经理、项目管理者以及程序管理员通常会使用 RMC,该工具可为本部分所描述的概念提供支持。

    RMC 中进行的工作的输出是作为 HTML 发布的流程(通常采用网站的形式)。希望遵循该流程的组织可以随后使用此流程站点。

    软件流程工程元模型

    本 部分将讨论开发流程。软件流程工程元模型(Software Process Engineering Metamodel,SPEM)是正式描述软件开发流程的的标准规范。作为 Object Management Group (OMG) 标准,SPEM 是独立于供应商、方法和框架的。1.1 版于 2005 年 1 月正式发布,而包含重大更新的 2.0 版目前正在制订中。

    Rational Unified Process

    Rational Unified Process (RUP) 基于全球数千项目所采用的最佳实践,是能够针对具体项目进行方便定制的软件开发流程。RUP 包括有关优先级权衡、迭代开发、可视建模、软件质量和团队协作的主要原则。RUP 定义规程(方法内容)和阶段(流程),如图 1 中所示。


    图 1. Rational Unified Process (RUP)
    Rational Unified Process (RUP)

    Rational Unified Process for Service-Oriented Modeling and Architecture

    Rational Unified Process for Service-Oriented Modeling and Architecture (RUP Plug-In for SOMA) 构建于 RUP 之上,可提供有关开发面向服务的解决方案的指导。2.4 版(请参见参考资料) 提供了组合之前 RUP for SOA 内容和 IBM Global Business Services (GBS) SOMA 方法的统一方法。RUP Plug-In for SOMA 为软件架构师和设计人员提供了有关面向服务的体系结构的分析、体系结构和设计的具体指导信息。

    提供了专用统一建模语言(Unified Modeling Language,UML)概要,用于建模领域特定的解决方案(包括 SOA),并随之提供了紧密相关的专用流程。例如,有支持 RUP Plug-In for SOMA 的 UML 2.0 profile for Software Services

    注意:将在本系列的后续文章中讨论与管理相关的流程。

    IBM 技术

    如本系列的第 1 部分中所述,组件业务建模(Component Business Modeling,CBM)可帮助组织对策略、技术、操作和投资一致性形成大量新的认识。CBM 支持对形成差别的业务组件进行标识,还支持对业务流程进行分析。

    面向服务的建模与体系结构(Service-Oriented Modeling and Architecture,SOMA)提供了有关 SOA 解决方案的分析和设计的指导信息。SOMA 支持对与业务保持一致的服务进行标识、规范化和执行(在设计层)。将在稍后详细讨论此主题。





    回页首


    模型、UML、资产与模式

    元数据

    元数据即关于数据的数据。例如,关于所录制的歌曲的元数据可能包括关于演唱者、专辑、作曲、长度或质量的信息,而数据则是音频记录本身。

    根 据上下文不同,相同的数据可能为实际数据,也可能为元数据。以前面讨论的开发方法和流程为例。在 RMC 中修改开发方法时,定义要类型化的内容(由元数据提供支持)。例如,可能会定义工作产品、任务和角色的新实例。在此级别,工作产品、任务和角色是元数据元 素,元数据还定义这些类型(角色执行的任务)之间的关系。现在考虑设计人员定义有关方法的概念时的情况。假定他们在使用 UML 建模工作产品、角色和任务的概念。在此级别,工作产品、任务和角色是实际的数据,而 UML 是元数据。将稍后在 RMC 中将此数据作为元数据使用。这样看来,可以将 UML 视为元-元数据!

    模型

    RUP 将模型定义为系统的抽象表示或模拟,可从特定的角度提供对系统的完整描述。模型经常用于更好地了解系统如何工作,或用于记录实际实现的设计决策。模型经常由多个不同类型的部分组成。这些部分作为模型元素进行归类。

    模 型的目标受众是能够理解这些模型的人群。例如,系统分析人员和设计人员创建和使用分析模型,数据库设计人员设计和查看数据模型。模型可以基于文本和/或图 形。由于建模是在保持严密性和完整性的情况下减少复杂性(如在较高的抽象级别进行描述),因此最好使用丰富的图形设计符号,例如在 RUM 中描述为可视建模 的统一建模语言 (UML)。模型位于特定的抽象级别,可以将其转换到更低的级别抽象。例如,分析模型通常会转换为设计模型。

    在本系列的第 1 部分中,我们说明了协作 SOA 更为重要。例如,您的公司可能会将详细设计或实现外包给其他公司。进行建模时,请牢记要将建模结果提供给其他人使用。另外,您的 SOA 设计和开发平台也应该能够接受模型,并将其转换为其他模型。

    自动化与转换

    SOA 设计与开发平台应该允许进行模型的半自动化转换,从而从高抽象级别转换到低抽象级别,最终转换为代码。例如,UML-to-Java™ 转换能从 UML 类关系图生成 Java 代码。

    基础框架还应该考虑可跟踪性, 该功能实际上就是回溯到较高的抽象级别。例如,假定您希望了解需求中的变更对您的设计的影响。应该能够通过在进行设计决策来支持特定需求时添加的链接(轨 迹),以确定在设计中对此需求进行了何种处理。然后,在影响分析期间,应该能够看到所有与该特定需求相关的设计决策(通过轨迹或链接),应该了解此需求中 的更改对您的设计的影响。

    元模型 是关于模型的模型。这是特定领域的模型,定义概念并提供用于创建该领域中的模型的构建元素。例如,可以将 SPEM 视为流程工程元模型。

    Eclipse Modeling Framework

    作为开源 Eclipse 项目,Eclipse Modeling Framework (EMF) 包括了一个模型元模型(建模领域的元模型)。以下是 EMF 网站上提供的定义:

    “EMF 是用于基于结构化数据模型构建工具和其他应用程序的建模框架和代码生成工具。通过采用 XML 元数据交换(XML Metadata Interchange,XMI)格式描述的模型规范,EMF 提供了工具和运行时支持,从而为模型生成一组 Java 类;这包括一组适配器类(支持查看模型和基于命令对模型进行编辑)和一个基本编辑器。

    核心 EMF 框架包括用于描述模型的元模型 (Ecore),并为模型提供运行时支持,包括更改通知、采用缺省 XMI 序列化的保存支持以及用于对 EMF 对象进行常规操作的非常高效的反射应用程序编程接口(Application Programming Interface,API)。”

    EMF 与 UML 的区别何在?

    EMF 是建模框架(包括元模型),而 UML 是规范。以 Eclipse UML2 项目为例,该项目是基于 EMF 的 UML 元模型实现,支持为 Eclipse 平台开发 UML 建模工具。从这个角度而言,可以将 EMF 元模型 (Ecore) 视为用于在 Eclipse 平台上实现 UML 模型的元模型。

    统一建模语言 (UML)

    “统一建模语言 (UML) 是行业标准语言,用于指定、可视化、构造和记录软件系统的构件。它简化了软件设计的复杂流程,为构造创建“蓝图”。”来源:Object Management Group (OMG)

    UML 的好处在于其具有广泛的行业支持。该规范最初于 1997 年提交给 OMG,拥有很多供应商的设计与开发环境的全面支持,如 IBM Rational Software Modeler (RSM) 或 IBM Rational Software Architect (RSA)。

    作为 OMG 标准,该规范的当前正式版本为 2.1.1。其中定义了 13 组概念 和归入两个类别的关系图类型:

    • 结构;类、对象、组件、组合结构、包、部署
    • 行为:用例、活动、状态机、序列、通信、计时、交互概述

    UML 是一种通用建模语言,其主要优势之一是能够使用 UML 概要针对领域特定的建模工作进行扩展。

    UML 概要

    UML 概要为独立于领域的 UML 提供了简单的扩展机制。概要支持定义领域特定的实体和规则。UML 概要能很好地与开发流程一起使用。例如UML Profile for Business Modeling 支持 Rational Unified Process (RUP) for Business Modeling Plug-In。

    概要主要由构造型组成。构造型定义哪个 UML 类(元类)与其关联、该类上的属性以及有关构造型元素如何与其他元素关联的约束。例如,在 UML 2.0 Profile for Software Services 中,Service Specification 构造型扩展 Interface UML 元类。它定义名为 published 的属性来指示服务规范是否已发布到服务注册中心。最后,其约束之一是,所有 Service Specification 操作都应该标记为 public。

    UML 2.0 Profile for Software Services

    UML 2.0 Profile for Software Services 是“允许对服务、面向服务的体系结构 (SOA) 和面向服务的解决方案进行建模的 UML 概要。该概要(有时候称为服务概要)已经在 IBM Rational Software Architect (RSA) 中实现,已成功在制定复杂客户场景的模型方面得到了应用,可用于帮助传递有关与开发面向服务的解决方案相关的注意事项。”

    该概要定义 Message、Service Specification 或 Service 之类的构造型。它还为这些概念提供可方便区分的图形符号。图 2 显示了 UML 关系图的一个示例:保险领域的消息设计模型(在 IBM Rational Software Architect 中)。它将使用服务概要中的 Message 构造型表示为类关系图(一种结构关系图)。


    图 2. UML 类关系图
    UML 类关系图

    模型驱动的体系结构

    模型驱动的体系结构(Model-Driven Architecture,MDA)为业务和技术提供独立的模型,能满足业务和技术不断更改的情况下的需要。以下是摘自 OMG MDA 用户指南的定义:

    “OMG 的 MDA 是一种在软件开发中使用模型的独立于供应商的方法。MDA 提供了相应的方法,支持提供用于以下方面的工具:

    • 指定独立于为其提供支持的平台的系统
    • 指定平台
    • 为系统选择特定的平台
    • 将系统规范转换为针对特定平台的规范
    MDA 的主要目标是通过从关注点的体系结构分离来实现可移植性、互操作性和可重用性。”

    MDA 的核心是系统(现有或以后的系统)、平台(提供 J2EE 或 Web 服务等功能)和视角(关注特定概念的抽象概念)之类的概念。

    MDA 定义以下模型:

    • 计算独立模型(Computation-Independent Model,CIM):用于定义功能的需求的领域模型。
    • 平台独立模型(Platform-Independent Model,PIM):独立于可以采用其进行构建的技术的业务功能和行为模型。
    • 平台特定模型(Platform-Specific Model,PSM):将 PIM 的规范与特定类型的平台的使用方式进行组合。

    MDA 定义了转换,以将系统的模型转换为同一个系统的另一个模型(如从 PIM 到 PSM)。将一个模型转换为另一个模型的方法使用映射进行说明。

    MDA 的主要目标之一是允许提供设计及为其提供支持的开发工具。

    模型驱动的开发

    本 部分目前所介绍的内容(即模型和转换)形成了模型驱动的开发(Model-Driven Development,MDD)的基础,该方法有时候也称为模型驱动的软件开发(Model-Driven Software Development,MDSD),是采用 MDA 作为说明标准的软件工程方法。模型驱动的开发 (MDD) 是基于模型和转换的软件开发方法。MDD 支持采用半自动化方式生成代码,可使用一组模型到模型转换以及模型到代码转换从高级业务分析模型生成代码。此功能以一组模型的定义、模型实例的完整性和转 换中使用的不同模型间的元素的映射作为后盾。另外,MDD 支持对变更的影响进行分析。

    IBM Rational Software Delivery Platform (SDP) 支持使用 MDD(或其他方法,如业务驱动的开发)方法进行端到端企业解决方案的团队开发。"业务驱动的开发(Business-Driven Development,BDD)是一种基于角色的集成软件开发方法,能使业务和 IT 保持一致,可大幅度提高业务的性能。“BDD 也使用模型,关注的是业务和 IT 模型在整个 SOA 生命周期中的协作”(请参见本系列的第 1 部分)。IBM BDD 方法通过 IBM Software Delivery Platform 支持各种角色,如业务分析人员、IT 架构师、J2EE 开发人员或集成开发人员。

    请参见参考资料中提供的 IBM Systems Journal 文章的链接,IBM 思想领袖 (thought leader) 在其中深入地讨论了模型驱动的软件开发方法。

    资产

    资产或服务?

    资 产和服务在说明、重用潜力和粒度(细粒度和粗粒度)要求方面具有相同的特征。服务可以为一种资产,可能需要很多资产进行表示。服务资产的有些元素在开发期 间使用较多,如业务流程模型或测试用例,而服务资产的其他元素更多地应用到运行时,如 Web 服务描述语言(Web Services Description Language,WSDL)、XML 模式描述符(XML Schema Descriptor,XSD)或企业存档(Enterprise Archive,EAR)。SOA 治理定义指定此类服务和资产的生命周期的规则。

    资 产和模式是 SOA 成功的关键,因为这二者为进行重用提供支持。事实上,采用基于资产的业务模型的企业可获得巨大的增长能力。此类企业不再像传统的基于人力的业务模型中那样 受到其员工的效率或数量的限制。恰当使用资产可以对软件投资带来巨大的变化。不过,采用此模型的任何人都会告诉您,这并不简单,需要恰当的治理和基础设施 支持。

    对 SOA 而言,创造性可能会对效率造成影响。让架构师、设计人员和开发人员完全从头进行每个新项目是我们所不希望的。类似的需求应该能够得到一致的体系结构和设 计。资产和模式允许恰当的创造性,使您能够在可能的情况下重用经过验证的解决方案,然后将您的时间和精力集中在需要全新开发的内容上,如特定于该项目的业 务逻辑等。

    资产是提供上下文中问题的解决方案的构件集合。在此上下文中,构件可以为任意内容,如需求、设计模型、实现代码或测试用例等。可以将构件视为文件系统上的文件。对其成功至关重要的是,资产包括有关如何使用、自定义和扩展资产的说明。有关资产的构成要素的更多信息,请参见可重用资产规范

    模式

    资产或模式?

    资 产和模式均提供上下文中问题的解决方案。那么,二者的细微区别在哪里呢?资产可以包含任意类型的构件(如电影),而且还包括模式。模式是一种特殊的资产。 资产所倚重的是有关如何描述和设计其结构的标准化模型 (RAS):模型可以使用概要进行扩展。可以将模式视为其规范和实现。

    模式是对给定上下文中重复出现的问题的解决方案。模式是一种特定类型的可重用资产。可以对模式的规范(问题、上下文、各个因素和解决方案的说明)与实现(如 Java Bean)加以区分。单个模式规范可以有很多个实现。

    根据其应用到的开发过程的阶段不同,模式可归入不同的类别。例如,IBM 电子商务模式将模式分为以下几类:业务、集成、组合、应用程序和运行时。Gang of Four (GoF) 设计模式也非常有名。

    使 用模式时,可以确保所提供或代码化的解决方案是正确、有用的,而且经过了验证。不过,和任意可重用资产一样,只有在给出了说明何时、为何以及如何使用模式 的上下文和方法时,才可以加以采用。存在很多模式,而上下文是开始使用的必要条件。例如,电子商务的模式以流程的形式提供(基于技能和环境),可帮助您标 识处理您的业务问题的相关模式。

    最后,模式的目标之一是提供一致性,以便最终能因为在设计中使用了模式而基于相同的一组需求得到相同的体系结构。

    可重用资产规范

    可 重用资产规范(Reusable Asset Specification,RAS)于 2005 年开始采用,是用于描述可重用软件资产的结构、内容和说明的 OMG 标准。RAS 的目标是提供有关如何以一致的标准方式打包资产的最佳实践。按照规范中的定义,RAS 资产的核心特征包括:

    • 分类:资产相关的上下文。
    • 解决方案:资产中包含的构件。
    • 用法:有关安装、使用和自定义资产的规则。
    • 相关资产:此资产如何与其他资产相关。

    构件的类型可以由其文件名后缀决定,如 .xml、.txt、.doc 或 .java;也可以由其用途决定,如用例模型或分析模型。由于软件资产 是较为宽泛的术语,RAS 还提供了用于描述特定资产类型的概要。此概念与 UML 概要相同。可以使用 UML 概要来扩展独立于领域的 UML。类似地,可以采用领域特定(如 Web 服务)的 RAS 概要来扩展独立于领域的 RAS。

    RAS 资产的文件扩展名为 .ras,打包为 .zip 文件,这意味着其中包含一个清单,可以使用 WinZip 将其打开。图 3 摘自 RAS 规范,说明了核心 RAS 资产的主要部分。


    图 3. 核心 RAS 资产的主要部分
    核心 RAS 资产的主要部分




    结束语

    本文定义了有关软件工程流程和方法的术语。定义了用于构建 SOA 解决方案的软件构件,如模型、资产和模式等。另外还介绍了主要的标准,如 SPEM、UML 和 RAS。

    后续文章将定义与分析、设计、实现、运行时和管理相关的 SOA 术语。欢迎您继续阅读 developerWorks 上本系列的其他文章!






    致谢

    我要感谢我的 IBM 同事,他们为本文所述面向服务的体系结构和概念作了大量贡献。特别感谢 Grant Larsen 提供的有关资产和服务的见解。



    参考资料

    学习

    获得产品和技术

    讨论
     
    展开全文
  • 1910年,英国哲学家伯特兰·罗素(Bertrand Russell )和其老师怀特海(Alfred North Whitehead)合著的《数学原理》一书问世,这本书是如此的深奥,尤其对中国人而言,因为直到100多年后的今天,仍然没有完整而权威...

    1910年,英国哲学家伯特兰·罗素(Bertrand Russell )和其老师怀特海(Alfred North Whitehead)合著的《数学原理》一书问世,这本书是如此的深奥,尤其对中国人而言,因为直到100多年后的今天,仍然没有完整而权威的中译本(能看懂的人确实很少)。不过想想现在连一般的科普作品都翻译得如此垃圾,我们真应该庆幸。这本不朽的名著为两个年纪相差25岁的科学家建立了一条联系一生的纽带,同时也为神经计算提供了最初的思想来源。

    沃尔特·皮茨(Walter Pitts)是很多取得巨大成就但命运坎坷的科学家中的一员。12岁时经常被人欺负(家人和同学),作为一个孩子,他最幸福的时光是在图书馆里度过的。他曾花了三天时间读完了2000页的《数学原理》,并写信给罗素指出了书中的几处错误[1]。心胸宽广的罗素甚至邀请皮茨去剑桥大学当他的研究生。15岁时,皮茨离家出走,从此他就再也没有见过他的家人,他要到芝加哥大学寻找他的偶像罗素。在芝加哥大学,哲学家,自然语言处理的先驱鲁道夫·卡尔纳普(Rudolf Carnap)给了他很多帮助,为皮茨谋了打扫卫生的差事[2],这一幕简直就是现实版的《心灵捕手》。皮茨在旁听罗素的课的时候,结识了杰罗姆·莱特文(Jerome Lettvin),一名年轻的医学系学生。莱特文将皮茨介绍给了沃伦·麦卡洛克(Warren McCulloch),一位比皮茨年长25岁的教授,从此以后,来自不同经济阶层的两人一起生活、一起工作、甚至一起死亡。很快,他们将创造第一个关于精神的机械论理论——神经科学的第一种计算方法,现代计算机逻辑设计以及人工智能的支柱[1]。

    1240
    图1 Walter Pitts (左)和 Warren McCulloch(右)

    皮茨和麦卡洛克还有一个共同的偶像,戈特弗里德·莱布尼茨(Gottfried Leibniz),就是发明微积分的数学家莱布尼茨。作为哲学家或逻辑学家,他认为:“我们的所有观念(概念)都是由非常小数目的简单观念复合而成,它们形成了人类思维的基本单元:字母。复杂的观念来自这些简单的观念,是由它们通过模拟算术运算的统一的和对称的组合。” 这种复杂观念由符号所表示的基本单元进行逻辑计算的结果的思想,实际上也指导了《数学原理》创作。《原理》的宏大目标是通过用无可争论的简单的基本逻辑来建立整个数学体系。从命题入手,罗素和怀特海德采用了与、或、非三种基本逻辑运算来将命题连接成越来越复杂的网络。就是利用这些简单的命题,他们完整的推导出了整个复杂的现代数学。从《数学原理》开始,逻辑学从哲学中走出来,开始渗透到数学的各个方面,对计算领域产生了巨大的影响。

    由于麦卡洛克本身就是一个神经生理学家,我们在第2季中介绍的关于神经元的结构和功能在当时是神经生理学开创性的工作,这个工作对麦卡洛克产生了深刻影响。当时已经知道的是大脑里的每一个神经细胞只会在达到某个阈值时才被激发, 也就是说必须有足够多的相邻神经细胞通过神经元的突触向它传递信号,它才会发放出自己的电脉冲,即“全或无法则”。对于也曾认真学习过《数学原理》的麦卡洛克来说,这种设置就是二元的,神经元只有激发和不激发两种状态。他发现神经元的信号就是一个命题,而神经元的工作类似于逻辑门,它接受多个输入然后产生单一的输出。通过改变神经元的激发阙值,就可以让它执行「与」、「或」以及「非」的函数(功能)[1]。

    需要声明的是,生物学上的神经活动是非常复杂的,就神经元从突触分两种类型,一些是兴奋性的(excitatory),另一些则是抑制性(inhibitory)的,之前我介绍过,这是谢灵顿的发现。兴奋性和抑制性两类突触获得外界的刺激会让神经细胞产生两种状态,激活态或是非激活态,神经细胞被激活的话,则会沿着轴突产生一种脉冲信号,通过另一端的突触把刺激作用传递给其他神经细胞。实际上,我们要清醒地认识到,对于神经细胞而言,它可不认为自己有两种状态,它只是适时地发送脉冲信号给其他神经元罢了。这种脉冲信号的产生符合我们之前讲授“全或无”法则,也就是突触获得外界刺激要么使细胞产生脉冲,要么就不产生。还有一个关键问题是,触突的兴奋和抑制作用到底是如何综合产生影响的,这一点非常复杂。为了用数学工具模拟神经活动,必须进行简化。首先假设细胞是否产生脉冲对应于一个开关,这个开关只有两种状态:开和关,也就是二进制状态1或者0。其次,细胞接收到的输入刺激也只有0,1两种模式,真正发挥作用的是,处于“开(1)”状态的兴奋性的输入的个数与抑制性输入个数的关系。最简单的假设是只有一个抑制性的输入,而且它产生的作用要强于多个兴奋性输入的作用,也就是说抑制性输入为1时,神经细胞的输出状态只能是0,当抑制性输入为0时,则需要看兴奋性输入为1的个数是否超过一定阈值T,如果超过一定阈值T,神经细胞才真正产生脉冲,即输出的状态才能是1。阈值在这里起到的作用完全对应“全或无”准则,不过这里需要有一个抑制性输入作为前提,抑制性输入可以看作一种控制信号。需要指出的是,神经细胞响应输入带来的刺激也是需要一个时间过程,也就是在t时刻的输入刺激,将在t+1时刻产生输出。

    我们接下来将会看到这些基本假设是如何与逻辑门产生联系,并会举出一个具体的例子来看看如何利用神经元来进行逻辑运算。实际上,我们只需要几个简单的神经元就可以表示最基本的逻辑门,包括「与」、「或」以及「非」,如下图所示的表示是由人工智能的先驱马文明斯基提出的,就是他将感知机和Rosenblatt推进了深渊。

    1240
    图2 神经元代表的逻辑门[4]

    上面的每一个逻辑门就是一个神经元,例如,带箭头的输入表示兴奋性输入,以圆圈为端点的输入表示了抑制性输入,神经元中的数字(OR:1,AND:2,NOT:0)表示了这个神经元的阈值。以AND门为例,当两个兴奋性输入都为1时,他们的和大于等于阈值2,同时没有抑制性输入,因此神经元的输出就是1。当其中任意一个输入为0,输入的和将小于阈值2,因此将输出0。这就是利用神经元模拟AND门的。OR门与此类似,我们再看一下NOT门,在非门中存在一个抑制性输入,而没有兴奋性输入,并且阈值为0,抑制性输入为0,没有兴奋性输入,由于阈值为0,因此,将产生1的输出,而当抑制性输入为1的时候,神经元直接输出0,这个时候就根本不用计算了,这是一种规定。由于我们用神经元表示了基本的逻辑门,因此,我们也可以用神经元表示由基本逻辑门构建的任何东西。

    我们又把延迟的时间因素忘记了,但这个延迟的时间是如此重要,它使得冯诺伊曼的存储程序计算机变的可能。我们可以通过叠加一些神经元来实现一个称之为延时门的逻辑门,如下图所示的的阈值为2的神经元,只看这单一的神经元的话,起初只有一个兴奋性输入,因此在下一时刻这个神经元的输出会是0。接下来,我们看下方另一个阈值为1的神经元,这个神经元一开始就有一个称为start的兴奋性输入(此时你仍可以忽略最下方的名为stop的抑制性输入),特别的是,这个神经元的输出又反馈给本身作为输入了。实际上,没有什么能够阻止神经元将自己的输出作为它自己的输入,尽管对于单个神经元来说有点奇怪,但是当几个神经元串在一起的时候,它们形成环路几乎是不可避免的。在不考虑抑制性输入stop的情况下,下方的神经元每隔一个时钟单元,就会输出1,将这个输出连接到上方的神经元的时候,最终的Output看起来就好像延时了两个时间单元一样。由于存在环路,这个过程将会一直循环下去,我们必须通过引入一个抑制性输入Stop,让它作为整个过程的开关去控制一切。你可以在下方阈值为1的神经元上再增加一个神经元从而让整个输出延迟三个时间单元。

    1240
    图3 带有回路的神经网络[4]

    这种延时很重要,延时t时刻,意味着在这个信号可以在逻辑门中存储t时刻,这实际上意味着神经元具有了记忆功能。这种结构其实就是现在的寄存器的原型。类似的神经网络可以实现更复杂一点的电路,例如下图的神经元网络就实现了一个二分频电路,即在时钟每触发2个周期时,电路输出1个周期信号。

    1240
    图4 (a)二分频神经网络[4]及其(b)波形仿真

                                (a)                                                                              (b)

    需要特别感谢我的同事为我绘制了这个波形仿真图。

    以上的这些都来自于麦卡洛克和皮茨在1943年合著的那篇A Logical Calculus of the Ideas Immanent in Nervous Activity [6]即《神经活动中内在意识的逻辑演算》,简称《逻辑演算》,任性的是,这篇文章注明的参考文献只有卡尔纳普的《语言的逻辑句法》(皮茨据说也是很快就看完并做了大量笔记,这让卡尔纳普印象深刻)、希尔伯特和阿克曼的《数理逻辑原理》,以及怀特海和罗素的《数学原理》,但是论文中他们却说:“图灵机能够计算的数也能够被这样的网络所计算……这就从心理学的角度,论证了图灵关于可计算性的定义”,很明显,1936年阿兰图灵发表的创世之作《On Computable Numbers, with an Application to the Entscheidungsproblem》(论数字计算在决断难题中的应用)一定也对麦卡洛克产生了影响,更从一个角度反映出图灵是多么伟大,他几乎是从纯数学的角度出发,构思出一种将计算和自动化联系起来的机器,后人称之为“图灵机”。实际上,直到20世纪之前,人们普遍认为,所有的问题类都是有算法的就像我们在本文第一季看到的求解根号2[7]一样,人们的计算研究就是找出算法来。然而,20世纪初的时候,许多问题已经过长期研究仍然找不到算法,即它们是不可计算的。尽管有很多人(哥德尔,丘奇)已经表明了凡“算法可计算函数都是一般递归函数”(你可以不用理解它),但是图灵创造性的把计算归结为最简单、最基本、最确定的机械动作,执行这些机械动作的机器就是图灵机,并得出结论:“那些算法可计算的问题就是这种自动机能计算的问题”。遗憾的是,我们现在仍然不能区分哪些问题是可计算的,哪些问题是不可计算的。但是将计算和自动化机器联系起来的思想使得图灵被公认为“计算机科学之父”。然而,由于图灵机本身只是一个构想,麦卡洛克和皮茨的工作验证了通过神经元表示的逻辑门实现计算是一条切实可行的方法。这个方法为被称为“计算机之父”的冯诺伊曼去实现真正意义上的计算机提供了几乎唯一可以借鉴的思路。

    在我们所学的大学计算机文化基础课程中,唯一让你印象深刻的可能就是“第一台通用计算机ENIAC是由宾西法尼亚大学发明的“,发明人莫克利(JohnW.Mauchly)和艾克特(J.PresperEckert)估计你也记不起来。这台机器更具有象征意义,它跟我们现在的计算机,差别很大,它竟然采用了十进制进行计算,而且每次计算不同的问题,需要几个操作员花几周的时间重新连接电线和开关!1945年6月,冯诺依曼撰写了一份历史性文件《EDVAC报告书的第一份草案》(First Draft of a Report on the EDVAC),这是第一份公开发表的关于存储程序概念的二进制计算机器——现代计算机。他建议计算机应该以皮茨和麦卡洛克的神经网络为模型,并且用真空电子管代替神经元作为逻辑门,这些逻辑门按照神经网络的方式组织起来就可以进行任何计算了。更为关键的是,为了使得程序本身能够像输入的数据一样保存起来(避免重新连接线路),他还建议计算机必须有另外一样新东西:内存,他说:需要一种「一个自激发元素将保持这种激发状态」的结构,其实这就是皮茨和麦卡洛克论文中出现的神经元构成的回路所产生的作用:记忆。这篇奠定了到目前为止所有计算机逻辑结构的EDVAC报告只有一篇参考文献:麦卡洛克和皮茨的《逻辑演算》。

    在《逻辑演算》的原始论文中,延时门,或门和与门分别表示为下图的(a)(b)(c)。这个图据说是麦卡洛克的女儿绘制的[3]。

    1240
    图 5 《逻辑演算》中的逻辑门[6]

    我们大多数学习计算机的人,老师总会教导我们计算机本身就是0,1构成的,不管软件还是硬件,但是大家(特别是有软件工程背景的人)经常忽略的是在计算机中,时序电路的引进,才使得存储程序这一设计能够实现。

    1943年,莱特文将皮茨带到了维纳在MIT的办公室,简单的交流就使得这位控制论的创始人认为皮茨「毫无疑问是我见过的最厉害的科学家。」[1]对于皮茨这个连高中都没有毕业的流浪儿来说,维纳承诺给予皮茨MIT的数学博士学位,并邀请皮茨到MIT与他一起工作。就算在那个被称之为“控制论学家“的圈子里面(维纳,冯诺依曼,麦卡洛克、莱特文),皮茨也是他们中的天才。维纳让皮茨继续改进他的神经网络,皮茨怀疑对于一个初始的随机的神经网络而言,”随着长时间对神经元阙值的调整,这种随机性会渐渐让位于有序性,而信息就涌现出来了“[1]。他着手用统计力学来为这个过程建模。维纳激动地鼓励他,他知道如果将这样一个模型植入一台机器的话,它就将能够「学习」[1]。这段描述简直就是现在深度学习所做的一切。但是对神经元的调整这件事当时还不能自动进行,这件事还必须等到1957年感知机出现的时候。实际上,为了更加清楚地了解这一点,麦卡洛克和皮茨的神经元模型还可以被描述成下面的图形:

    1240
    图6 神经元的结构图

    这种表示与现在神经网络中的表示几乎没什么差别了,图(a)表示神经元从外界获得输入x_{1},...,x_{n} 通过箭头表示的突触,传给神经元,神经元的输出是oj,图 (b)则更进一步将箭头表示的突触根据不同的性质以及强度,为神经元输入增加了一个加权和,这使得一些输入对神经元的脉冲输出产生更大影响,图(c)则将通过增加一个阈值函数将“全或无“法则引入到神经元结构中,图c得神经元结构可以表示为如下的公式:

    1240

    其中,y表示神经元的输出,E表示神经元获得外界刺激的和,T表示神经元设定的阈值,I表示抑制性突触,它起到的作用就是图2中非门的那个控制信号。当我们精心挑选权值参数W,阈值T,以及控制信号I的话,就能让神经元实现逻辑运算了,例如:

    设T=2,I=0,W1=1,W2=1,

    那么 E=x1W1+x2W2=x1+x2

    当x1=1,x2=1,E=1+1=2,  触发y=1

    当x1=1,x2=0,E=1+0=1,  不触发y=0

    当x1=0,x2=1,E=0+1=1,  不触发y=0

    当x1=0,x2=0,E=0+0=0,  不触发y=0

    这就实际上实现了x1和x2之间的“逻辑与“运算。

    这个模型看起来威力无穷,但是一个最关键的问题是必须依靠人去精心设计参数的值以完成某项计算功能,自动化的过程并不彻底。如果神经网络的结构和参数都能根据不同的任务自动确定,这样构建的机器被认为具有学习功能。然而,如何仅仅自动化的选择参数,使得单个神经元具有学习能力一直到 罗森布拉特的感知机才提出解决办法,我们已经知道,这个办法跟求解根号2几乎没区别,但是感知机的重要性是不言而喻的。如果能够自适应地组建神经网络的结构,人工智能可能将取得大进展。实际上,由于网络本身就是一个带权的图,图理论与神经网络的结合几乎是不可避免的事情,特别是包含逻辑推理关系(知识)的图模型与神经网络的结合更加吸引人。在最近的一个报告中[8], 27位学者(其中22位来自AlphaGo的东家DeepMind),对这种可能性进行了阐述。沿这个方向继续下去并取得重大成果的话,可能将为人工智能开创一个比现如今的深度学习更加完善的基础。

    现在还是回到历史中,我们需要花点时间总结一下麦卡洛克和皮茨发明的神经计算模型的历史地位了。这个现在被称之为MP模型(McCulloch-Pitts Model)的东西被现代的人们忽略了,它最少在三个方面产生了重要影响:首先,将生理学关于神经的研究进展带入到数学领域,并与逻辑学相结合,直到现在,也有很多人认为,为了使机器具有智能必须回归对神经科学或者大脑的研究,麦卡洛克和皮茨绝对是这个领域的第一人。另外,你可以坚定的认为MP模型催生了现代计算机科学的诞生,并使得这个科学从一开始就分成两个部分,一部分借鉴他们的由神经元构成的神经网络实现逻辑计算,同时也为存储程序设计带了最原始的参考,MP模型为图灵机和现代的存储程序计算机之间建立了一个至关重要的桥梁,为后来复杂的计算机硬件体系结构带来了最初的灵感。另一方面,由于这个神经网络的参数无法实现真正的学习,从皮茨开始,就有一些研究者开始致力于让神经网络自动学习,它构成了当前机器学习或人工智能研究的半壁江山(谦虚地说)。当前,在很多机器学习课上,老师们都会强调机器学习的编程范式与传统的基于过程的编程完全不一样,实际上,就是从皮茨开始,就注定了两者完全不在一个层次上。传统的计算机硬件或软件编程大都还是与MP方法一样,需要人为地设置参数或者可能的情况,机器学习则不太一样,它他希望机器能像人一样,从环境的刺激(数据)中学习一个模型来应对环境的刺激,这个模型最早的例子就是感知机。通过这些资料的学习和整理,我逐渐清晰地看到, MP模型和感知机实际上代表了计算机科学发展的两条不同路径。以MP为背景的计算机体系强调计算与存储(记忆),以感知机为开端的思想则强调学习。

    故事进入尾声,控制论的创始人,性格怪异不讨人(罗素,香农等)喜欢的维纳成就了皮茨,但是维纳的性格预示着皮茨在他身边也是危险的,更别说维纳身边有一个纳粹背景的妻子。玛格丽特·维纳从各方面讲都是一个有控制欲的、保守的假正经。由于后来一个偶然的机会,麦卡洛克也来到MIT和皮茨一起在维纳手下工作。突然有一天,维纳告诉麦卡洛克,皮茨和莱特文:“所有我和你们项目之间的联系被永久性的解除了“。此后他再也没有同皮茨说过话,也不告诉他为什么。一种说法是[2,3]玛格丽特受不了麦卡洛克疯子般的自由生活习惯(麦卡洛克会写诗,并到处炫耀),造谣说麦卡洛克手下的几个男孩勾引了维纳的宝贝女儿。还有一种说法[3]是”精神有缺陷的维纳已经无法捕捉麦卡洛克言语表达中的细微差别。有些时候,维纳分辨不出麦卡洛克是在陈述一件事实还是在说一个猜想”。维纳和麦卡洛克以及皮茨突然地决裂对控制论遭受很大损失,皮茨则遭受了最大的打击,几乎完全垮掉,他开始酗酒,甚至自己合成类似鸦片的化学物质作为下酒菜,他毁掉了他的研究成果和博士论文,拒绝接受任何帮助。在给麦卡洛克写下一封”这一切都让我感到极度悲哀”的信[1]不久,1969年5月14日,沃尔特·皮茨在剑桥的寄宿之家孤独死去,死因是长期酗酒导致的肝硬化出血。这个从小就开始流浪的大男孩一生没有得到过任何一个正式的文凭,但是他依然不愧是计算科学史上一颗耀眼的明星。四个月后,麦卡洛克也过世了。能让我们感到欣慰的是,从小孤苦伶仃的皮茨一生中能遇到麦卡洛克,他也是幸运的。皮茨从麦卡洛克那里得到了他需要的一切:”认同、友谊、「智识」上的另一半以及他从未有过的父爱” [1]。

    麦卡洛克和皮茨实际上为控制论带来了最有力的证据,也为维纳带去了信心。控制论的核心思想几乎可以在麦卡洛克和皮茨的工作中体现。第一,控制,指的是系统能够与环境交互继而改变环境的能力,实际上任何一种能够接收环境数据,并进行输出的东西,都可称之为控制,神经元或神经网络就是典型代表。第二,反馈,指的是能够使用过去的性能来调整未来行为的一种属性,在神经元上,环状的链接,就是一种反馈,甚至你可以回到我们在本文第1季的求解根号的流程[7],用错误反馈给系统,以指导下一步计算的结果。控制论的目标实在太过宏大,当时对很多学科产生了非常重要的影响,然而现在这种影响力正在减退。遗憾的是,为维纳《控制论》思想贡献巨大的麦卡洛克和皮茨甚至都没能出现在维纳的自传里,想想作者是维纳,你应该可以理解。现在,麦卡洛克和皮茨也被后人称为控制论学家,这对维纳来说,实在是有点讽刺。甚至是最新的一本关于控制论历史的科普读物《机器崛起:遗失的控制论历史》[5]中竟然连皮茨都没有提到,不知道维纳是否于心有愧,他肯定不知道“原来随便错手,可毁了人一世”。

    神经元模型的创立者皮茨是不幸的,遗憾的是,感知机的发明人弗兰克· 罗森布拉特(Frank Rosenblatt)也几乎一样不幸。

    参考文献

    [1] 陨落的天才-皮茨和他违背的逻辑,人工智能名人堂第25期

    [2] 尼克,人工智能简史 人民邮电出版社,2017.12.

    [3] Charles Petzold,图灵的秘密:他的生平、思想及论文解读 杨卫东 , 朱皓 (译者)

    [4]  Harry Fairhead,  The McCulloch-Pitts Neuron, https://www.i-programmer.info/ babbages-bag/325-mcculloch-pitts-neural-networks.html

    [5] 期马斯·瑞德 , 机器崛起:遗失的控制论历史, 机械工业出版社,2017

    [6] Pitts, Walter. A logical calculus of the ideas immanent in nervous activity.  Neurocomputing: foundations of research. MIT Press, 1988:115-133.

    [7] twinlj77,理解计算:从√2到AlphaGo ——第1季 从√2谈起,https://blog.csdn.net/SIGAI_CSDN/article/details/80886538

    [8] Peter W. Battaglia, Jessica B. Hamrick, Victor Bapst, Alvaro Sanchez-Gonzalez, Vinicius Zambaldi, Mateusz Malinowski, Andrea Tacchetti, David Raposo, Adam Santoro, Ryan Faulkner, Caglar Gulcehre, Francis Song, Andrew Ballard, Justin Gilmer, George Dahl, Ashish Vaswani, Kelsey Allen, Charles Nash, Victoria Langston, Chris Dyer, Nicolas Heess,Daan Wierstra, Pushmeet Kohli, Matt Botvinick, Oriol Vinyals, Yujia Li, Razvan PascanuRelational inductive biases, deep learning, and graph networks. https://arxiv.org/abs/1806.01261 

    [1] 机器学习-波澜壮阔40年 【获取码】SIGAI0413.

    [2] 学好机器学习需要哪些数学知识?【获取码】SIGAI0417.

    [3] 人脸识别算法演化史 【获取码】SIGAI0420.

    [4] 基于深度学习的目标检测算法综述 【获取码】SIGAI0424.

    [5] 卷积神经网络为什么能够称霸计算机视觉领域?【获取码】SIGAI0426.

    [6] 用一张图理解SVM的脉络 【获取码】SIGAI0428.

    [7] 人脸检测算法综述 【获取码】SIGAI0503.

    [8] 理解神经网络的激活函数 【获取码】SIGAI0505.

    [9] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读 【获取码】SIGAI0508.

    [10] 理解梯度下降法 【获取码】SIGAI0511.

    [11] 循环神经网络综述—语音识别与自然语言处理的利器 【获取码】SIGAI0515.

    [12] 理解凸优化 【获取码】SIGAI0518.

    [13] 【实验】理解SVM的核函数和参数 【获取码】SIGAI0522.

    [14] 【SIGAI综述】行人检测算法 【获取码】SIGAI0525.

    [15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上)【获取码】SIGAI0529.

    [16] 理解牛顿法 SIGAI 2018.5.31

    [17] 【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题 【获取码】SIGAI0601.

    [18] 大话Adaboost算法 【获取码】SIGAI0602.

    [19] FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法 【获取码】SIGAI0604.

    [20] 理解主成分分析(PCA)【获取码】SIGAI0606.

    [21] 人体骨骼关键点检测综述 【获取码】SIGAI0608.

    [22] 理解决策树 【获取码】SIGAI0611.

    [23] 用一句话总结常用的机器学习算法 【获取码】SIGAI0613.

    [24] 目标检测算法之YOLO 【获取码】SIGAI0615.

    [25] 理解过拟合 【获取码】SIGAI0618.

    [26] 理解计算:从√2到AlphaGo ——第1季 从√2谈起 【获取码】SIGAI0620.

    [27] 场景文本检测——CTPN算法介绍 【获取码】SIGAI0622.

    [28] 卷积神经网络的压缩和加速 【获取码】SIGAI0625.

    [29] k近邻算法 【获取码】SIGAI0627.

    [30] 自然场景文本检测识别技术综述 【获取码】SIGAI0629.

    [31] 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 【获取码】SIGAI0702.

    [32] 机器学习算法地图 【获取码】SIGAI0704.

    [33] 反向传播算法推导-全连接神经网络 【获取码】SIGAI0706.

    [34] 生成式对抗网络模型综述 【获取码】SIGAI0709.

    [35] 怎样成为一名优秀的算法工程师【获取码】SIGAI0711.

    展开全文
  • 基于动量的投资资产组合分配,以及定价模型 by Emmanuel Jurczenko and Bertrand Maillet
  • 在对称信息的框架下,建立了双渠道供应链中制造商电子渠道与零售商服务合作的Stackelberg和Bertrand博弈模型.发现渠道价格和需求受制造商在电子渠道的边际服务成本和零售商在电子渠道的边际服务成本影响;制造商在电子...
  • 本文只讲了一件事情:软件模型中存在读模型和写模型之分,CQRS便为此而生。 20多年前,Bertrand Meyer在他的《Object-Oriented Software Construction》一书中提出了CQS(Command Query Seperation,命令查询分离)...
  • 针对支线航空因运输规模小、运营成本高导致独立运营盈利水平低的问题,运用 BERTRAND博弈模型,从市场博弈的角度分析了支线航线与干线进行合作对其运营效果的影响.将支线航线分为枢纽辐射型和点对点型2种类型,根据支线...
  • 定价博弈matlab代码递归词典搜索 该代码实现了RLS方法并解决了Bertrand的定价和投资博弈,...*脚本都将运行该模型的各种版本。 要运行此代码,必须使用C编译器正确配置Matlab(运行mex -setup)并参考(Matlab R2015b)
  • Bertrand Charpentier,DanielZügner,StephanGünnemann 2020年神经信息处理系统会议(NeurIPS)。 [| ] 要求 要安装要求: conda env create -f environment.yaml conda activate posterior-network conda env...
  • 运用Bertrand博弈对主、次基站的交易行为进行建模,并将纳什均衡作为最终定价方案。第2阶段,基于纳什议价方案,将次基站子载波和功率分配问题定义成非线性规划问题,并通过拉格朗日乘数法进行求解。仿真实验表明,...
  • 分别研究集中式、MS-Bertrand、MS-Stackelberg、RS-Bertrand和RS-Stackelberg五种模型.结论表明:1)绿色制造水平随着绿色投入系数的增加而减少,且绿色制造水平在集中式情形最高,分散式决策下产品1和产品2的最优零售...
  • 针对由2个零售商和1个供应商组成的二级供应链,基于存在Bertrand竞争的2零售商的成本信息共享模型,研究了供应链中的零售商与供应商最优期望收益的影响因素及其灵敏度分析。结果表明:在各种信息共享组合下,各零售...
  • 研究了考虑零售商面临资金约束条件下的多零售商组成的多渠道供应链模型中的定价策略问题.根据零售商资金状况不同,利用Stackelberg与Bertrand博弈理论分析资金充足与不足条件下的供应链上下游关系,给出了制造商与零售...
  • 分析一个供应商和n个Bertrand竞争零售商组成的供应链系统的协调问题.首先证明收益共享合约在稳定条件下能实现该供应链协调;当突发事件导致零售商面临的需求规模和供应商...
  • 基于隔室PK模型(1-隔室,2-隔室和3-隔室,包括输注,零阶和一阶吸收以及滞后时间),单次给药后以及在一定剂量下的封闭形式溶液,用于在给药后给定时间计算浓度稳态,根据Bertrand&Mentre(2008) ); 从NONMEM...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

bertrand模型