From d203ebfdfed021d7413fdccbb8c46fbd2de94092 Mon Sep 17 00:00:00 2001 From: "NARS.Wang@gmail.com" <NARS.Wang@gmail.com@91dfdad4-c543-0410-b26a-7d79dded8189> Date: Wed, 16 Jul 2014 00:07:13 +0000 Subject: [PATCH] Solving Issue 27 with random shuffle of components --- nars_core_java/nars/language/Variable.java | 19 ++++++++++--------- nars_core_java/nars/storage/Memory.java | 4 ++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/nars_core_java/nars/language/Variable.java b/nars_core_java/nars/language/Variable.java index d5effb5..0d2d1d6 100644 --- a/nars_core_java/nars/language/Variable.java +++ b/nars_core_java/nars/language/Variable.java @@ -23,12 +23,12 @@ package nars.language; import java.util.*; import nars.io.Symbols; +import nars.storage.Memory; /** * A variable term, which does not correspond to a concept */ public class Variable extends Term { - /** * Constructor, from a given variable name * @@ -213,17 +213,18 @@ public class Variable extends Term { if (cTerm1.size() != (cTerm2).size()) { return false; } - if ((cTerm1 instanceof ImageExt) && (((ImageExt) cTerm1).getRelationIndex() != ((ImageExt) cTerm2).getRelationIndex())) { - return false; - } - if ((cTerm1 instanceof ImageInt) && (((ImageInt) cTerm1).getRelationIndex() != ((ImageInt) cTerm2).getRelationIndex())) { + if ((cTerm1 instanceof ImageExt) && (((ImageExt) cTerm1).getRelationIndex() != ((ImageExt) cTerm2).getRelationIndex()) + || (cTerm1 instanceof ImageInt) && (((ImageInt) cTerm1).getRelationIndex() != ((ImageInt) cTerm2).getRelationIndex())) { return false; } - for (int i = 0; i < cTerm1.size(); i++) { // assuming matching order, to be refined in the future - Term t1 = cTerm1.componentAt(i); + ArrayList<Term> list = cTerm1.cloneComponents(); + if (cTerm1.isCommutative()) { + Collections.shuffle(list, Memory.randomNumber); + } + for (int i = 0; i < cTerm1.size(); i++) { // assuming matching order + Term t1 = list.get(i); Term t2 = cTerm2.componentAt(i); - boolean haveSub = findSubstitute(type, t1, t2, map1, map2); - if (!haveSub) { + if (!findSubstitute(type, t1, t2, map1, map2)) { return false; } } diff --git a/nars_core_java/nars/storage/Memory.java b/nars_core_java/nars/storage/Memory.java index b13447d..830444b 100644 --- a/nars_core_java/nars/storage/Memory.java +++ b/nars_core_java/nars/storage/Memory.java @@ -108,6 +108,9 @@ public class Memory { * TODO unused */ protected HashMap<Term, Term> substitute; + + public static Random randomNumber = new Random(1); + /* ---------- Constructor ---------- */ @@ -133,6 +136,7 @@ public class Memory { newTasks.clear(); exportStrings.clear(); reasoner.initTimer(); + randomNumber = new Random(1); recorder.append("\n-----RESET-----\n"); } -- GitLab