最近一直在研究如何二次开发CloudSim,在CloudSim平台上实现我的agent协商,并且协商中还要加入信用模型的概念。
有协商,协商的双方就必须要有交流,CloudSim刚好有实体之间可以相互发送消息,这个平台相互发送消息的方法核心介绍下我的学习心得。
CLoudSim的相互发送消息,是通过实体完成的,只有实体之间才可以发送消息。就是继承了Entity类,实现其中的开始,执行,结束三个方法(startEntity(),processEvent(SimEvent),shutdownEntity())。CLoudSim中只有3个比较常用的类继承了实体类,有Datacenter 类,DatacenterBroker类,CIS类。由此可见这三个之间可以发送消息。如何接受消息呢?就是通过事件标签来识别。
那我们如何借助这些类,实现自己的消息传送呢?
就拿我们的协商为例,我们将Datacenterl类,作为卖家,将DatacenterBroker作为买家。
伪代码流程是:卖家先叫价;将价格发送给买家;买家判断下价格是否满足自己;满足发送Ok,不满足发送自己的价格给卖家啊。
这就是一轮的协商;
那我们看看在CLoudSim是如何实现的。在前面的海阔天空的微博里已经将到了仿真的主要流程。整个仿真是从startSimulation开始。
我们需要修改的是 Datacenter类和DatacenterBroker类,和CloudSimTags类。
在Datacenter类中,我们添加如下代码:
-
//修改变动,增加negotiation tag
-
-
case CloudSimTags.Negotiation_Start:
-
-
processNegotiationStart(ev);
-
break;
-
case CloudSimTags.Negotiation_Price:
-
processNegotiationToBroker(ev);
-
break;
-
case CloudSimTags.Negotiation_Success:
-
processNegotiationSucess(ev);break;
-
-
case CloudSimTags.Negotiation_Failed:
-
processNegotiationFailed(ev);break;
这些函数都是自己的处理函数,按照自己的思想来;
在DatacenterBroker中,我们同样加入事件处理代码:
-
//增加改动
-
case CloudSimTags.Negotiation_Price:
-
processNegotiationToDatacenter(ev);
-
break;
-
case CloudSimTags.Negotiation_Success:
-
processNegotiationSucess(ev);
-
break;
-
-
case CloudSimTags.Negotiation_Failed:
-
processNegotiationFailed(ev)
以上的CloudSimTags.......之类的这些事常量,需要再tag类中自己添加
-
//有协商起价,协商价格,协商成功,协商失败事件标准
-
-
-
public static final int Negotiation = 200;
-
-
-
public static final int Ask_price=Negotiation+1;
-
-
public static final int Negotiation_Price=Negotiation+2;
-
-
public static final int Negotiation_Failed=Negotiation+3;
-
-
public static final int Negotiation_Success=Negotiation+4;
-
-
public static final int Negotiation_Start=Negotiation+5;
这里可以得到相应的结果,我只运行了一个对一个的情况,一个对多个的情况,对于多对多的情况,还需要相应的改进。现在需要在协商模型中加入信任度模型,遇到很多困难,比如说,事件的时间问题,发送事件处理有一定的延时,如果你想通过发送事件处理之后,得到一个判断,这样的思想行不通。现在CLoudSim平台还有很多东西没有弄明白,比如说事件的处理顺序问题,是接下来研究的重点内容。如果有志同道合的可以相互交流。
阅读(840) | 评论(0) | 转发(0) |