From: Paul F. <fod...@gm...> - 2008-08-15 01:35:58
|
Dear Sir, Our performance tests failed to execute in the OpenCyc system. They work for small tests (a couple of constants), but they fail to work for large number of constants: 50K,100K, 250K, 500K, 1 million. For instance, our smallest test: http://www.lmc.cs.sunysb.edu/~tests/cyc_paul/sg_cyc_without_cycle_01.cyc<http://www.lmc.cs.sunysb.edu/%7Etests/cyc_paul/sg_cyc_without_cycle_01.cyc>with the query for all the tuples sg-predicate: (new-cyc-query (LIST #$sg-predicate '?X '?Y) #$BaseKB (LIST :MAX-TRANSFORMATION-DEPTH nil :metrics (LIST :total-time :complete-total-time :time-per-answer :time-to-first-answer :answer-count)) ) fails after a few minutes with the message: "Implementation error: Recursive error". On OpenCyc: $ run-cyc.sh CYC(1): (load "sg_cyc_without_cycle_01.cyc") T CYC(2): (new-cyc-query (LIST #$sg-predicate '?X '?Y) #$BaseKB (LIST :MAX-TRANSFORMATION-DEPTH nil :metrics (LIST :total-time :complete-total-time :time-per-answer :time-to-first-answer :answer-count))) Implementation error: Recursive error This test does the following: we have two kinds of facts: par/2 and sib/2, where par(X,Y) means that the parent of X is Y and sib(X,Y) means that the X is sibling of Y. The rules are the following: - every node X in the graph is in the same generation sg/2 with itself: sg(X,X) :- par(X,_);par(_,X);sib(X,_);sib(_,X), - if two nodes are siblings then they are in the same generation: sg(X,Y) :- sib(X,Y). - if two nodes are in hte same generation then their parents are in the same generation: sg(X,Y) :- par(X,Z), sg(Z,Z1), par(Y,Z1). The "sg_cyc_without_cycle_01.cyc" example doesn't have any cycles in the data structure and other systems that we tested (XSB, Yap, dlv, ontobroker) solve it (finds all solutions) in about a second. Please tell us if there is anything that we can do. Regards, Paul Fodor |