现实世界中的代理导向设计?

7
我们在我的软件开发课上学习了面向Agent的编程,我的教授是它的狂热支持者,他一生都在使用它。
我的问题是关于从设计和实现角度使用Agents的真正优缺点。从我的教授的角度来看,与普通OOP方法相比,Agents可以更容易地重新创建非常复杂的操作。但在复杂环境中,Agents似乎同样难以编程。它们受到各种并发,时间和数据完整性问题的影响。从编码人员的角度来看,Agent代码相当复杂,比普通OOP代码难以理解。
有人能给我一个关于软件Agents在实际开发中如何被看待以及除了学术练习之外的优缺点的想法吗?

3
因为你的教授已经研究这个话题一生了,所以你需要将他对这个话题发表的所有积极言论除以10。 - Anton Tykhyy
在学术界开发一种技术,几年甚至几十年后才进入市场和企业编程领域是非常普遍的。此外,你应该考虑到并不存在万能解决方案:我相信面向代理的编程有很多好处,但如果在实现目标时它开始带来更多麻烦而不是好处,那么可能这并不是正确的工具。 - Lundberg
1
不幸的是,面向代理的设计在僵尸网络中非常成功。 - k3b
2个回答

10
在人工智能中,“代理”一词的使用(这很可能是您所指的,这是最常见的学术参考)实际上是“代表用户行动的软件程序”的同义词。代理被视为更具吸引力,因为它是一个有些人格化的术语,是用户的代理;此外,它往往与更高级别的功能(代理计划、代理学习、自主代理等)相关联。关于该术语起源的更多信息,请参阅维基百科: http://en.wikipedia.org/wiki/Software_agent 鉴于此,术语“代理”更多地涉及软件的目的和类型,而不是它的编程方式。面向对象编程更多地涉及其技术设计/实现。
因此,使用面向对象编程原则来设计代理程序是没有问题的。这两个主题并不互斥。
此外,请记住(正如上面一些评论所暗示的,并且我也同意):在学术界中使用“代理”这个词是一种浪漫化的说法;大多数软件都是代表某些用户行事,因此许多东西都具有代理功能。归根结底,这只是软件,如果将“代理”一词从我们集体的词汇中删除,就不会惩罚纯粹的软件设计/实现能力。您将在特定于代理导向编程的论坛上看到这个相同的辩论,例如: http://ootips.org/agent-orientation.html

2
智能代理和代理(例如您的恒温器)之间有区别。如果我们谈论智能代理,则代理必须对环境进行适应性反应,积极主动(目标导向)和社交(知道如何与其他代理互动)。如果智能代理无法实现其目标,则可能不想合作。正如人们所说:对象免费工作,但代理需要报酬。 - avatar
这是一个我不太想要打负分的答案,但不,这不是关于人工智能的。或者我应该说不一定是关于人工智能的。人工智能可能是代理导向编程的一个例子,但它并不是整个概念。我认为下面用户3617099的回答更接近它,OP中的维基百科条目也是如此。 - Raydot

1
我觉得在所有的答案中缺少了一些东西,也是我认为代理/演员编程和“普通”的面向对象编程之间最重要的区别:

  • AOP是OOP上更高层或“级别”(通常使用OOP实现)。

  • AOP的全部内容都是为了使并发(多线程)编程更容易,有明确定义的标准方法(每种语言或框架)从而使其更清晰结构化。并发功能在AOP框架或语言中实现,而OOP中的多线程则由开发人员自行实现,可以以任何他/她喜欢的方式实现(其中之一可能是AOP :P)。

一些支持AOP的语言的例子:新版本的NI Labview和Erlang等。维基百科有更多的例子。

直观地说,我猜一般来说:你添加到软件中的功能越多,使用AOP就会获得越多的好处。如果您不使用AOP(或其他多线程框架),您可能会遇到AOP已经为您解决的所有问题,例如:死锁、竞争条件、线程之间的低效通信(事件队列、消息队列、数据队列等)。

一个好的(意外的)面向Actor的架构示例: 互联网。因为它由“代理”(节点/服务器/客户端)组成,可以并发地工作,并且可以容忍其他服务器和通信通道的失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接