Agent 与对象的辨析

news2024/11/28 14:53:00

如果说对象是70年代以来软件界最激动人心的革新之一,那么,Agent的相关理论和技术,为分布式开放系统的设计与实现提供了新的途径,可以称之为软件开发的又一重大突破。讨论问题的前提是概念的澄清,什么是对象?什么是Agent ?二者又有哪些区别和联系呢?

1e8af05cf9da41b9a8aea7c25b11fa64.jpeg

对象与OOP

对象是具有明确边界和意义的事物.也是某些问题的概念抽象,是一个封装了数据和方法的实体,一个对象的实质是一组数据和与它相关的方法及操作。它的特征由属性表示.属性的数据值表示对象的状态。系统开发人员通过对象所具有的属性来了解对象的静态结构。通过操作可改变对象的内部数据(私有的和受保护的数据).从而改变对象的状态。当其他对象向某个对象发送消息时,操作就得以进行和实现。每一个对象都有唯一的标识.以区别于一个类中的其他对象。一个对象不同于其他对象的关键是其属性值,构成其标识。

对象是为现实世界中的实体建立的抽象模型,它包括了实体的属性以及作用在实体上的操作。它具有唯一性、封装性和多态性等重要特性。对象一般由三部分组成:对象名、对象体和触发器。对象名唯一地标识一个对象,对象体是一个对象所封装的所有效据的集合.它可以是属性值的集合也可能是多个数据库的集合。触发器定义对象的哪些状态变化会引起事件的产生,是可选择的部分,它用于描述事件重要的状态变化。

面向对象程序设计(Object 0riented Programming,OOP)是70年代末提出,并在8o年代中后期开始使用的一种程序设计技术。在OOP的设计中。对象是一个动态概念,是对客观世界实体的数据抽象,即具有通信能力的特殊属性和行为方式的一些基本运行实体。类是一个静态概念,是一组对象的抽象定义或概括,且具有层次结构和继承性特征。面向对象程序设计的基本思想是:是一种以对象为基础,以事件驱动对象的程序设计技术,通过建立和具体实际相对应的软件对象,通过对这些对象的组合来创建具体的应用,通过对象属性定义,对象方法调用及编写对象事件函数来完整地描述对象,并实现对象之间的联系和对象本身的操作,从而 实现整个系统设计。

一般认为,OOP力图将问题空间的结构和概念直接映射到软件的解空间.从而使人类认识问题的过程与软件开发的过程保持一致。

ef6e7d7a6193da3106e8e47fff4dfb53.jpeg

Agent与AOP

什么是Agent 呢?Agent 是一个具有多重含义的概念,根据场景和视角的不同有着极大的差别。

从精神状态的角度来看,“如果一个实体可以用信念、承诺、义务、意图等精神状态进行描述.那么该实体可视为一个Agent”。如果建立单个Agent的目的是想模拟人的行为,而从精神状态的角度对人的行为分析是比较自然的,这也正是Agent作为人工智能基础理论的重要原因之一。一般第,这一定义被称之为Agent的强定义。弱定义,即“如果一个实体具有自主性、反应性、主动性、社交性四条基本性质,那么该实体也可以视为一个Agent”。

从设计者的角度来看,Agent 是一种抽象工具,通过它能使我们用更方便更熟悉的拟人化方式来描述、解 释、预测一个复杂系统的行为。一般来说.一个系统越复杂,我们对系统越不了解,就越需要用基于意图的立场来观察和解释它的行为。当然.在赋予Agent各种思维状态时.要求必须精确、简单而自然。

在计算机领域,agent是一种处于一定的环境下能够自主、智能地完成其他个体指派任务的系统。简单地说, Agent 指的是一种实体,而且是一种具有智能的实体。Agent的特点如下表:

特点英文解释
代理性Action On Behalf Others具有代表他人的能力,即它们都代表用户工作
自治性Autonomy能在非事先规划、动态的环境中解决实际问题,独立发现和索取符合拥护需要的资源、服务等等.
主动性Proactivity能够遵循承诺采取主动,表现面向目标的行为
反应性Reactivity能感知环境,并对环境作出适当的反应
社会性Social Ability能同代理代表的用户、资源、其它代理进行交流.
智能性Intelligence具有一定程度的智能,包括推理到自学习等一系列的智能行为
合作性Callaboration以与其它代理分工合作,共同完成单个代理无法完成的任务
移动性Mobility具有移动的能力,为完成任务,可以从一个节点移动到另一个节点

