精华内容
下载资源
问答
  • PPT课件 具体内容有:多Agent理论 MAS(Multi-Agent System)体系结构 基于多Agent系统 多Agent的广泛应用 e.g.基于多Agent的楼宇自动化系统 Agent与对象以及优势所在
  • 针对面向agent软件开发方法普遍缺乏对多agent系统软件体系结构的描述的问题,基于UML 2.0规定的两种扩充方式,在UML元模型的基础上增加了描述多agent系统和软件体系结构两个方面特征的建模元素,并用八个视图对...
  • 针对同目标agent协作系统提出了基于开销均衡的agent系统交互协商策略,通过实例证明相对于独立运行和基于正交互协商策略的agent系统,本协商策略可有效降低系统总开销,并可使运行负载更为均衡。
  • 为了使agent协同过程可控、有序的进行,克服传统多agent系统灵活有余而可控制性不足的缺点,提出以动态约束和调整系统行为的政策为管控手段的政策导向型agent协同系统。首先阐述了政策导向型agent协同系统原理...
  • 你可以用这个框架很轻易的搭建一个MAS(智能体系统),在这些系统中,各个Agent是自治的,而且可以互相通信,很酷诶! 下载之后,里面有对应的源码,安装包,以及官方文档。 此外,还有一些现成的Example(实例)...
  • 针对同目标agent协作系统提出了基于开销均衡的agent系统交互协商策略,通过实例证明相对于独立运行和基于正交互协商策略的agent系统,本协商策略可有效降低系统总开销,并可使运行负载更为均衡。
  • 应用企业建模方法建立企业模型,运用提出的Agent构造方法对模型进行Agent转化,得到企业多Agent系统模型。这一开发方法分为两个阶段:建模阶段和Agentify阶段。两阶段相承接构成一个完整的系统方法,为实际应用提供...
  • 对钻井井控仿真多Agent系统模型、各Agent的内部结构、Agent的知识表示方法及Agent间通信方式进行了详细阐述。给出了基于Agent的正常钻井井控仿真训练实例,较好地解决了传统井控仿真系统中灵活性和并发性较差的问题...
  • 基于集合分割、Rou曲集理论、大系统控制论和人工社会理论对多agent系统协作的联盟框架及形成机制进行了研究,提出了2类6种联盟框架。在知识层次上定义了联盟精度等概念,并给出了联盟形成的算法描述,算法易于编程...
  • Agent系统

    千次阅读 2018-08-27 11:10:53
    Agent是分布式人工智能和现代...1)弱定义:Agent一般用以说明一个具有自主能力、社交能力、反应能力和预动能力的软硬件系统。2)强定义:Agent不仅具有以上的特性,而且具有知识、信念、目的、义务等人类才具有...

    Agent是分布式人工智能和现代计算机、通信技术发展的必然结果。给Agent下一个确切的定义很困难,一般都是根据自己的研究领域和需求进行定义。最经典和广为授受的是Wooldridge等人的“弱定义”和“强定义”[104]。1)弱定义:Agent一般用以说明一个具有自主能力、社交能力、反应能力和预动能力的软硬件系统。2)强定义:Agent不仅具有以上的特性,而且具有知识、信念、目的、义务等人类才具有的特性,还具有流动性,诚实性和理性等特性。一般而言,可以认为Agent是一类在特定环境下能感知环境,并能灵活、自主地运行以实现一系列设计目标的、自主的计算实体或程序。在一定的目标驱动下并具有某种对其自身行为和内部状态的自我控制能力,准确理解用户的真实意图,运行于复杂和不断变化的动态环境,有效的利用环境中各种可以利用的数据、知识、信息和计算资源,为用户提供迅捷、准确和满意的服务。
    Agent具有的属性尚无定论。Wooldridge和Jennings等人提出的Agent应具有自主性、反应性、社会能力与主动性四个基本属性[105],大多数的Agent研究者认为Agent除了满足一些最基本特性外,还应该包括如移动性、适应性、学习性等特性[106]。Agent的特性使得它表现出类似人的特性,为解决企业复杂问题提供了新的途径。虽然Agent可能具有多种属性,但是研究和开发人员没有必要构建一个拥有所有以上描述特性的Agent,而是从实际企业需求出发,开发包含所需特性的Agent企业系统。
    现有的Agent应用都是以Agent的某几个属性作为关键属性,进行Agent结构设计,Agent结构大体上可以分为以下几类。
    (1)思考型Agent [106]
    思考型Agent将Agent看作是一种意识系统,一种特殊的知识系统,即通过符号AI的方法来实现Agent的表示和推理。思考型Agent的结构直接反映了Agent作为意识系统的理性本质,是支撑Agent进行行为推理、思维判断等意识活动的关键,也是构造各类复合型Agent个体的基础。图示4-2给出了思考型Agent基本结构。
    选择什么样的意识态度来刻画Agent是构造思考型Agent首先要考虑的问题。根据Agent理性的不同实现方式,有以下几种典型的思考型Agent结构,基于经典逻辑的Agent结构,基于BDI框架的Agent结构和基于决策理论的Agent结构等。
    1)基于经典逻辑的Agent
    基于经典逻辑的Agent以经典逻辑公式表述Agent状态和行为,以在一定推理规则下演绎推理表述Agent的思维决策过程,将推理求得的结果公式作为输出动作。由于经典逻辑具有严密的语法和直观、简洁的语义,因此基于经典逻辑的Agent结构也相应地具有这些优点。但同时,由于经典逻辑本身的局限性,使得问题复杂度增加时,推理过程的计算复杂度呈指数上升,因此在很多情况下失去了实用价值。另外,经典逻辑的表达能力有限,对复杂环境状态难以建立相应的逻辑表达式,更难以表示信念、意愿等反映思维意识的概念。
    2)BDI结构的Agent
    BDI是思考型Agent结构的典型代表,反映了人们为了实现一定的目标而采取一系列行动的过程,具有深刻的认知心理学和哲学基础[108]。BDI模型由信念、愿望、和意图三个基本概念构成的。信念是Agent所掌握的关于当前世界状况以及为达到某种效果可能采取的行为路线的估计,表示Agent对环境和自身的了解;愿望描述了Agent对未来实际状况以及可能采取的行为路线的喜好。Agent可以是不相容的,也允许存在不可达的愿望,其中相容且可达的部分构成目标集;由于资源的有限性,Agent不可能一次追求所有的目标,它选择目标集中的一部分作出承诺,从而形成意图。信念、愿望、意图等概念通过人们的日常生活可建立起一些非形式化的概念,同时为分布式环境中的Agent交互打下基础。但也应该注意到BDI模型存在以下的问题:
    a.通过逻辑描述的方法表达信念、愿望、意图等反映思维状态的概念,并合理完成相应的推理转化,还有很大的困难。
    b.BDI实际上可以说是个体Agent思维属性,描述Agent之间的社会层面的交互还存在一定的局限性。如何与MAS中的协调、合作、协商、组织规范等宏观理论结合,人们已认识到将诸如联合意图、集体承诺等群体概念直接归结为个体思维属性的组合做法的缺陷,提出要使Agent具有社会层面的思维属性,但在实用化方面仍然有很多困难。
    3)基于决策理论的Agent结构
    Agent观察外部环境,然后通过自身的预测、思考或规则匹配,最后输出行为的过程可以看作是Agent求解问题并追求效用最大化的过程。因此,Agent 理性行为可以从描述理论出发,通过基于效用评价的决策过程来刻画。基于决策理论的Agent结构较好的反映了人们求解问题的实际过程,可以在决策理论的指导下综合运用数学、逻辑、人工智能等多种技术加以实现。同时,可用对方案结果的估计来表示“信念”,用各个可能结果状态的效用来反映“愿望”,可较好的实现Agent的BDI框架结构。
    同时,由于决策Agent的资源有限性和客观世界无限性的矛盾,决策者不可能尝试所有的方案,于是从两个方面寻求解决途径:一是对真实环境的简化,用较小的问题空间代替实际的问题空间,形成以估算和最优为特征的经典决策理论方法;二是以满意替代最优,形成以搜索和满意为特征的现代决策理论方法。满意法则并不需要严格估计或计算后果的发生概率及相应的效用,而只需要一个相对范围,整个决策过程是一个逐步细化的搜索过程,但如果过程控制不好,也可能导致过多开销。
    (2)反应式Agent[107]
    反应式Agent结构更加强调交互行为本身对产生智能和理性行为的作用,Agent的智能、理性的行为不是在其所处的环境单独存在的,而只能在现实世界与周围环境的交互中表现出来。Agent不依赖于任何符号表示,直接根据感知输入反射行动。如图4-3所示反应型Agent基本结构,该结构只是简单的对外部刺激发生反应,没有使用符号表示的世界模型,也没有复杂的符号推理。在决定如何行动时并不参考历史信息,它们的决策完全基于当前状态。
    相对于逻辑推理和效用计算,反应式Agent结构在响应速度上具有优势。尤其是在动态、时变环境中其重要性更得以体现。但是反应式Agent结构的局限性也很明显,比如,只根据当前环境状态决定自身行为,缺乏对整个环境以及环境变化历史的了解,因此其行为缺乏中长期规划。决策是以局部信息为基础的,不能考虑整体和其他部分的信息,也无法预测其决策对整体行为的影响,这种没有远见的行为可能导致系统行为的不可预测性和不稳定性。反应式Agent模型依赖于一定的设计者经验基础之上的行为规则和优先级规则,很难形成系统的方法。另外,反应型Agent没有任何学习能力,表现出Agent的适应能力比较差。
    (3)混合式Agent[107]
    思考型Agent具有较高的智能,但无法对环境的变化做出快速响应,而且运行效率较低。反应型Agent能及时而快速地响应外来信息和环境的变化,但其智能程度较低,也缺乏足够的灵活性。纯粹的思考型Agent和反应型Agent对于大多数的实际问题都不是十分合适,实用的方法是综合两者的优点,把以上两类Agent结合起来,构造混合体系结构的Agent,通常被设计成至少包括如下两部分的层次结构:高层是一个包含符号世界模型的认知层,用传统符号处理规划和进行决策;低层是一个快速响应和处理环境中突发事件的反应层,不使用任何符号表示和推理系统,反映层通常具有更高的优先权。
    过程推理系统(Procedure Reasoning System)PRS体系是混合式Agent结构的一个典型实例。PRS有一个计划库以及显式表示的信念、愿望和目标:信念是一些事实,包括外部世界和Agent的内部状态,它们是用经典的一阶逻辑表示;愿望由系统行为来表示;PRS计划库包含一些不完整的计划,称为知识区(KA),一个KA都和一个激活状态相连,这个状态决定KA什么时候被激活。德国Fischer和Muller等人提出的INTERRAP结构,更是层次结构的典型代表[109]。它的控制器分为:行为层、规划层、协作层,其中,行为层用于对外界情况作出及时反应,规划层支持系统的中长期规划,协作层则支持系统与外界的交互。设计此Agent的三个层次反映了反应性、预动性、社会性的Agent三个属性。
    (4)EDA模型[59]
    EDA模型与其他人工智能中的Agent模型不同,它不仅说明了目的性,而且便于多Agent环境下的社会交互。EDA模型包括认知(Epidemic)、义务(Deontic)及价值(Axiologic)三个部分。E、D、A来源于建立在社会心理学中对Norm的分类:认识、行为和评估Norm。认知组件中存储了Agent的知识,共涉及到两种知识:陈述性知识(关于Agent的信念)和过程性知识(关于Agent的know-how)。价值组件是Agent的价值系统,是由Agent对一系列Norm的偏好组成;偏好不是固定不变的,而是在不断地发生着变化。义务组件是描述行动倾向于以某种方式实现。
    信念(Belief)一体化到认知模型中,义务(Obligations)和责任(Responsibilities)体现在义务组件中,价值(Values)放在价值组件中
    说明: 到语用功能,用来过滤感知信息。根据Agent本体,使用感知和价值Norm,更新一个或多个模型组件; 是价值函数,主要用在以下两种情况下:帮助确定感知哪种符号,帮助决定把什么目标放在日程和执行中; 代表以知识为基础的组件。存储了Agent的显示和隐式信念; 代表一系列的计划,可能是显示的也可能是隐式的。这些计划都是Agent感兴趣的并且可能要选择执行的。
    EDA模型有较强的描述能力,适合描述人类Agent又适合描述软件Agent,同时关注Agent的社会性。但是正如Filipe自己所指出的,使用EDA模型中的每个组件中的表达式(Statements)自动化推理过程仍是一个公开的问题,而且在他的研究中也并未试图解决。因而,采用EDA的方法来表示的Agent在实际应用中还有很大的难度。

    展开全文
  • 针对组织网络化后各项目组存在的过剩任务和过剩人力资源的平衡问题,提出了基于多Agent且具备两种工作模式的人力资源再分配系统....最后运用实例说明了标准协商Agent之间如何通过结盟进行协商并最终获取最佳方案.</p>
  • 用JADE创建多agent系统

    千次阅读 2014-08-03 15:57:55
    1、代理平台  FIPA定义的一个agent平台的标准模型,如下图所示: ...AMS是管理控制进出和使用AP的agent,一个平台只有一个AMS,它提供百页和生命周期服务,维护... 消息传输系统也叫agent通信通道(ACC),有软
     1、代理平台
        FIPA定义的一个agent平台的标准模型,如下图所示:
    AMS是管理控制进出和使用AP 的agent,一个平台只有一个AMS,它提供百页和生命周期服务,维护AID目录和agent状态,为了获取有效的AID,每个agent都必须在AMS上注册。
    DF是平台上提供默认黄页服务的agent。
        消息传输系统也叫agent通信通道(ACC),有软件构成在平台内负责所有的消息交换,包括来自或发送到远程平台的消息。
        当一个JADE平台被启动,AMS和DF立刻被创建,ACC模块也设置为允许消息通信。Agent平台可以分布在不同的主机上。
        2、agent类
        Agentt类对用户定义的agents来说表示一个通用的基本类。从程序员的角度来说,JADE agent简单的说就是一个从基本Agent类扩展的用户定义的Java类的实例,意味着对在agent平台上完成基本交互的特征
    (注册、配置、远程管理...)和可以被调用执行agent规定的行为的一系列基本方法(如 send/receive message, use standard interaction protocols, register with several domains,...)的继承。
        Agent的计算模型是多任务的,任务(或行为)是并发执行的。Agent提供的每项功能/服务应作为一个或者多个行为执行。调度程序对基本agent类是内部的,而对程序员来说是隐藏的,自动管理行为的调度。
    JADE Agent可以处于若干状态中的一种,详细介绍为:
    创建:创建agent对象,对没有在AMS上注册,也没有名字和地址,不能与其他agents通信。
    活动:agent对象在AMS上注册,有一个合格的名字和地址,可以访问所以JADE特征。
    挂起:agent对象当前被停止,它的内部线程被暂停,没有agent行为被执行。
    等待:agent对象被阻塞,等待什么。它的内部线程处于睡眠状态,当一些条件满足时被唤醒(典型的是消息送达)。
    删除:agent对象明确的死亡。内部线程终止它的执行,agents不再注册在AMS上。
    转移:当移动agent向新的地址迁移时进入这个状态,系统连续缓存消息,之后将发往它的新的地址。
    Agent类提供公共方法使其在各种状态间转换,这些方法从agent管理中的有限状态机 内的适当的转换中获取它们的名字。
        如:doWait()方法把agent从活动的状态转变成等待状态,doSuspend()方法将agent从活动或等待状态转变为挂起状态,...参考agent类的html文档,它提供这些doXXX()方法的完整列表。
    启动agent执行
    停止agent执行
    agents间通信
    访问私有消息队列
    平台将通过一个agent将所有收到的消息加入agent私有队列,队列容量无限,在有限资源下,可以通过setQueueSize()方法
    改变缺省值
    图形交互界面agent
    (P11...)
    agent通信语言(ACL)
    类ACLMessage代表可以在agents间交换的ACL消息。它包含一系列FIPA规范定义的属性。
    展开全文
  • 本文针对样本数据和数据包丢失的智能体系统研究了共识问题。 同时包含稳定子系统和不稳定子系统的交换系统可用于确定性地对数据包丢失进行建模。 本文的重点是要以线性矩阵不等式(LMI)优雅地陈述一种改进的条件...
  • 人工智能-Agent系统.pdf

    2020-07-04 22:30:20
    第8章 Agent系统 8.1 Agent的概念 8.2 Agent的结构 8.3 Agent实例Web Agent 8.4 多Agent系统 8.5 Agent的实现工具 8.6 Agent技术的发展与应用 8.1 Agent的概念 8.1.1 什么是Agent Agent的基本特性 (1) 自主性 亦称...
  • 文中基于Agent、DSS的特点,深入分析高校体育管理决策支持系统的需求,提出基于Multi-Agent技术体育训练管理决策支持系统的总体框架、具体实现方式,运用实例辩证分析该系统的可行性和可靠性,在一定程度上提升体育...
  • 为把本体理念应用于多Agent的CAPP自动工艺系统...最后通过实例验证了本体的功能和转换规则的智能推理机制,从而很好地满足多Agent自动工艺系统之间零件特征知识共享、复用和互操作的需求,同时对其它领域知识信息的处理也
  • 在基于Agent的复杂系统建模方法分析的基础上,结合信息对抗环境下护航舰艇编队防空作战系统实例,设计了各个仿真Agent实体的模型结构,采用HLA/RTI作为多Agent仿真环境的支撑环境,在此基础上给出了系统仿真的逻辑...
  • 详细分析了Agent、MultiAgent系统、分布式决策支持系统以及分布式项目管理的特点,将MultiAgent技术应用于分布式项目管理决策支持系统(DPMDSS)的构建,引入了界面Agent、实例化Agent、任务Agent和协调Agent。...
  • 基于GIS空间数据模型和智能体,研究了一种智能体协作动态路况信息服务系统,通过智能体之间的协作预测路网交通流量在时间和空间的分布,提供更贴近实际状况的诱导路径。在此基础上,基于 Swarm平台和Java语言...
  • 分析了复杂适应系统(Complex Adaptive System,CAS)仿真中对Agent学习系统的要求以及...最后,结台跨流域调水管理复杂适应系统仿真中的Agent规则学习过程,对Agent的规则学习和演化机制进行了算法验证及实例分析。
  • MOOON-agent系统设计与使用说明.pdf  MOOON-agent系统设计与使用说明 易剑 2012/6/16 目录 1. 设计目标1 2. 应用场景2 3. 主要功能2 4. 系统骨架3 5. 资源接口3 6. 内置CommandProcessor...


    MOOON-agent系统设计与使用说明

    易剑 2012/6/16

    目录

    1. 设计目标1

    2. 应用场景2

    3. 主要功能2

    4. 系统骨架3

    5. 资源接口3

    6. 内置CommandProcessor3

    7. 编程接口3

    7.1. agent.h4

    7.2. message.h5

    7.3. message_command.h5

    7.4. command_processor.h6

    8. 编程示例7

    1.  设计目标

    一个通用的agent框架,提供编程接口,并内置通用的功能。

    2.  应用场景


    3.  主要功能

    1) 自动上报心跳

    2) 支持以域名方式指定center或者IP列表方式指定center

    3) center断开后自动重连接

    4) 支持多种重连接center策略,如轮询方式

    5) 自动上报数据到center

    6) 可选多种心跳方式,简单心跳不附带数据,富心跳可携带系统状态数据,如CPU使用率、内存使用情况等

    7) 提供获取CPU使用率、内存使用情况和流量等接口

    8) 内置配置等CommandProessor,常用需求不用编程直接使用

    9) 非单例,单个进程可创建多个agent实例

    4.  系统骨架


    5.  资源接口

    暂略。

    6.  内置 CommandProcessor

    暂略。

    7.  编程接口

    除宏外,所以内容均位于agent名字空间内。

    7.1.  agent.h

    /***

      * 常量定义

      */

    enum

    {

    REPORT_MAX = 10240 /** 一次report的最大字节数 */

    };

    class IAgent

    {

    public:

        virtual ~IAgent() {}

        virtual void set_center(const std::string& domainname_or_iplist, uint16_t port) = 0;  


        /***

          * 上报数据给center,report调用只是将数据存放上报队列中,由agent异步上报

          * @data 需要上报的数据

          * @data_size 需要上报的数据字节数

          * @timeout_millisecond 超时毫秒数,

          *  当队列满时,如果超时毫秒数为0,则直接返回,数据不会被放入上报队列中;

          *  当队列满时,如果timeout_millisecond不为0,则等待指定的时长,如果在指定的时长内,

          *  上报队列一直是满的,则返回,并且数据不会被放入上报队列中

          */

        virtual bool report(const char* data, size_t data_size, uint32_t timeout_millisecond=0) = 0;

        virtual bool report(uint32_t timeout_millisecond, const char* format, ...) = 0;


        virtual bool register_command_processor(ICommandProcessor* processor) = 0;

        virtual void deregister_command_processor(ICommandProcessor* processor) = 0;

    };

    /***

      * 日志器,所以分发器实例共享

      * 如需要记录日志,则在调用create之前,应当先设置好日志器

      */

    extern sys::ILogger* logger;

    /***

      * 用来创建agent实例,注意agent不是单例,允许一个进程内有多个实例

      * @queue_size 上报队列大小,如果队列满,会导致消息丢失或report调用阻塞

      * @connect_timeout_milliseconds 与center连接的超时毫秒数,如果在这个时间内没有数据上报,

      *                               则会自动发送心跳消息,否则不会发送心跳消息

      */

    extern IAgentcreate(uint32_t queue_size, uint32_t connect_timeout_milliseconds);

    /** 销毁一个agent实例 */

    extern void destroy(IAgent* agent);

    7.2.  message.h

    #pragma pack(4) // 网络消息按4字节对齐

    /***

      * Agent消息头

      */

    typedef struct TAgentMessageHeader

    {

        NUInt32 size;     /** 消息包字节数 */

        NUInt32 command;  /** 消息的命令字 */

    }agent_message_header_t;

    /***

      * 简单的心跳消息,仅一个消息头

      */

    typedef struct TSimpleHeartbeatMessage

    {

        agent_message_header_t header;

    }simple_heartbeat_message_t;

    /***

      * 上报消息

      */

    typedef struct TReportMessage

    {

        agent_message_header_t header;

        char data[0]; /** 需要上报的内容 */

    }report_message_t;

    #pragma pack()

    7.3.  message_command.h

    /***

      * 上行消息命令字

      */

    typedef enum TUplinkMessageCommand

    {

        U_SIMPLE_HEARTBEAT_MESSAGE = 1, /** 简单心跳消息 */

        U_REPORT_MESSAGE           = 2  /** 上报消息 */

    }uplink_message_command_t;

    /***

      * 下行消息命令字,由ICommandProcessor处理

      */

    typedef enum TDownlinkMessageCommand

    {

    }downlink_message_command_t;

    7.4.  command_processor.h

    /***

      * 消息上下文结构

      * 由于是异步接收消息的,所以需要一个上下文结构来保存最新状态

      */

    typedef struct TMessageContext

    {

        size_t total_size;   /** 消息体的字节数 */

        size_t finished_size/** 已经收到的消息体字节数 */

        

        TMessageContext(size_t total_size_, size_t finished_size_)

         :total_size(total_size_)

         ,finished_size(finished_size_)

        {

        }

    }message_context_t;

    class ICommandProcessor

    public:

        virtual ~ICommandProcessor() {}

        /***

          * 返回该CommandProcessor处理的命令字

          */

        virtual uint32_t get_command() const = 0;

        /***

      * 有消息需要处理时的回调函数

      * 请注意消息的接收是异步的,每收到一点消息数据,都会回调on_message

      * 整个消息包接收完成的条件是msg_ctx.total_size和msg_ctx.finished_size+buffer_size两者相等

      * @buffer 当前收到的消息体数据

      * @buffer_size 当前收到的消息体数据字节数

      * @return 如果消息处理成功,则返回true,否则返回false,当返回false时,会导致连接被断开进行重连接

      */

        virtual bool on_message(const TMessageContext& msg_ctx, const char* buffer, size_t buffer_size) = 0;

    };

    8.  编程示例

    // 命令字1的CommandProcessor

    class CCommandProcessor1public ICommandProcessor

    private:

        virtual uint32_t get_command() const

        {

            return 1;

        }

        

        virtual bool on_message(const TMessageContext& msg_ctx, const char* buffer, size_t buffer_size)

        {

            fprintf(stdout, "[%zu:%zu] %.*s\n", msg_ctx.total_size, msg_ctx.finished_size, (int)buffer_size, buffer);

            return true;

        }

    };

    // 命令字2的CommandProcessor

    class CCommandProcessor2public CCommandProcessor1

    {

    private:

        virtual uint32_t get_command() const

        {

            return 2;

        }

    };

    // 命令字3的CommandProcessor

    class CCommandProcessor3public CCommandProcessor1

    {

    private:

        virtual uint32_t get_command() const

        {

            return 3;

        }

    };

    class CMainHelperpublic sys::IMainHelper

    {

    public:

        CMainHelper()

         :_agent(NULL)

        {

        }

        

    private:

        virtual bool init(int argc, char* argv[])

        {

            uint32_t queue_size = 100;

            uint32_t connect_timeout_milliseconds = 2000;

            

            _agent = agent::create(queue_size, connect_timeout_milliseconds);

            if (NULL == _agent)

            {

                return false;

            }

            

            _agent->register_command_processor(&_command_processor1);

            _agent->register_command_processor(&_command_processor2);

            _agent->register_command_processor(&_command_processor3);

            _agent->set_center(ArgsParser::center_ip->get_value(), 

                               ArgsParser::center_port->get_value());

            std::string report("test");

            while (true)

            {

                sys::CUtil::millisleep(3000);

                _agent->report(report.data(), report.size());

            }

            

            return true;

        }

        

        virtual void fini()

        {

            agent::destroy(_agent);

            _agent = NULL;

        }

        

        virtual int get_exit_signal() const

    {

    return SIGTERM;

    }

    private:

        agent::IAgent_agent;

        CCommandProcessor1 _command_processor1;

        CCommandProcessor2 _command_processor2;

        CCommandProcessor3 _command_processor3;

    };

    // 入口函数

    extern "C" int main(int argc, char* argv[])

    {

        if (!ArgsParser::parse(argc, argv))

        {

            fprintf(stderr, "Args error: %s.\n"ArgsParser::g_error_message.c_str());

            exit(1);

        }

        

        CMainHelper main_helper;

        return sys::main_template(&main_helper, argc, argv);

    }

    展开全文
  • amazon-ssm-agent, 代理来启用对AmazonEC2实例配置的远程管理 Amazon AgentAmazon是为简单系统管理器服务开发开发的简单系统管理器软件。 SSM代理是名为运行命令的功能的主要组件。概述SSM代理运行在EC2实例上,使你...
  • 提出了称为动作组件库的设计来支持分层的多agent应用集成框架。首先,提出采用由上层agent协调下层agent执行的企业应用集成方式的原因,说明了动作组件库的设计以及如何集成动作组件库的动作实例来支持下层agent完成...
  • 为了有效管理复杂分布式系统建造过程中的复杂性,提出了一种面向智能多agent系统的工程化软件建模技术.该方法使用扩展的UML用况图和顺序图来认定角色并建立角色模型,通过对agent的心智状态建模,使用扩展的UML状态...
  • DevOps专题|基础Agent部署系统

    千次阅读 2019-12-27 11:25:05
    随着京东云业务规模、管理机器规模的扩大,各类agent也在逐渐增多,如日志agent、监控agent、控制系统agent等。这对agent的部署、升级、状态维护提出了很高的要求,一旦某个全局agent进行了错误地部署、升级,可能会...

    Alt

    随着京东云业务规模、管理机器规模的扩大,各类agent也在逐渐增多,如日志agent、监控agent、控制系统agent等。这对agent的部署、升级、状态维护提出了很高的要求,一旦某个全局agent进行了错误地部署、升级,可能会导致agent的资源使用率过高,进而会对全公司的业务产生影响。在此背景下需要有一个统一管理系统来对全网agent的部署、升级进行管控,可以灵活的指定不同的发布策略进行灰度更新,如按照pin层面升级、按照集群层面等等。基于此,京东云自研了ifrit系统用于全网agent的部署、升级和状态维护。

    总体架构

    ifrit是阿拉伯神话中一种遇火而生,浴火重生的精灵,只有英雄才有驾驭它的能力。这里的“火”可以指代全网每一个节点,“英雄”则可以指代管理员。此外,阿拉丁神话中的“灯神”就是一种ifrit,灯神可以帮阿拉丁实现愿望,京东云ifrit系统也可以帮助我们管理节点。

    ifrit 架构自上而下分为ifrit-manage、ifrit-master、ifrit-agent三大模块,如下图所示:

    Alt

    ifrit-agent:负责本机所需业务agent以及ifrit-agent本身的部署、升级、状态维护,定期从ifrit-master中拉取本机agent配置用以管理本机所有agent。配置完成后向ifrit-master汇报本机的agent状态信息。

    ifrit-master:每个集群内部署一套master,向上提供ifrit-manage发布部署、更新指令和agent状态查询接口;向下为本集群内所有ifrit-agent提供agent配置信息查询和agent状态回传接口。

    ifrit-manage:向用户提供web界面,在该页面可以对指定agent进行灰度更新和全量更新、查看操作记录等。

    ifrit-agent

    ifrit-agent设计目标:

    • 定期获取agent配置信息并向master汇报agent状态信息

    • 程序包下载、校验

    • 安装

    • 卸载

    • 升级

    • 安装包完整性检测

    • 实例存活检测

    • 自升级

    • 自守护

    由于几乎所有部署、监控等相关功能都依赖于agent,ifrit-agent在机器中以服务形式存在并且开机自启动。若ifrit-agent启动时网络服务未启动。则会导致机器在数分钟内无法使用部署、监控、日志服务等功能,同时也无法采集到docker容器类应用的初始化日志,因此ifrit-agent启动时配备重试机制,以确保网络服务已经启动。

    ifrit-agent在访问master接口获取期望agent状态信息时,需要带上机器类型和机器uuid(例如内网中的ip、云主机上的instance-id等)。其中机器类型(主要是操作系统、cpu架构)可通过初始化时执行命令获取,或使用golang中的条件编译将机器类型直接写在程序中。

    iFrit-master

    ifrit-master负责agent管理工作,全网部署agent的增删查改都是通过ifirt-manage调用ifrit-master接口完成的。当集群规模增大时,直接读取mysql获取agent版本信息会对数据库造成很大压力,为了避免这类问题,ifrit-master中采用redis缓存,以固定时间间隔读取mysql中agent版本信息,并合成为ifrit-agent可直接读取的数据缓存到redis,如下图所示:

    Alt

    为了减少因agent升级导致的全网业务故障,ifrit-master提供了灰度发布机制,即指定一批机器更新agent到指定版本灰度运行。待灰度验证通过后,在集群内全量部署该agent。同时,ifrit系统可以根据不同机器类型部署不同的业务agent,目前京东云内支持了容器、linux物理机、arm64架构机器和windows系统机器。

    iFrit-manage

    ifrit-manage统一管理多个集群的master,主要功能如下:

    • 用户权限管理

    • 分级发布(集群粒度)

    • agent状态查询

    • 操作审计

    ifrit-manage本身作为运营后台的一部分,可读权限由运营后台统一管理。ifrit写操作是高危操作,默认只有超级管理员(一般为公司运维人员)有写权限,其他人员可以通过在配置文件中添加写权限。

    根据业务需要,可以将机器划分到不同集群中,当有agent需要变更时,运维人员在灰度验证通过后,按照给定的集群顺序分集群进行部署。运维完成一个集群的agent部署后,15分钟内(ifrit-agent主循环周期+ifrit-master redis缓存周期)该集群内所有指定类型机器应当变更生效,运维验证部署生效后方可对下一个集群进行部署。

    单集群分级发布

    以上的ifrit系统已经具备了集群粒度的分级发布功能,但是随着集群规模越来越大,集群粒度的agent上线仍然有很大风险,因此需要一套更细粒度的分级发布机制,以便于降低agent上线事故带来的影响。

    ifrit中根据集群规模大小,使用一致性hash算法将集群中的机器均匀分成若干批,并分批上线。一致性hash算法是hash算法的改进,和普通hash算法的关键区别是,对于节点和数据(ifrit中使用机器uuid)都做一次hash运算,并比较节点和数据的hash值,顺时针方向取距离数据点的节点。若hash后的节点分布不均匀,可通过引入虚拟节点增大节点数目,从而使得散落在hash环上的节点更加均匀,如下图。

    Alt

    Alt

    集群分批完成后,集群内进行agent全量上线时首先进行小流量验证,验证通过后按照一定时间间隔更新redis缓存信息,新增键值expect_default_hash1_CONTAINER等。此时ifrit-agent获取agent版本信息的优先级为:灰度数据>hash数据>全量数据(时间戳相同的情况)。还可以通过暂停更新/删除redis中hash类型的数据,实现agent上线的暂停与回滚(操作mysql数据间接实现)。

    自此,ifrit实现了单集群内的agent上线分级发布。

    看完本文后,您是否有所收获呢,如果您想了解更多关于京东云翼的讯息,欢迎点击“阅读”了解更多~

    也欢迎点击“京东云”了解更多精彩内容

    Alt

    Alt

    展开全文
  • 论文研究-基于Agent技术的企业资源计划系统研究.pdf, ...作为上述方法的应用实例 ,在基于 Agent系统的 ERP构架基础上 ,讨论了如何实现集成“遗产”系统和对企业流程再造的支持 ;最后提出了一些待研究课题 .
  • 分析了分布式信息系统中信息共享的需求和特点,阐述了一个基于移动Agent技术的分布式信息系统平台的设计和构造,论述了个互相协作、具有知识和目标的移动Agent在该系统中对分布式信息管理和共享的有效实现。...
  • 提出基于 Agent 的开放信息集成体系结构,该体系结构分为界面层、 协调层和模型层,每层 均由 Ag ent 系统组成。该体系结构的层次性以及 Ag ent 系统所具有的自主能力、 社交能力、 反应能 力和行为...
  • DB2系统级命令及实例级命令

    千次阅读 2014-06-14 23:50:09
    系统级命令: ...实例级命令: ...Used to create a instance.(用于创建一个DB2实例,DB2实例是用于执行DB2命令和函数所处...DB2中一台服务器可以有实例,每个实例相互独立, 但同一时刻只能有一个实例在运行。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,884
精华内容 23,953
关键字:

多agent系统实例