dlvhex  2.5.0
include/dlvhex2/ExternalAtomEvaluationHeuristics.h
Go to the documentation of this file.
00001 /* dlvhex -- Answer-Set Programming with external interfaces.
00002  * Copyright (C) 2005-2007 Roman Schindlauer
00003  * Copyright (C) 2006-2015 Thomas Krennwallner
00004  * Copyright (C) 2009-2016 Peter Schüller
00005  * Copyright (C) 2011-2016 Christoph Redl
00006  * Copyright (C) 2015-2016 Tobias Kaminski
00007  * Copyright (C) 2015-2016 Antonius Weinzierl
00008  *
00009  * This file is part of dlvhex.
00010  *
00011  * dlvhex is free software; you can redistribute it and/or modify it
00012  * under the terms of the GNU Lesser General Public License as
00013  * published by the Free Software Foundation; either version 2.1 of
00014  * the License, or (at your option) any later version.
00015  *
00016  * dlvhex is distributed in the hope that it will be useful, but
00017  * WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019  * Lesser General Public License for more details.
00020  *
00021  * You should have received a copy of the GNU Lesser General Public
00022  * License along with dlvhex; if not, write to the Free Software
00023  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
00024  * 02110-1301 USA.
00025  */
00026 
00035 #ifndef EXTERNALATOMEVALUATIONHEURISTICS_H
00036 #define EXTERNALATOMEVALUATIONHEURISTICS_H
00037 
00038 #include "dlvhex2/PlatformDefinitions.h"
00039 #include "dlvhex2/ExternalAtomEvaluationHeuristicsInterface.h"
00040 #include "dlvhex2/fwd.h"
00041 #include "dlvhex2/ID.h"
00042 #include "dlvhex2/Registry.h"
00043 
00044 #include <boost/unordered_map.hpp>
00045 #include <boost/shared_ptr.hpp>
00046 
00047 DLVHEX_NAMESPACE_BEGIN
00048 
00049 // ============================== Always ==============================
00050 
00054 class ExternalAtomEvaluationHeuristicsAlways : public ExternalAtomEvaluationHeuristics
00055 {
00056     public:
00057         ExternalAtomEvaluationHeuristicsAlways(RegistryPtr reg);
00058         virtual bool doEvaluate(const ExternalAtom& eatom, InterpretationConstPtr eatomMask, InterpretationConstPtr programMask, InterpretationConstPtr partialAssignment, InterpretationConstPtr assigned, InterpretationConstPtr changed);
00059         virtual bool frequent();
00060 };
00061 
00065 class ExternalAtomEvaluationHeuristicsAlwaysFactory : public ExternalAtomEvaluationHeuristicsFactory
00066 {
00067     virtual ExternalAtomEvaluationHeuristicsPtr createHeuristics(RegistryPtr reg);
00068 };
00069 
00070 // ============================== Periodic ==============================
00071 
00075 class ExternalAtomEvaluationHeuristicsPeriodic : public ExternalAtomEvaluationHeuristics
00076 {
00077     private:
00079         int counter;
00080     public:
00081         ExternalAtomEvaluationHeuristicsPeriodic(RegistryPtr reg);
00082         virtual bool doEvaluate(const ExternalAtom& eatom, InterpretationConstPtr eatomMask, InterpretationConstPtr programMask, InterpretationConstPtr partialAssignment, InterpretationConstPtr assigned, InterpretationConstPtr changed);
00083         virtual bool frequent();
00084 };
00085 
00089 class ExternalAtomEvaluationHeuristicsPeriodicFactory : public ExternalAtomEvaluationHeuristicsFactory
00090 {
00091     virtual ExternalAtomEvaluationHeuristicsPtr createHeuristics(RegistryPtr reg);
00092 };
00093 
00094 // ============================== InputComplete ==============================
00095 
00099 class ExternalAtomEvaluationHeuristicsInputComplete : public ExternalAtomEvaluationHeuristics
00100 {
00101     public:
00102         ExternalAtomEvaluationHeuristicsInputComplete(RegistryPtr reg);
00103         virtual bool doEvaluate(const ExternalAtom& eatom, InterpretationConstPtr eatomMask, InterpretationConstPtr programMask, InterpretationConstPtr partialAssignment, InterpretationConstPtr assigned, InterpretationConstPtr changed);
00104 };
00105 
00109 class ExternalAtomEvaluationHeuristicsInputCompleteFactory : public ExternalAtomEvaluationHeuristicsFactory
00110 {
00111     virtual ExternalAtomEvaluationHeuristicsPtr createHeuristics(RegistryPtr reg);
00112 };
00113 
00114 // ============================== EAComplete ==============================
00115 
00119 class ExternalAtomEvaluationHeuristicsEAComplete : public ExternalAtomEvaluationHeuristics
00120 {
00121     public:
00122         ExternalAtomEvaluationHeuristicsEAComplete(RegistryPtr reg);
00123         virtual bool doEvaluate(const ExternalAtom& eatom, InterpretationConstPtr eatomMask, InterpretationConstPtr programMask, InterpretationConstPtr partialAssignment, InterpretationConstPtr assigned, InterpretationConstPtr changed);
00124 };
00125 
00129 class ExternalAtomEvaluationHeuristicsEACompleteFactory : public ExternalAtomEvaluationHeuristicsFactory
00130 {
00131     virtual ExternalAtomEvaluationHeuristicsPtr createHeuristics(RegistryPtr reg);
00132 };
00133 
00134 // ============================== Never ==============================
00135 
00139 class ExternalAtomEvaluationHeuristicsNever : public ExternalAtomEvaluationHeuristics
00140 {
00141     public:
00142         ExternalAtomEvaluationHeuristicsNever(RegistryPtr reg);
00143         virtual bool doEvaluate(const ExternalAtom& eatom, InterpretationConstPtr eatomMask, InterpretationConstPtr programMask, InterpretationConstPtr partialAssignment, InterpretationConstPtr assigned, InterpretationConstPtr changed);
00144 };
00145 
00149 class ExternalAtomEvaluationHeuristicsNeverFactory : public ExternalAtomEvaluationHeuristicsFactory
00150 {
00151     virtual ExternalAtomEvaluationHeuristicsPtr createHeuristics(RegistryPtr reg);
00152 };
00153 
00154 DLVHEX_NAMESPACE_END
00155 #endif
00156 
00157 // vim:expandtab:ts=4:sw=4:
00158 // mode: C++
00159 // End: