在对系统中最重要的辩论谈判过程和系统的功能结构进行分析后,结合基于Agent间辩论的汽配交易自动谈判系统可能涉及的其他方面,我们开发了相应的原型系统,具体如下。
6.3.1 系统设计和说明
假定多Agent系统中存在若干个代表买方的Buyer Agent以及若干个代表卖方的Seller Agent,它们之间需要就汽配产品交易。交易过程中,可能出现谈判僵局,而为了打破僵局,实现交易,它们之间将通过辩论的方式进行自动谈判。其中主要有膨胀阀、空调软管、汽车车灯、橡胶护套四种产品可供选择,并主要通过价格、数量、交货期这三个指标来衡量每种产品对交易各方的交易满意程度。
为体现多Agent间的辩论谈判,系统中通过第一阶段的威胁和奖励的策略及模型来选择合适的交易伙伴,并通过第二阶段的具体辩论交互过程模型来确定经过第一阶段辩论后确定了交易关系的谈判双方通过这一阶段辩论后最终成交的价格、质量、交货期,即交易满意程度。为此,系统中设计了1个Buyer Agent(称为汽配购买商1)和两个Seller Agent(分别称为汽配销售商1和汽配销售商2)。
系统运行时,需要先启动Jade平台,然后启动Buyer Agent(即汽配购买商1),再启动Seller Agent(汽配销售商1和汽配销售商2一样,只是名称不同,以下主要以汽配销售商1为例),通过这两类Agent之间的交互来完成整个辩论谈判,从而完成两者之间的交易。此外,系统中还设计了Seller Agent Propose Gui和Seller Agent Threat_Reward Gui这两个类来进行报价询问和与威胁及奖励相关信息的输入。因此,这里分别对这两类Agent的设计及主要代码进行说明。
1.Buyer Agent设计及主要代码
在Buyer Agent中,主要包括如下两个部分:
(1)交互子Agent的设计
在系统中通过Buyer Agent Frame这个类来实现,当Buyer Agent启动时,首先启动这个类,在屏幕中会弹出一个窗口,窗口中有4个菜单项,即膨胀阀、空调软管、汽车车灯、橡胶护套这四种产品,买方可以从这些菜单项中选择打算交易的产品,并且在辩论谈判的过程中,窗口一直存在,有关购买方的辩论谈判信息都会显示在这个窗口下方已经设置好的文本区内,这个类的主要代码如下:
class Buyer Agent Frame
extends JFrame implements Action Listener{
……
public Buyer Agent Frame(Buyer Agent buyer Agent){
this.my Agent=buyer Agent;
try{
jb Init();
}
catch(Exception e){
e.print Stack Trace();
}
}
private void jb Init()throws Exception{
this.set Size(510,650);
this.set Visible(true);
set Title("基于AGENT间辩论的汽配交易自动谈判系统");
……
//设计文本区,显示Buyer Agent和Seller Agent之间的辩论谈判信息
……
j Label1.set Text("基于AGENT间辩论的汽配交易自动谈判系统");
buyerarea.set Text("辩论谈判信息显示……\n\n\n");
…… }
public void action Performed(Action Event e){
String act=e.get Action Command();
if(act.equals("膨胀阀")){
Gui Event ge=new Gui Event(this,my Agent.n Valve);
ge.add Parameter("膨胀阀");
my Agent.post Gui Event(ge);
}
else……
//此处可添加其余产品代码
else if(act.equals("退出")){
shut Down();
}
}
……
}
(2)前期辩论谈判子Agent和后期辩论谈判子Agent的设计
将这两个子Agent封装进Buyer Agent这个类中,因此,在系统中通过Buyer Agent这个类来实现,主要通过继承Jade平台所提供的Behaviour这个类来实现,并且将相关的算法封装在这个类中。此外,Buyer Agent这个类还具有在黄页中注册、寻找销售商和交易结束后解除注册这三个基本功能,因此,是系统中的最主要部分。这个类的主要代码如下:
public class Buyer Agent
extends Gui Agent{
……
protected void setup(){
……
//在黄页中搜索销售商
add Behaviour(new Behaviour(this){
public void action(){
……
}
public boolean done(){
return true;
}});
//Buyer Agent运行结束,清除
protected void take Down(){
System.exit(0);
}
……
private class Buyer Negotiation Performer
extends Behaviour{
private int step=0;
……
public Buyer Negotiation Performer(Seller Agent
a,String pro){
super(a);
pro_name=pro;
}
//开始进行询价和辩论谈判
public void action(){
……
switch(step){
case 0: ……
case 1: ……
case 2: ……
}
}
}
}
2.Seller Agent设计及主要代码
与Buyer Agent类似,在Seller Agent中,相应地也主要包括如下两个部分:
(1)交互子Agent的设计
在系统中通过Seller Agent Frame这个类来实现,当Seller Agent启动时,先启动这个类,在屏幕中弹出一个窗口,卖方也可以从通过这个窗口中的菜单项选择打算交易的产品,有关销售方的辩论谈判过程的信息也会在这个窗口下方已经设置好的文本区内得到显示。因此,这个类的主要代码与Buyer Agent类似,大致如下:
class Seller Agent Frame(www.xing528.com)
extends JFrame implements Action Listener{
……
public Seller Agent Frame(Seller Agent seller Agent){
this.my Agent=seller Agent;
try{
jb Init();
}
catch(Exception e){
e.print Stack Trace();
}
}
private void jb Init()throws Exception{
this.set Size(510,650);
this.set Visible(true);
set Title("基于AGENT间辩论的汽配交易自动谈判系统");
……
//设计文本区,显示Seller Agent和Buyer Agent之间的辩论谈判信息
this.get Content Pane().set Layout(x YLayout1);
j Label1.set Font(new java.awt.Font("幼圆",Font. BOLD,25));
j Label1.set Text("基于AGENT间辩论的汽配交易自动谈判系统");
sellerarea.set Text("辩论谈判信息显示……\n\n\n");
…… }
public void action Performed(Action Event e){
String act=e.get Action Command();
if(act.equals("膨胀阀")){
Gui Event ge = new Gui Event(this,my Agent. n Valve);
ge.add Parameter("膨胀阀");
my Agent.post Gui Event(ge);
}
else……
//此处可添加其余产品代码
else if(act.equals("退出")){
shut Down();
}
}
……
}
(2)前期辩论谈判子Agent和后期辩论谈判子Agent的设计
这里也将这两个子Agent封装进Seller Agent这个类中,因此,在系统中通过Seller Agent这个类来实现,与Buyer Agent不同,这里主要通过继承Jade平台所提供的Cyclic Behaviour这个类来实现,并且将相关的算法封装在这个类中,以体现销售方和购买方之间的辩论谈判交互过程是自动的。此外,Seller Agent这个类也具有在黄页中注册、寻找购买商及交易结束后解除注册这三个基本功能。这个类实现的主要代码如下:
public class Seller Agent
extends Gui Agent{
……
protected void setup(){
……
//在黄页中搜索注册
……
try{
DFService.register(this,dfd);
}
……
add Behaviour(new Seller Performer_get Pro Name());
protected void take Down(){
//从黄页中注销
try{
DFService.deregister(this);
}
catch(FIPAException fe){
fe.print Stack Trace();
}
}
}
……
private class Seller Performer_get Pro Name
extends Cyclic Behaviour{
}
……
}
6.3.2 系统运行及实现
在系统运行的过程中,需要让Jbuilder2006和其中的Project都对Jade平台进行识别,对此先进行以下说明:
1.Jbuilder20066和其中的Project如何识别Jade项目
(1)Jbuilder识别Jade
①Tools→Configure→Libraries→User home→New,弹出New Library Wizard,输入Name:Jade Libs(也可自定义),Location里选择User home,点Add,在Library path里逐个添加Jade包(可从Jade官方网站上下载)中后缀名为.jar的文件,分别为commons-codec-1.3.jar、http.jar、iiop.jar、jade.jar、jade Tools.jar。全部添加完毕后,点OK。
②回到前面的窗口,在User home下方会出现Jade Libs,在Library Settings里的Class里会出现刚才添加的5个文件。点Required Libraries,再点Add,点击User home下方的Jade Libs,将其添加至Required Libraries里,点OK,完成Jbuilder识别Jade。
(2)Project识别Jade
除了在Location里选择Project外,其余操作与上一步一样。
2.系统运行主要界面
①汽配购买商1(以下简称为购买方)选择需要购买的产品,并向汽配销售商1(以下简称为销售方)提出,见图6-4。
图6-4 购买方选择交易产品
②销售方收到购买方的询价信息后,准备报价,见图6-5。
图6-5 销售方准备向购买方报价
③销售方向购买方报价,见图6-6。
图6-6 销售方向购买方报价
④购买方对报价做出判断(拒绝报价),见图6-7。
图6-7 购买方拒绝销售方的报价
⑤销售方向购买方提出威胁(或奖励),开始辩论谈判,见图6-8和6 9。
图6-8 销售方准备向购买方提出威胁或奖励
图6-9 销售方向购买方提出威胁或奖励
⑥购买方同意销售方提出的威胁(或奖励),并进一步完成所有的辩论谈判(自动完成),双方的辩论谈判信息见图6-10和6 11。
图6-10 购买方的辩论谈判信息
图6-11 销售方的辩论谈判信息
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。