dlvhex  2.5.0
include/dlvhex2/ExternalLearningHelper.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 EXTERNALLEARNINGHELPER_H__
00036 #define EXTERNALLEARNINGHELPER_H__
00037 
00038 #include "dlvhex2/PlatformDefinitions.h"
00039 #include "dlvhex2/fwd.h"
00040 #include "dlvhex2/ProgramCtx.h"
00041 #include "dlvhex2/Registry.h"
00042 #include "dlvhex2/Nogood.h"
00043 
00044 #include <boost/shared_ptr.hpp>
00045 
00046 DLVHEX_NAMESPACE_BEGIN
00047 
00051 class DLVHEX_EXPORT ExternalLearningHelper
00052 {
00053     public:
00054 
00058         class InputNogoodProvider
00059         {
00060             public:
00066                 virtual bool dependsOnOutputTuple() const { return true; }
00067 
00078                 virtual Nogood operator()(const PluginAtom::Query& query, const ExtSourceProperties& prop, bool contained, const Tuple tuple = Tuple(), int* weakenedPremiseLiterals = 0) const = 0;
00079         };
00080         typedef boost::shared_ptr<InputNogoodProvider> InputNogoodProviderConstPtr;
00081 
00087         class DLVHEX_EXPORT DefaultInputNogoodProvider : public InputNogoodProvider
00088         {
00092             bool negateMonotonicity;
00093             public:
00098                 DefaultInputNogoodProvider(bool negateMonotonicity);
00099                 virtual bool dependsOnOutputTuple() const;
00100                 virtual Nogood operator()(const PluginAtom::Query& query, const ExtSourceProperties& prop, bool contained, const Tuple tuple = Tuple(), int* weakenedPremiseLiterals = 0) const;
00101         };
00102 
00115         static Set<ID> getOutputAtoms(const PluginAtom::Query& query, const PluginAtom::Answer& answer, bool sign);
00116 
00143         static ID getOutputAtom(const PluginAtom::Query& query, Tuple t, bool sign);
00144 
00145     #if 0
00146 
00154         static ID getOutputAtom(const PluginAtom::Query& query, const Tuple& i, const Tuple& o, bool sign);
00155     #endif
00156 
00164         static ID getIDOfLearningRule(ProgramCtx* ctx, std::string learningrule);
00165 
00174         static void learnFromInputOutputBehavior(const PluginAtom::Query& query, const PluginAtom::Answer& answer, const ExtSourceProperties& prop, NogoodContainerPtr nogoods, InputNogoodProviderConstPtr inp = InputNogoodProviderConstPtr(new DefaultInputNogoodProvider(false)));
00175 
00184         static void learnFromFunctionality(const PluginAtom::Query& query, const PluginAtom::Answer& answer, const ExtSourceProperties& prop, std::vector<Tuple>& recordedTuples, NogoodContainerPtr nogoods);
00185 
00197         static void learnFromNegativeAtoms(const PluginAtom::Query& query, const PluginAtom::Answer& answer, const ExtSourceProperties& prop, NogoodContainerPtr nogoods, InputNogoodProviderConstPtr inp = InputNogoodProviderConstPtr(new DefaultInputNogoodProvider(true)));
00198 
00207         static void learnFromGroundRule(const PluginAtom::Query& query, ID groundRule, NogoodContainerPtr nogoods);
00208 
00218         static void learnFromRule(const PluginAtom::Query& query, ID rule, ProgramCtx* ctx, NogoodContainerPtr nogoods);
00219 
00220 };
00221 
00222 DLVHEX_NAMESPACE_END
00223 #endif
00224 
00225 // vim:expandtab:ts=4:sw=4:
00226 // mode: C++
00227 // End:
00228