Research Article

Optimizing Negotiation Conflict in the Cloud Service Negotiation Framework Using Probabilistic Decision Making Model

Sourcecode 1

CloudBuyerAgent.java.
package cloudTradingNorConVsColCon.buyer;                        
import jade.core.;
import jade.core.behaviours.;
import jade.lang.acl.;
import jade.domain.;
import jade.domain.FIPAAgentManagement.;
import java.util.Vector;
import java.util.Date;
import java.util.;
import java.io.;
public class CloudBuyerAgent extends Agent
protected void setup()
System.out.println("Buyer-agent "+getAID().getName()+" is ready.");
Object args = getArguments();
if (args != null && args.length > 0)
for (int i = 0; i < args.length; ++i)
AID seller = new AID((String) args[i], AID.ISLOCALNAME);
sellerAgents.addElement(seller);
addBehaviour(new TickerBehaviour(this, 60000)
protected void onTick()
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("Cloud-selling");
template.addServices(sd);
DFAgentDescription result = DFService.search(myAgent, template);
sellerAgents.clear();
for (int i = 0; i < result.length; ++i)
sellerAgents.addElement(result[i].getName());
);
protected void takeDown()
if (myGui != null)
myGui.dispose();
System.out.println("Buyer-agent "+getAID().getName()+"terminated.");
public void purchase(String title, float maxPrice, Date deadline)
addBehaviour(new PurchaseManager(this, title, maxPrice, deadline));
private class PurchaseManager extends TickerBehaviour
private PurchaseManager(Agent a, String t, float mp, Date d)
super(a, 60000); // tick every minute
title = t;
maxPrice = mp;
deadline = d.getTime();
initTime = System.currentTimeMillis();
deltaT = deadline - initTime;
public void onTick()
long currentTime = System.currentTimeMillis();
if (currentTime > deadline)
myGui.notifyUser("Deadline expired for buying "+title);
stop();
else
long elapsedTime = currentTime - initTime;
long negotiationTime = (deadline - initTime)/60000;
initialPrice=15;
if(negRound==0)
myGui.notifyUser("Current Time: "+initTime);
myGui.notifyUser("Deadline Time: "+deadline);
myGui.notifyUser("Possible Negotiation Round: "+negotiationTime);
float acceptablePrice = (float)Math.round(initialPrice);
myAgent.addBehaviour(new CloudNegotiator(title, acceptablePrice, this));
cPrice=acceptablePrice;
else
concessionPrice=concessionPrice+1;
float acceptablePrice = (float)Math.round(initialPrice+concessionPrice);
myAgent.addBehaviour(new CloudNegotiator(title, acceptablePrice, this));
cPrice=acceptablePrice;
negRound+=1;
myGui.notifyUser("Negotiation Round: "+negRound);
myGui.notifyUser("Deadline Time: "+deadline);
private class CloudNegotiator extends Behaviour
public CloudNegotiator(String t, float p, PurchaseManager m)
super(null);
title = t;
maxPrice = p;
manager = m;
public void action()
switch (step)
case 0:
myGui.notifyUser("Current Time: "+System.currentTimeMillis());
ACLMessage cfp = new ACLMessage(ACLMessage.CFP);
cfp.addReceiver((AID)sellerAgents.elementAt(i));
cfp.setContent(String.valueOf(cPrice));
cfp.setConversationId("cloud-trade");
cfp.setReplyWith("cfp"+System.currentTimeMillis()); // Unique value
myAgent.send(cfp);
myGui.notifyUser("Sent Call for Proposal at price"+cPrice);
mt = MessageTemplate.and(
MessageTemplate.MatchConversationId("cloud-trade"),
MessageTemplate.MatchInReplyTo(cfp.getReplyWith()));
case 1:
ACLMessage reply = myAgent.receive(mt);
BufferedWriter bw = new BufferedWriter(new FileWriter("C:/jade/src/project/output/ITBA5.txt", true));
bw.write(String.valueOf(reply.getSender().getLocalName()));
if (reply != null)
if (reply.getPerformative() == ACLMessage.PROPOSE)
pPrice=Float.valueOf(reply.getContent());
myGui.notifyUser("Received Proposal at "+pPrice+" when maximum acceptable price was "+cPrice);
bw.write(String.valueOf("PROPOSE"));
bw.write(String.valueOf(pPrice));
else if (pPrice == cPrice)
ACLMessage orderAccept = new ACLMessage(ACLMessage.ACCEPT_PROPOSAL);
orderAccept.addReceiver(bestSeller);
orderAccept.setContent(String.valueOf(pPrice));
orderAccept.setConversationId("cloud-trade");
orderAccept.setReplyWith("order"+System.currentTimeMillis());
myAgent.send(orderAccept);
myGui.notifyUser("send Accept Proposal");
bw.write(String.valueOf("ACCEPT_PROPOSAL"));
bw.write∖t);
bw.write(String.valueOf(pPrice));
step = 4;
else
bw.write(String.valueOf("ACCEPT_PROPOSAL")); //
else block();
case 2:
BufferedWriter bw = new BufferedWriter(new FileWriter("C:/jade/src/project/output/ITBA5.txt", true));
if (bestSeller != null && bestPrice <= maxPrice)
ACLMessage order = new ACLMessage(ACLMessage.ACCEPT_PROPOSAL);
order.addReceiver(bestSeller);
order.setContent(String.valueOf(pPrice));
order.setConversationId("cloud-trade");
order.setReplyWith("order"+System.currentTimeMillis());
myAgent.send(order);
myGui.notifyUser("send Accept Proposal");
mt = MessageTemplate.and(
MessageTemplate.MatchConversationId("cloud-trade"),
MessageTemplate.MatchInReplyTo(order.getReplyWith()));
case 3:
BufferedWriter bw = new BufferedWriter(new FileWriter("C:/jade/src/project/output/ITBA5.txt", true));
reply = myAgent.receive(mt);
if (reply != null)
Purchase order reply received
if (reply.getPerformative() == ACLMessage.ACCEPT_PROPOSAL)
bw.write(String.valueOf("ACCEPT_PROPOSAL"));
bw.write(String.valueOf(pPrice));
ACLMessage commit = new ACLMessage(ACLMessage.ACCEPT_PROPOSAL);
commit.addReceiver(bestSeller);
commit.setContent(String.valueOf(pPrice));
commit.setConversationId("cloud-trade");
commit.setReplyWith("order"+System.currentTimeMillis());
myAgent.send(commit);
myGui.notifyUser("SLA Commit Proposal");
myGui.notifyUser("Cloud service successfully purchased.");