onlinetest.cpp

00001 /*
00002  * All of the documentation and software included in the
00003  * Alchemy Software is copyrighted by Stanley Kok, Parag
00004  * Singla, Matthew Richardson, Pedro Domingos, Marc
00005  * Sumner, Hoifung Poon, and Daniel Lowd.
00006  * 
00007  * Copyright [2004-07] Stanley Kok, Parag Singla, Matthew
00008  * Richardson, Pedro Domingos, Marc Sumner, Hoifung
00009  * Poon, and Daniel Lowd. All rights reserved.
00010  * 
00011  * Contact: Pedro Domingos, University of Washington
00012  * (pedrod@cs.washington.edu).
00013  * 
00014  * Redistribution and use in source and binary forms, with
00015  * or without modification, are permitted provided that
00016  * the following conditions are met:
00017  * 
00018  * 1. Redistributions of source code must retain the above
00019  * copyright notice, this list of conditions and the
00020  * following disclaimer.
00021  * 
00022  * 2. Redistributions in binary form must reproduce the
00023  * above copyright notice, this list of conditions and the
00024  * following disclaimer in the documentation and/or other
00025  * materials provided with the distribution.
00026  * 
00027  * 3. All advertising materials mentioning features or use
00028  * of this software must display the following
00029  * acknowledgment: "This product includes software
00030  * developed by Stanley Kok, Parag Singla, Matthew
00031  * Richardson, Pedro Domingos, Marc Sumner, Hoifung
00032  * Poon, and Daniel Lowd in the Department of Computer Science and
00033  * Engineering at the University of Washington".
00034  * 
00035  * 4. Your publications acknowledge the use or
00036  * contribution made by the Software to your research
00037  * using the following citation(s): 
00038  * Stanley Kok, Parag Singla, Matthew Richardson and
00039  * Pedro Domingos (2005). "The Alchemy System for
00040  * Statistical Relational AI", Technical Report,
00041  * Department of Computer Science and Engineering,
00042  * University of Washington, Seattle, WA.
00043  * http://www.cs.washington.edu/ai/alchemy.
00044  * 
00045  * 5. Neither the name of the University of Washington nor
00046  * the names of its contributors may be used to endorse or
00047  * promote products derived from this software without
00048  * specific prior written permission.
00049  * 
00050  * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF WASHINGTON
00051  * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
00052  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00053  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00054  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY
00055  * OF WASHINGTON OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
00056  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00057  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00058  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00059  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
00060  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00061  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00062  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
00063  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00064  * 
00065  */
00066 #include "arguments.h"
00067 #include "onlineengine.h"
00068 
00074 int main(int argc, char* argv[])
00075 {
00076     // Example inference string needed to construct on OnlineEngine
00077   string inferenceString =
00078     "-ms -i univ-out.mln -e univ-test.db -q advisedBy,student,professor";
00079   OnlineEngine* oe = new OnlineEngine(inferenceString);
00080   oe->init();
00081 
00082   vector<string> trueEvidence;
00083   vector<string> falseEvidence;
00084   vector<string> oldEvidence;
00085 
00086   vector<string> nonZeroAtoms;
00087   vector<float> probs;
00088   
00089     // Time step 1
00090   oe->infer(nonZeroAtoms, probs);
00091     // Print true atoms
00092   cout << "Time step 1 non-zero atoms: " << endl;
00093   vector<string>::const_iterator it = nonZeroAtoms.begin();
00094   vector<float>::const_iterator probIt = probs.begin();
00095   for (; it != nonZeroAtoms.end(); it++)
00096   {
00097     cout << (*it) << " " << (*probIt) << endl;
00098     probIt++;
00099   }
00100   
00101     // Change evidence / query
00102   trueEvidence.push_back("inPhase(Gail, Pre_Quals)");
00103   trueEvidence.push_back("student(Gail)");
00104   falseEvidence.push_back("professor(Gail)");
00105   oldEvidence.push_back("hasPosition(Gail, Faculty)");
00106   oe->addTrueEvidence(trueEvidence);
00107   oe->addFalseEvidence(falseEvidence);
00108   oe->removeEvidence(oldEvidence);
00109   
00110     // Time step 2
00111     // Reduce the number of inference steps
00112   oe->setMaxInferenceSteps(100);
00113   oe->infer(nonZeroAtoms, probs);
00114     // Print true atoms
00115   cout << "Time step 2 true atoms: " << endl;
00116   it = nonZeroAtoms.begin();
00117   probIt = probs.begin();
00118   for (; it != nonZeroAtoms.end(); it++)
00119   {
00120     cout << (*it) << " " << (*probIt) << endl;
00121     probIt++;
00122   }
00123 
00124     // No change in evidence / query
00125     // Time step 3
00126   oe->infer(nonZeroAtoms, probs);
00127     // Print true atoms
00128   cout << "Time step 3 true atoms: " << endl;
00129   it = nonZeroAtoms.begin();
00130   probIt = probs.begin();
00131   for (; it != nonZeroAtoms.end(); it++)
00132   {
00133     cout << (*it) << " " << (*probIt) << endl;
00134     probIt++;
00135   }
00136 
00137   delete oe;
00138 }

Generated on Sun Jun 7 11:55:18 2009 for Alchemy by  doxygen 1.5.1