由于Agent的特性,基于Agent的系统应是一个集灵活性、智能性、可扩展性、鲁棒性、组织性等诸多优点于一身的高级系统.

面向代理实体的编程(Agent 0riented Programming,AOP)对计算持社会性观点,并结合了传统的面向对象程序设计的特点.如数据封装、消息传递等。需要注意的是,本文所指的AOP,不是面向切面的编程(Aspect Oriented Programming,AOP)。一般认为,完整的AOP系统应包含以下三个部分:

  • 一个逻辑系统以定义Agent的思维状态(Mental States);

  • 一个可解释的编程语言以便对Agent编程;

  • 一个Agent实现(Agentification)过程,将Agent程序编译为低层执行代码。

AOP实质上是对具有思维状态的智能实体进行编程。一个Agent程序给Agent的思维状态、环境的信息输入 以及Agent对环境的行为输出三者之间提供了一种联系。一般一个Agent程序包括:一个初始思维状态,它含一个初始信念集、一个初始意图集和一个初始规划集;一个思维状态改变规则集。初始信念集和意图集将用模态算符加上带时间索引的一阶谓词语言表达。初始规划集用带时序关系的原子动作序列来表达。一般地,初始规划集是空集。思维状态的改变规则集是Agent程序的核心。它包含两种规则,一种用于更新信念集和意图集,另一种用于产生规划。

AOP是一种以计算的社会观为基础的新型程序设计范例,它以智能体的设计和构造作为人工智能程序设计的核心,重视智能体的动态特征和智能体的交互活动,并将对分布式系统的研究与开发产生深刻的影响。

b5bf69b8cd810f9997eb330d12060deb.jpeg

面向Agent 与 面向对象 的建模

面向对象建模体现了面向对象软件开发中以模型驱动的基本思想.它将软件开发的重心转移到了分析阶段。在整个开发过程中,使用统一的概念——对象,而其它所有的概念都是围绕着对象组成的,在分析阶段中建立的对象模型也适合于设计和实现阶段,软件开发的各阶段比较统一。整个开发过程实际上就是对模型细化的过程,从而避免了传统的结构化方法中从数据流程图到模块层次结构图的转化过程。

面向对象建模的局限在于:

  1. 建模的描述过程不是很清楚,而建模的结果是各种图形的表示,它们不能具体地体现建模过程;

  2. 用图形表示分析过程,这样在表示大而复杂的系统时很不容易画得条理清晰;

  3. 系统的描述是不够详细的;

  4. 不含有语义的成分,这样对系统的描述是不够精确的, 有些操作会产生二义性。

面向Agent建模要把研究的系统看成是基于Agent的系统,然后运用Agent理论对所研究的问题进行抽象建模。基于Agent的系统具有的三个基本要素是:Agent(对应于实体)、事务(对应于活动)和资源。通过对这三个基本要素及之间的关联进行描述,即可从过程的角度对基于Agent的系统进行描述、抽象、建模。由于对面向Agent建模的认识是逐步深入的,很难从一开始就能给出一个详尽描述,因此以上步骤必然是一个有反 复的、逐步求精的过程。

“对象”的抽象和表达能力又远远的逊色于“Agent”,Agent扩展了“对象的内涵和使用范围”,它更适合复杂系统问题的描述与处理。面向Agent建模并不是否定面向对象建模.而是面向对象方法的延伸与拓展,两者区别主要表现在以下两个方面:

(1)对单个智能体而言,面向对象技术将客观世界看成“刚性的”对象,不具有组织和抽象出更高层次的构建单元的能力。而Agent自主、灵活的问题求解行为,能良好地表达出智能体的精神状态。

(2)对多智能体系统而言.面向对象技术无法对智能体之间丰富的交互行为进行完整的抽象,亦无法充分表达多智能体之间动态组织结构的复杂性;而面向Agent建模就比较适合。

