私が直面している問題は、単純な問題を解決する一連の jade エージェントを実行しているときに、実行中のエージェントの量に応じて、90 秒以内に jvm がヒープ領域を使い果たすことです。エージェントの目標は、いくつかのエージェントが負荷と別の世代を表す単純化されたマイクログリッド モデルで負荷と生成のバランスを取ることです。
次のコードに示すように、負荷エージェントは、ジェネレーターの動作の反復ごとに新しい値でジェネレーターを更新します。
public class House9 extends Agent
{
double load = 50;
boolean offline = false;
boolean valid = true;
int counter = 0;
double cur = 50;
int next;
public void setup()
{
addBehaviour(new SimpleBehaviour(this)
{
public void action()
{
//Adjusting load value
if(counter == 0)
{
load = (int)load;
cur = load;
next = 20+(int)(Math.random()*80);
//System.out.println("current: " + cur + " next " + next);
counter++;
}
else if(counter <= 1000)
{
load = load + ((next - cur)/1000);
//System.out.println("added " + ((next - cur)/1000) +" to load");
counter++;
}
else
{
counter = 0;
}
//System.out.println("counter " + counter);
//Sending result to the generator agent
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.setContent(Double.toString(load));
msg.addReceiver(new AID("gen", AID.ISLOCALNAME));
myAgent.send(msg);
}
public boolean done()
{
return offline;
}
});
}
すべての負荷エージェントはこれと同一であり、生成エージェントは次のとおりです。
public class Generator extends Agent
{
int output = 100;
long time = System.currentTimeMillis();
int iter = 0;
public void setup()
{
System.out.println("Iterations,Time");
addBehaviour(new CyclicBehaviour(this)
{
public void action()
{
//myAgent.setQueueSize(2);
int temp = output;
ACLMessage reply = receive();
if(reply != null)
{
int load = Integer.parseInt(reply.getContent());
//System.out.println("current state--- output: " + output + " load: " + load);
if(load > output)
{
iter = 0;
while(load > output)
{
output = output + 10;
iter++;
}
//System.out.println((System.currentTimeMillis()-time)+ "," + iter );
}
else if(load < output)
{
iter = 0;
while(load < output)
{
output = output - 10;
iter--;
}
//System.out.println((System.currentTimeMillis()-time)+ "," + iter );
}
System.out.println((System.currentTimeMillis()-time)+ "," + iter + "," + load + "," + temp + "," + myAgent.getCurQueueSize());
}
}
});
}
}
この種のことに関するインターネット上の他の投稿から、生成エージェントがヒープスペースを消費していた場合に備えて、生成エージェントのメッセージキューサイズを制限しようとしました。しかし、それらのどれも違いを生むようには見えませんでした。ヒープスペースを追加しようとしましたが、メモリ不足の例外が1分ほど遅れただけでした。jade エンジンが呼び出され、netbeans を介して jade gui が開始されます。
私はマルチエージェント プログラミングと jade の使用が初めてなので、この種のシステムを実行するためのより適切で最適な方法があり、それ自体が問題を説明する可能性があることを理解できます。しかし、問題の助けをいただければ幸いです。
ありがとう、カルム