Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00040 #ifndef __PLUGIN_PREDICTION_H__
00041 #define __PLUGIN_PREDICTION_H__
00042
00043
00044 #define PLUGIN_CLASS PluginPrediction
00045
00046
00047
00048 #include <cstdlib>
00049 #include <iostream>
00050 #include <fstream>
00051 #include <mutex>
00052 #include <map>
00053 #include <sstream>
00054
00055
00056 #include <designators/CDesignator.h>
00057 #include <designator_integration_msgs/DesignatorCommunication.h>
00058
00059
00060 #include <plugins/owlexporter/CExporterOwl.h>
00061
00062
00063 #include <Types.h>
00064 #include <ForwardDeclarations.h>
00065 #include <Plugin.h>
00066 #include <Property.h>
00067 #include <JSON.h>
00068 #include <Node.h>
00069 #include <plugins/prediction/DecisionTree.h>
00070
00071
00072 namespace beliefstate {
00073 namespace plugins {
00074 class PLUGIN_CLASS : public Plugin {
00075 private:
00076 typedef struct {
00077 Property* prLevel;
00078 std::string strClass;
00079 } PredictionTrack;
00080
00081 typedef struct {
00082 std::map<std::string, double> mapFailureProbabilities;
00083 std::map<std::string, Property*> mapRequestedFeatureValues;
00084 double dSuccessRate;
00085 } PredictionResult;
00086
00087 JSON* m_jsnModel;
00088 DecisionTree* m_dtDecisionTree;
00089 std::list<PredictionTrack> m_lstPredictionStack;
00090 CExporterOwl* m_expOwl;
00091 bool m_bInsidePredictionModel;
00092 std::mutex m_mtxStackProtect;
00093 Node* m_ndActive;
00094 std::map< Property*, std::list<Property*> > m_mapNodeFailures;
00095 std::map< Property*, std::list<Property*> > m_mapNodeParameters;
00096 std::map< std::string, std::pair<int, int> > m_mapTimeStamps;
00097 bool m_bModelLoaded;
00098 int m_nClassFlexibility;
00099
00100 public:
00101 PLUGIN_CLASS();
00102 ~PLUGIN_CLASS();
00103
00104 virtual Result init(int argc, char** argv);
00105 virtual Result deinit();
00106
00107 virtual Result cycle();
00108
00109 virtual Event consumeServiceEvent(ServiceEvent seEvent);
00110 virtual void consumeEvent(Event evEvent);
00111
00112 bool serviceCallbackLoad(designator_integration_msgs::DesignatorCommunication::Request &req, designator_integration_msgs::DesignatorCommunication::Response &res);
00113
00114 bool load(std::string strFile);
00115
00116 bool descend(std::string strClass, bool bForceClass = false);
00117 bool descend(Node* ndDescend);
00118 bool ascend(Node* ndAscend);
00119
00120 bool predict(CDesignator* desigRequest, CDesignator* desigResponse);
00121 PredictionResult evaluatePredictionRequest(Property* prActive, CKeyValuePair* ckvpFeatures, CKeyValuePair* ckvpRequested);
00122
00123 std::list< pair<Property*, int> > linearizeTree(Property* prTop, int nLevel);
00124 PredictionResult probability(std::list< pair<Property*, int> > lstSequence, CKeyValuePair* ckvpFeatures, CKeyValuePair* ckvpRequested);
00125 std::map<std::string, double> relativeFailureOccurrences(std::list<Property*> lstFailures, int nTracks);
00126 std::list<Property*> failuresForTreeNode(Property* prNode);
00127 std::map<std::string, double> relativeFailuresForNode(Property* prNode, int nLevel, CKeyValuePair* ckvpFeatures);
00128 std::list<Property*> parametersForTreeNode(Property* prNode);
00129
00130 bool loadDecisionTree(std::string strPath);
00131 Property* evaluateDecisionTree(CKeyValuePair* ckvpFeatures);
00132 };
00133 }
00134
00135 extern "C" plugins::PLUGIN_CLASS* createInstance();
00136 extern "C" void destroyInstance(plugins::PLUGIN_CLASS* icDestroy);
00137 }
00138
00139
00140 #endif