Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7917
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 52
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-21 11:20
个人简介

你若盛开 清风自来

文章分类
文章存档

2014年(2)

我的朋友

分类: 云计算

2014-03-04 10:30:43

最近一直在研究如何二次开发CloudSim,在CloudSim平台上实现我的agent协商,并且协商中还要加入信用模型的概念。

有协商,协商的双方就必须要有交流,CloudSim刚好有实体之间可以相互发送消息,这个平台相互发送消息的方法核心介绍下我的学习心得。

CLoudSim的相互发送消息,是通过实体完成的,只有实体之间才可以发送消息。就是继承了Entity类,实现其中的开始,执行,结束三个方法(startEntity(),processEvent(SimEvent),shutdownEntity())。CLoudSim中只有3个比较常用的类继承了实体类,有Datacenter 类,DatacenterBroker类,CIS类。由此可见这三个之间可以发送消息。如何接受消息呢?就是通过事件标签来识别。

那我们如何借助这些类,实现自己的消息传送呢?
就拿我们的协商为例,我们将Datacenterl类,作为卖家,将DatacenterBroker作为买家。
伪代码流程是:卖家先叫价;将价格发送给买家;买家判断下价格是否满足自己;满足发送Ok,不满足发送自己的价格给卖家啊。
这就是一轮的协商;

那我们看看在CLoudSim是如何实现的。在前面的海阔天空微博里已经将到了仿真的主要流程。整个仿真是从startSimulation开始。
我们需要修改的是 Datacenter类和DatacenterBroker类,和CloudSimTags类。


在Datacenter类中,我们添加如下代码:

点击(此处)折叠或打开

  1.              //修改变动,增加negotiation tag

  2.             case CloudSimTags.Negotiation_Start:
  3.                 
  4.                 processNegotiationStart(ev);
  5.                 break;
  6.             case CloudSimTags.Negotiation_Price:
  7.                 processNegotiationToBroker(ev);
  8.                 break;
  9.             case CloudSimTags.Negotiation_Success:
  10.                 processNegotiationSucess(ev);break;
  11.             
  12.             case CloudSimTags.Negotiation_Failed:
  13.                 processNegotiationFailed(ev);break;

这些函数都是自己的处理函数,按照自己的思想来;

在DatacenterBroker中,我们同样加入事件处理代码:

点击(此处)折叠或打开

  1. //增加改动
  2.             case CloudSimTags.Negotiation_Price:
  3.                 processNegotiationToDatacenter(ev);
  4.                 break;
  5.             case CloudSimTags.Negotiation_Success:
  6.                 processNegotiationSucess(ev);
  7.                 break;
  8.                 
  9.             case CloudSimTags.Negotiation_Failed:
  10.                 processNegotiationFailed(ev)

以上的CloudSimTags.......之类的这些事常量,需要再tag类中自己添加

点击(此处)折叠或打开

  1. //有协商起价,协商价格,协商成功,协商失败事件标准

  2.     
  3.     public static final int Negotiation = 200;
  4.     
  5.     
  6.     public static final int Ask_price=Negotiation+1;
  7.     
  8.     public static final int Negotiation_Price=Negotiation+2;
  9.     
  10.     public static final int Negotiation_Failed=Negotiation+3;
  11.     
  12.     public static final int Negotiation_Success=Negotiation+4;
  13.     
  14.     public static final int Negotiation_Start=Negotiation+5;

这里可以得到相应的结果,我只运行了一个对一个的情况,一个对多个的情况,对于多对多的情况,还需要相应的改进。现在需要在协商模型中加入信任度模型,遇到很多困难,比如说,事件的时间问题,发送事件处理有一定的延时,如果你想通过发送事件处理之后,得到一个判断,这样的思想行不通。现在CLoudSim平台还有很多东西没有弄明白,比如说事件的处理顺序问题,是接下来研究的重点内容。如果有志同道合的可以相互交流。

阅读(1111) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~