0a3eb6689d43dbbb8dac631727b920d0.jpeg

面向Agent 与 对象软件工程

面向Agent的软件工程,其工作原理是将Agent看作为模型的构成条件,同时围绕对应的基本条件有条不紊的开展与系统相关的系列活动,被认为是目前技术性较强的软件开发模型。不管是软件系统还是应用系统,它的内部构成都包括多个Agent,Agent表现出来的特点主要有自发性、反应性、社会性和自主性,属于行为自控的行为实体。Agent与Agent之间表现出来的结构关系较为复杂,其作用是由高层相互交换来实现的,在这样的前提下达到系统设计的预期目标。

面向Agent软件工程针对系统研发来讲,不仅为其构建了系统平台,同时还完成了理论的提供和技术环境的提供。它主要通过系统的模块分解,数据建模和抽象理论完成系统数据的阐述和管理,达到了系统设计的基本要求和目标,这样更可以促进系统难度的提升和灵活性的增加,在此基础上还增加了维护性特点和重用性特点。面向Agent软件工程的基本思想与定义在理论论与软件工程整体规划处于同一个轨道线,基本特点体现出了自然抽象和功能强大。

(1)许多问题固有的分布性(数据、能力、控制)本身就是由多个交互自主实体组成的松散耦合网络。面向agent方法采用粗粒度的自主计算实体为抽象机制,以社会学的观点和人们熟悉的概念(组织,角色等)进行分析、建模、设计复杂分布式系统。面向对象方法则采用细粒度的非自主计算实体(对象)为抽象机制,对复杂问题分析与建模,面向agent较面向对象更自然、直观、简单,容易理解。

(2)面向agent分析与设计处理实体间知识级交互,实体能自主确定交互的方式、范围、时间,内容;同时,存在多种组织关系(如等级制、专家共同体、市场机制等),适合复杂系统的建模。面向对象方法中对象的交互是用处于语法级对象问的消息传递来实现,对象间的组织关系少(如包含、聚合关系),缺乏足够的机制来模型化复杂系统。

(3)面向agent软件工程主要强调角色、责任、服务、目标这些抽象机制来处理复杂性,以何时完成何种目标来分析应用领域,核心是完成的目标。面向对象方法主要强调完成目标的行为类型。因为在任何应用领域中目标比行为或计划更稳定,强调目标与强调行为这看似很小的改变,却导致实质上的不同,面向agent的目标分析使得系统设计更稳定、健壮、模块化,能进行渐增式地开发和测试,具有可扩展性。上下文敏感的计划提供了模块性和构成性,不必改变已有的计划,为实现同一目标的新的上下文计划可加入系统中,这使得系统能处理易变性和特例。

(4) 面向agent软编程的基本部件是agent;面向对象编程对定义基本部件状态没有明确规定,Agent模型的基本部件状态可包含信念、承诺、能力、选择等;OOP用方法引用处理消息,而AOP的消息类型来自言语行为理论,可包含通知、请求、提供、承诺、拒绝等,agent通信有专用语言,如KQML;通常agent在面向agent方法中被实现为有意图的系统.而OOP将对象作为类的实例。

就面向Agent软件工程中的程序设计而言,大于有三种方式:

(1)采用和LISP语法形式差不多的句子对Agent的组成部分进行表达,也包括对Agent系统的行为或者系统之间互相交流沟通,对于提高Agent系统的功能性有很大的帮助。(2)基于逻辑技术,逻辑系统包括一阶谓词逻辑以及时序逻辑等等,也可以作为Agent的程序设计语言来使用,在程序编写的时候,用逻辑系统来对Agent系统的各种方式以及内部组成里进行表述和定义,例如相关知识、意图和信念、原子动作和规则等都可以用逻辑技术来表述定义。逻辑技术的理论系统和语义定义都相当严谨。(3)运用了面向对象的软件开发技术和软部件技术,属于在语言级上对Agent系统程序提供支持。通常都是把Agent系统当成一个特有的对象,用Agent内部功能的预定义软部件来编程和实现Agent系统,它的前提是使用的软部件必须是一组已经封装的特殊类。

