📄 pheromoneagent.java
字号:
}
else
{
GraphEventManager.getReference().getProperties(GraphEventManager.getReference().getConnectingEdge(previousNode, nextNode)).addInformation("Agents", this);
}
}
if (status == RETURNING)
{
improvePheromone(currentGraphCell);
GraphEventManager.getReference().getProperties(currentGraphCell).removeInformation("Agents", this);
if (currentGraphCell == origin)
{
// Agent has returned.
status = DEAD;
getOriginalQuery().finished();
}
else
{
int maxGradient = 0;
Iterator gradientFieldIterator = GraphEventManager.getReference().getProperties(currentGraphCell).getInformation("Gradient");
Gradient tempGradient;
if (gradientFieldIterator != null)
{
while (gradientFieldIterator.hasNext())
{
tempGradient = (Gradient)gradientFieldIterator.next();
if (tempGradient.getSource() == origin)
{
nextNode = tempGradient.getBackPointer();
maxGradient = tempGradient.getDistance();
}
}
}
if (maxGradient == 0)
{
//Neem willekeurige node.
nextNode = getRandomGraphCellFromExcept(currentGraphCell, previousNode);
//System.out.println("properties edge van " + currentGraphCell + " to " + nextNode);
}
progress = 0;
previousNode = currentGraphCell;
GraphEventManager.getReference().getProperties(GraphEventManager.getReference().getConnectingEdge(previousNode, nextNode)).addInformation("Agents", this);
}
} // EIND STATUS RETURNING
} // EIND VERTEX
}
public void improvePheromone(DefaultGraphCell currentGraphCell)
{
Iterator pheromoneIterator = GraphEventManager.getReference().getProperties(currentGraphCell).getInformation("Pheromones");
Pheromone foundPheromone = null;
boolean certain = true;
if (pheromoneIterator != null)
{
Pheromone tempPheromone;
while (foundPheromone == null && pheromoneIterator.hasNext())
{
tempPheromone = (Pheromone)pheromoneIterator.next();
//System.out.println(tempPheromone.getResource().getName() + " <> " + searchFor.getName());
if (tempPheromone.getResource().equals(searchFor.getSearchFor()))
{
if (tempPheromone.getDirection() == previousNode)
{
//System.out.println(tempPheromone);
foundPheromone = tempPheromone;
//System.out.println(foundPheromone);
}
else
{
// Enkel verbeteren als we terugkeren gebaseerd op een gradientveld
Iterator gradientFieldIterator = GraphEventManager.getReference().getProperties(currentGraphCell).getInformation("Gradient");
Gradient tempGradient;
int maxGradient = 0;
if (gradientFieldIterator != null)
{
while (gradientFieldIterator.hasNext())
{
tempGradient = (Gradient)gradientFieldIterator.next();
if (tempGradient.getSource() == origin)
{
maxGradient = tempGradient.getDistance();
}
}
}
if (maxGradient != 0)
{
// we zijn dus aan het terugkeren gebaseerd op een gradient, en
// tempPheromone.getDirection() != previousNode
// maak een nieuw feromoon aan.
certain = true;
}
else
{
// we zijn aan het terugkeren at random, we weten dus niet zeker
// of we beter zijn.
// de filosofie: iets is beter dan niets, en zekerheid is beter dan meer.
certain = false;
}
}
}
}
if (foundPheromone != null)
{
//System.out.println("PerhomoneAgent :: improvePheromone");
foundPheromone.increase();
}
else if (certain)
{
GraphEventManager.getReference().getProperties(currentGraphCell).addInformation("Pheromones", new Pheromone(searchFor.getSearchFor(), previousNode));
}
}
else
{
GraphEventManager.getReference().getProperties(currentGraphCell).addInformation("Pheromones", new Pheromone(searchFor.getSearchFor(), previousNode));
}
}
/*{
Iterator pheromoneIterator = GraphEventManager.getReference().getProperties(currentGraphCell).getInformation("Pheromones");
//Pheromone foundPheromone = null;
Pheromone improvePheromone = null;
boolean certain = true;
if (pheromoneIterator != null) {
Pheromone tempPheromone;
while (improvePheromone == null && pheromoneIterator.hasNext()) {
tempPheromone = (Pheromone)pheromoneIterator.next();
//System.out.println(tempPheromone.getResource().getName() + " <> " + searchFor.getName());
if (tempPheromone.getResource().equals(searchFor.getSearchFor())) {
if (tempPheromone.getDirection() == previousNode) {
//System.out.println(tempPheromone);
improvePheromone = tempPheromone;
//System.out.println(foundPheromone);
}
}
}
if (improvePheromone != null)
{
improvePheromone.increase();
}
else
{
// We weten dat er feromonen zijn, want pheromoneIterator != null
// Enkel nieuw feromoon invoegen als we terugkeren gebaseerd op een gradientveld
Iterator gradientFieldIterator = GraphEventManager.getReference().getProperties(currentGraphCell).getInformation("Gradient");
Gradient tempGradient;
int maxGradient = 0;
if (gradientFieldIterator != null) {
while (gradientFieldIterator.hasNext()) {
tempGradient = (Gradient)gradientFieldIterator.next();
if (tempGradient.getSource() == origin) {
maxGradient = tempGradient.getDistance();
}
}
}
if (maxGradient != 0) {
// we zijn dus aan het terugkeren gebaseerd op een gradient, en
// tempPheromone.getDirection() != previousNode
// maak een nieuw feromoon aan.
certain = true;
}
else {
// we zijn aan het terugkeren at random, we weten dus niet zeker
// of we beter zijn.
// de filosofie: iets is beter dan niets, en zekerheid is beter dan meer.
certain = false;
}
}
}
if (certain)
{
GraphEventManager.getReference().getProperties(currentGraphCell).addInformation("Pheromones", new Pheromone(searchFor.getSearchFor(), previousNode));
}
*/
/*
Iterator pheromoneIterator = GraphEventManager.getReference().getProperties(currentGraphCell).getInformation("Pheromones");
Pheromone foundPheromone = null;
if (pheromoneIterator != null)
{
Pheromone tempPheromone;
while (foundPheromone == null && pheromoneIterator.hasNext())
{
tempPheromone = (Pheromone)pheromoneIterator.next();
//System.out.println(tempPheromone.getResource().getName() + " <> " + searchFor.getName());
if (tempPheromone.getResource().equals(searchFor.getSearchFor()) && tempPheromone.getDirection() == previousNode)
{
//System.out.println(tempPheromone);
foundPheromone = tempPheromone;
//System.out.println(foundPheromone);
}
}
if (foundPheromone != null)
{
//System.out.println("PerhomoneAgent :: improvePheromone");
foundPheromone.increase();
}
else
{
GraphEventManager.getReference().getProperties(currentGraphCell).addInformation("Pheromones", new Pheromone(searchFor.getSearchFor(), previousNode));
}
}
else
{
GraphEventManager.getReference().getProperties(currentGraphCell).addInformation("Pheromones", new Pheromone(searchFor.getSearchFor(), previousNode));
}
*/
//}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -