yacy_search_server/source/net/yacy/ai/greedy/AbstractFinding.java
orbiter 610e3ffffb Added new classes for the implementation of concurrent greedy algorithms.
These classes can be used to produce an abstract worker process that can be used for common problems in artificial intelligence, such as game playing and problem solving. These classes will be used as abstraction layer for a new search process in YaCy. These classes had been created while searching for an abstraction of the current search process. It turned out that the abstraction of the YaCy search process is also an abstraction for problems in artificial intelligence and therefore the classes had been designed in such a way that it covers not only the YaCy-specific problem but also the more generic problems in ai. To test the classes they had been used in a ConnectFour implementation (game playing). 

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6545 6c8d7289-2bf4-0310-a012-ef5d649a1542
2010-01-03 22:51:14 +00:00

89 lines
2.7 KiB
Java
Executable File

// AbstractFinding.java
// (C) 2009 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
// first published 03.12.2009 on http://yacy.net;
//
// This is a part of YaCy, a peer-to-peer based web search engine
//
// $LastChangedDate: 2009-05-28 01:51:34 +0200 (Do, 28 Mai 2009) $
// $LastChangedRevision: 5988 $
// $LastChangedBy: orbiter $
//
// LICENSE
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package net.yacy.ai.greedy;
import java.util.Comparator;
public abstract class AbstractFinding<SpecificRole extends Role> implements Finding<SpecificRole>, Comparator<Finding<SpecificRole>>, Comparable<Finding<SpecificRole>>, Cloneable {
private SpecificRole role;
private int priority;
/**
* create a new finding for a given role
* the priority is fixed in the beginning because is results from a premise
* that invoked a special finding computation set
* @param role
* @param priority
*/
public AbstractFinding(SpecificRole role, int priority) {
this.role = role;
this.priority = priority;
}
public abstract Object clone();
/**
* get the finding priority
* @return
*/
public int getPriority() {
return this.priority;
}
/**
* set the current priority
* This may only be used internally as part of the engine process to create a result queue
*/
public void setPriority(int newPriority) {
this.priority = newPriority;
}
/**
* get the finding role
* @return
*/
public SpecificRole getRole() {
return this.role;
}
public int compare(Finding<SpecificRole> f1, Finding<SpecificRole> f2) {
int p1 = f1.getPriority();
int p2 = f2.getPriority();
if (p1 < p2) return 1;
if (p1 > p2) return -1;
return 0;
}
public int compareTo(Finding<SpecificRole> o) {
return compare(this, o);
}
public abstract boolean equals(Object other);
public abstract int hashCode();
}