到2000年为止,面向Agent软件工程的研究与实践经历了一个由活跃到沉寂的过程,主要因素就是技术问题。近几年,随着人工智能技术走进人们的生产和生活,这方面的研究又再次掀起了热潮。

1221b8ec3a18afcfc7ba1842d4f5f419.jpeg

小结

Agent是对象实体延伸,Agent可以看作特殊意义上的对象,但Agent毕竟不同于对象,其区别主要表现在以下几个方面:

  • 尽管Agent与对象都是采用消息传递实现联系,但就对象而言.消息的传递是为了激活方法;而Agent是对消息进行区分的基础上.利用意图及复杂的协议进行建模以实现协商,决定是否答应执行所请求的行为。

  • Agent可主动运行,有自己的目标和行为,可由外部激励或内部状态而启动,而对象是纯被动的,只能由外部的消息控制。

  • Agent是一个自治的实体,具有自己的知识和分析问题方法,能理解信息并控制自己的行为,而对象只能机械地执行所规定的动作。

  • Agent能根据推理规则进行信息的抽象,而对象却一般不具备推理能力

如果把对象理解成存储组合处理器的话,那Agent就是存储、处理器和程序员的组合, 程序员能赋予了主体某种目的性和意志性。人在投影自己的思维主体时,最终的对等模型大概还是Agent,而不是对象,因此,Agent比对象的概念更广更深。

【关联阅读】

  • 架构软件工程的未来

  • 软件开发中的10个认知偏差

  • 软件依赖的一知半解

  • Crash?! ——软件崩溃后的数据一致性

  • 软件系统的多维性能模型

  • 关于软件研发生产力的误区与思考

  • 远程软件工程师的10个最佳实践

  • 软件架构的10个常见模式

  • 关于软件开发,都应该知道的10个常识

  • 嵌入式开源软件的十大弊端

  • 人工智能伦理学的一知半解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记49】JavaScript的this指向

一、this指向 每一个函数内部都有一个关键字thisthis的值, 和函数的调用有关, 与函数书写无关 1. 普通调用方式 一个普通的全局函数, 在正常调用的情况下, this window function fn() {console.log(this); }fn() // this window2. 函数放置到对象 如果将函数放置到对象…

图数据技术护航网络安全 - Neo4j 大中华区总经理 方俊强

网络数字化及人工智能为许多行业来革命性的进步,但与此同时,网络安全领域产生的问题也日益严峻。人工智能进攻性风险和网络威胁领域的发展正在重新定义企业安全,从而给企业带来了更高的挑战。如何守护网络安全,成为企业深化数字化…

CSDN第十一场竞赛

目录 1.比赛详情 2.竞赛详情 3.原题回顾 (1).圆小艺 思路模拟 代码实现 (2). K皇把妹 思路模拟 代码实现 (3).筛选宝物 思路模拟 代码实现 (4).圆桌 思路模拟 代码实现 4.总结 1.比赛详情 报名地址:https://edu.csdn.net/contest/detail/24?utm_sou…

目标检测论文解读复现之二十:基于改进Yolov5的地铁隧道附属设施与衬砌表观病害检测方法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

14个SpringBoot优化小妙招

1. 定义配置文件信息 有时候我们为了统一管理会把一些变量放到 yml 配置文件中 例如 用 ConfigurationProperties 代替 Value 使用方法 定义对应字段的实体 Data // 指定前缀 ConfigurationProperties(prefix "developer") Component public class DeveloperPro…

力扣(LeetCode)813. 最大平均值和的分组(C++)

