Я написал программу, и все выглядит хорошо .. но во время выполнения агенты путают сообщения.например, у меня есть этот код:
ACLMessage msg = new ACLMessages (ACLMessage.INFORM);
msg.setContent = ("G" + groupID);
for(int i =0 ; i<50 ; i++){
msg.addReceiver(new AID("MyClass" + i, AID.ISLOCALNAME));
}
send (msg);
и предполагаю, что я получаю его так:
ACLMessage rcv = myAgent.receive();
и предполагаю, что я определяю другое ACLMessage в другой части программы, например, с именем msg2.... в другом блоке .. с содержимым = "T" + temp.
когда я получил следующее сообщение, я понял, что сообщения перепутаны ... они не принимаются должным образом.Я имею в виду, что выполнение приведенного ниже кода имеет 2 разных результата:
System.out.println("rcv Content is: " + rcv.getContent());
, и результат будет: G1, а иногда и так: T34
это ошибочное сообщение заставляет мою программу работать неправильно... Я изменил форматы сообщений, такие как: "T" + groupID + "T" или другие формы ... но это не сработало ..
////////////////////////////////////////////////// После того, как я научился использовать шаблоны сообщений:
case 17:{// in this case deligates send the avg to the supervisor
if(!deligateFlag){
state++;
break;
}
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.setConversationId("A");
msg.setContent("V" + avg);
//System.err.println("Content of rcv is: " + msg.getContent());
msg.addReceiver(mySupervisor);
send(msg);
System.out.println(myAgent.getLocalName()
+ " Says: I am deligate of group "
+ group
+ " And I sent the average temp of my followers "
+ "to the supervisor which is: "
+ mySupervisor.getLocalName());
state++;
break;
}
case 18:{/* in this case supervisor receives the avg temp of
each group and calculates the avg of averages and then
decides what to do*/
if(!supervisorFlag){
n=1;
state++;
break;
}
//System.err.println("This is Beginning of case 18");
if(supervisorFlag){
MessageTemplate mt = MessageTemplate.MatchConversationId("A");
ACLMessage msg = myAgent.receive(mt);
if (msg != null) { System.err.println("TContent is: " + msg.getContent());
dAvg += Character.getNumericValue(msg.getContent().charAt(1));
if(msg.getContent().charAt(0) == 'V'){
n++;
System.err.println("N is: " + n);
}
}
if(n > 4){
dAvg /= 4;
totalAvg = dAvg;
System.out.println("Supervisor "
+ myAgent.getLocalName()
+ "Says: The total average of whole system is: "
+ totalAvg);
}
state++;
break;
Проблема в том, что в лучшем случае программа работает до if (n>4)
.. и все останавливается .. без ошибок, без предупреждений ... просто останавливается .. даже n переходит к 5, но ничего не происходит ...Я не знаю, в чем может быть точная проблема ... сообщения ACL или я не знаю ... вообще я не знаю, почему в 90% программа не печатает TContent.что будет с сообщениями ..