动态规划 本题需要用到前缀和,前缀和需要将下标 iii 后移一位,所以我们将状态的下标 iii 也后移一位;由于状态转移依赖于 j−1j-1j−1 ,我们将 jjj 的下标后移一位。 class Solution { public:double largestSumOfAverages(vecto…

2022天梯赛练习集(2022.9-2022.10)

使用函数判断完全平方数 没有加(int)过不了 int IsSquare(int n){if((int)sqrt(n) * sqrt(n) ! n) return 0;else return 1; } 使用函数求余弦函数的近似值 double funcos(double e, double x){double sum 1, item 1;for(int i 0; fabs(item) >…

Tmuxs -高效使用Linux terminal

Tmuxs -高效使用Linux terminal前言what?重要概念安装Tmux 常用命令Tmux 常用内部命令窗口(window)指令:面板(pane)指令:如何用鼠标调整pane大小配置生效参考配置参考前言 这个利器绝对可以提升…

eMMC编程基础 -(二)eMMC基础介绍

eMMC编程基础 -(二)eMMC基础介绍1 eMMC 简介1.1 eMMC系统概述1.2 eMMC 的整体架构如下图片所示:2 Flash Memory1 eMMC 简介 eMMC 是 embedded MultiMediaCard 的简称。 eMMC 是对 MMC 的一个拓展,以满足更高标准的性能、成本、体…

文件包含笔记

很多语言支持使用包含文件,这样允许开发者把可重复使用的代码存入单个文件中,在未来需要使用时,将它包含在其他代码文件中即可使用。 如果是像 C/C 这种编译语言,即使可以包含任意文件,若没有调用其中函数也不会有什么…

【从零开始学微服务】05.微服务的优势和不足

大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。 没有“银弹” 在一些电影中,“银弹”被视作能迅速杀死狼人的武器,是杀死狼人的灵丹妙药。“银弹”常被比喻为解决复杂问题的良方或高招。 由于软件的复杂…

11.27

一.进制转换 这道题的思路就是先把每个数模对应的进制.再除以,就得到对应的, 因为可能会有16进制,所以直接弄一个字符串数组,按照"0123456789ABCDEF"顺序存储,再用模找里面对应的就可以了 但是有可能是负数,所以我们需要在此之前判断一下 如果用字符串临时拼接会产…

2008年武汉高校630操作系统真题B卷

操作系统————核心系统软件 竞争计算机系统资源的基本单位————进程 UNIX————分时操作系统 操作系统中必不可少的调度————进程调度 进程和程序的本质区别————前者是动态后者是静态 磁带————顺序存储文件 某进程在运行过程中需要等待从磁盘上读入数…

tensorflow-serving docker模型部署(以mnist为例)

✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Tensorflow 文章目录前言一、环境介绍二、tensorflow-serving docker安装三、单模型部署 (以官方demo saved_model_half_plus_two_cpu为例)1、docker模型部署2、python requests模型预测四、多模型部署 (以mni…

算法提升:图的拓扑排序算法

目录 概念 思路 代码 概念 拓扑序列:一些活动,其中某些活动必须在另一些活动完成之后才能开始,一定是无环的有向图,称为AOV网。 拓扑排序,其实就是对一个有向图构造拓扑序列的过程。构造时会有两个结果&#xff1a…

Go中赋值和转换关系

Go中的赋值跟类型转换: 在java中反射是可以获取继承关系,而go语言实际是不支持继承的,所以必须是相同的类型才能使用AssignableTo(),ConvertibleTo() package mainimport ("fmt""reflect" )type User struct {Name string } func demo(){user:User{Name:…

C#语言实例源码系列-实现自定义屏保

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

Class文件结构

文章目录1.概述1.1 字节码文件的跨平台性1.2 Java的前端编译器1.3 透过字节码指令看代码细节2. 虚拟机的基石:Class文件3. Class文件结构3.1 魔数3.2 Class文件版本号3.3 常量池3.4 访问标识3.5 类索引、父类索引、接口索引集合3.6 字段表集合3.7 方法表集合3.8 属性表集合4. 使…

No.178# 混沌工程相关内容梳理

引言随着公司规模业务的快速增长,数以千计甚至万计的微服务,依赖的各类组件越来越多。分布式体系架构体系越来越复杂,没有任何一个人能够掌控所有复杂的耦合性。也就是说复杂性无法避免,不可能再回到单体应用,也无法彻…

西门子精彩触摸屏SMART V3组态配方的具体方法示例

西门子精彩触摸屏SMART V3组态配方的具体方法示例 本次和大家分享在精彩系列触摸屏中进行配方组态的具体方法,以下内容仅供大家参考: 如下图所示,首先,在连接中添加新的连接,这里以S7-200SMART为例,PLC和HMI的IP地址要设置在同一网段内, 如下图所示,在变量中,添加配…