//------------------------------------------------------------------------------------------------

        /// <summary>
        /// Gives a string representation of the mapping vector given a reference list for the element
        /// of origin and another reference list for the elements to which the belief will be propagated.
        /// </summary>
        /// <param name="refListFrom">The origin reference list.</param>
        /// <param name="refListTo">The recipient reference list.</param>
        /// <returns>Returns a string representation of the mapping vector.</returns>
        public string ToString(StringReferenceList refListFrom, StringReferenceList refListTo)
        {
            StringBuilder toReturn = new StringBuilder(String.Format("DiscreteMappingVector: From = {0} to:\n", From.ToString(refListFrom)));

            for (int i = 0; i < _to.Count; i++)
            {
                if (i == _to.Count)
                {
                    toReturn.Append(_to[i].ToString(refListTo));
                }
                else
                {
                    toReturn.Append(String.Format("{0}\n", _to[i].ToString(refListTo)));
                }
            }
            return(toReturn.ToString());
        }
        //------------------------------------------------------------------------------------------------

        /// <summary>
        /// Gives a string representation of the current focal belief model given a reference list.
        /// </summary>
        /// <param name="refList">The reference list to give sensor to the states/worlds.</param>
        /// <returns>Returns a string representation of the current focal belief model.</returns>
        public string ToString(StringReferenceList refList)
        {
            StringBuilder toReturn = new StringBuilder(String.Format("Element = {0}\n", Element.ToString(refList)));

            for (int i = 0; i < Belief.Count; i++)
            {
                if (i == Belief.Count - 1)
                {
                    toReturn.Append(Belief[i]);
                }
                else
                {
                    toReturn.Append(String.Format("{0}\n", Belief[i]));
                }
            }
            return(toReturn.ToString());
        }
        //------------------------------------------------------------------------------------------------

        /// <summary>
        /// Gives a string representation of the current evidential mapping given a reference list for the
        /// recipient frame of discernment.
        /// </summary>
        /// <param name="refList">The reference list for the recipient frame of discernment.</param>
        /// <returns>Returns a string representation of the current evidential mapping.</returns>
        public string ToString(StringReferenceList refList)
        {
            StringBuilder toReturn = new StringBuilder(String.Format("////    \\\\\\\\\nDiscreteEvidentialMapping: <SourceFrameName = {0}>\n{1}\n\n", FrameName, _refList));

            for (int i = 0; i < _vectors.Count; i++)
            {
                if (i == _vectors.Count)
                {
                    toReturn.Append(_vectors[i].ToString(References, refList));
                }
                else
                {
                    toReturn.Append(String.Format("{0}\n", _vectors[i].ToString(References, refList)));
                }
            }
            toReturn.Append("\\\\\\\\    ////\n");
            return(toReturn.ToString());
        }
        //------------------------------------------------------------------------------------------------

        private void ParseDiscreteEvidentialMapping(XmlNode node)
        {
            //Create the ReferenceList:
            XmlNode frame = node.SelectSingleNode("subframe");

            if (frame == null)
            {
                throw new InvalidBeliefModelException("The xml model element \"evidential-mapping\" should contain an element called \"subframe\" to define the frame of discernment!");
            }
            string frameName = frame.Attributes["name"].InnerText;
            StringReferenceList references = new StringReferenceList();

            try
            {
                foreach (XmlNode n in frame.ChildNodes)
                {
                    references.Add(n.InnerText);
                }
            }
            catch (IncompatibleReferenceListException)
            {
                throw new InvalidBeliefModelException("The xml model element file \"evidential-mapping\" has a state defined multiple times in the frame node!");
            }
            DiscreteEvidentialMapping mapping = new DiscreteEvidentialMapping(frameName, references);
            //Load evidential vectors:
            XmlNodeList vectors = node.SelectNodes("mapping-vector");

            if (vectors == null)
            {
                throw new InvalidBeliefModelException("An evidential mapping should contain mapping vectors!");
            }
            foreach (XmlNode n in vectors)
            {
                XmlNode fr = n.SelectSingleNode("from");
                DiscreteMappingVector mp = new DiscreteMappingVector(new DiscreteElement(references, fr.Attributes["element"].InnerText.Split(' ')));
                XmlNodeList           to = n.SelectNodes("to");
                foreach (XmlNode t in to)
                {
                    mp.AddPoint(new DiscreteMappingPoint(new DiscreteElement(_refList, t.Attributes["element"].InnerText.Split(' ')), Convert.ToDouble(t.InnerText)));
                }
                mapping.AddVector(mp);
            }
            _mappings.Add(mapping);
        }
        //------------------------------------------------------------------------------------------------

        /// <summary>
        /// Gives a string representation of the current model given a reference list for the elements.
        /// </summary>
        /// <param name="refList">The reference list to give sense to the elements.</param>
        /// <returns>Returns a string represenation of the current model.</returns>
        public string ToString(StringReferenceList refList)
        {
            StringBuilder toReturn = new StringBuilder(String.Format("////    \\\\\\\\\nSensorBelief: <SensorName = {0}>\n", SensorType));

            if (OptionFlags.Count == 0)
            {
                toReturn.Append("Options: none\n");
            }
            else
            {
                toReturn.Append("Options: \n");
                for (int i = 0; i < OptionFlags.Count; i++)
                {
                    switch (OptionFlags[i])
                    {
                    case DiscreteSensorOption.Option_Flags.OP_TEMPO_FUSION:
                        toReturn.Append(String.Format("Tempo-fusion: {0}s\n", OptionParams[i]));
                        break;

                    case DiscreteSensorOption.Option_Flags.OP_TEMPO_SPECIFICITY:
                        toReturn.Append(String.Format("Tempo-specificity: {0}s\n", OptionParams[i]));
                        break;

                    case DiscreteSensorOption.Option_Flags.OP_VARIATION:
                        toReturn.Append(String.Format("Variation: {0} measures\n", OptionParams[i]));
                        break;
                    }
                }
            }
            toReturn.Append("Focals: \n");
            for (int i = 0; i < FocalBeliefs.Count; i++)
            {
                if (i == FocalBeliefs.Count)
                {
                    toReturn.Append(String.Format("{0}", FocalBeliefs[i].ToString(refList)));
                }
                else
                {
                    toReturn.Append(String.Format("{0}\n", FocalBeliefs[i].ToString(refList)));
                }
            }
            toReturn.Append("\\\\\\\\    ////\n");
            return(toReturn.ToString());
        }
Example #6
0
        public static void TestCase()
        {
            StringReferenceList refList  = new StringReferenceList("Yes", "No");
            StringReferenceList refList2 = new StringReferenceList("Resources/B-eliefsFromSensors/test/values");

            Console.WriteLine("\n\n" +
                              "+--------------------------------------------------------------------+\n" +
                              "|                     StringReferenceList Tests                      |\n" +
                              "+--------------------------------------------------------------------+"
                              );
            Console.WriteLine("\n\n----------------------------------------------------------------------");
            Console.WriteLine("Construction tests:");
            Console.WriteLine(refList);
            Console.WriteLine(refList2);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("refList2.Contains(\"Aka\") = {0}", refList2.Contains("Aka"));
            Console.WriteLine("refList2.Contains(\"Yes\") = {0}", refList2.Contains("Yes"));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("refList2.GetIndex(\"Aka\") = {0}", refList2.IndexOf("Aka"));
            Console.WriteLine("refList2.GetIndex(\"Coq\") = {0}", refList2.IndexOf("Coq"));
            Console.WriteLine("refList2.GetIndex(\"Yes\") = {0}", refList2.IndexOf("Yes"));
            Console.WriteLine("----------------------------------------------------------------------");
        }
        //------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------------------------

        /*
         * Methods
         */

        #region IBeliefModel

        /// <summary>
        /// <para>Loads the model from the given path with the given format.</para>
        /// <para>If the format is of type <see cref="ModelFormat.MODEL_CUSTOM_DIRECTORY"/>, the path should
        /// indicate the path to the directory where the model is stored.</para>
        /// <para>If the format is of type <see cref="ModelFormat.MODEL_XML_FILE"/>, the path should be
        /// the name of the XML file to load.</para>
        /// </summary>
        /// <param name="path">Where to find the model.</param>
        /// <param name="mt">The format in which the model is.</param>
        /// <exception cref="InvalidBeliefModelException">Thrown if anything is wrong with the model.
        /// The exception message should be explicit enough to know what's wrong.</exception>
        public void LoadModel(string path, ModelFormat mt)
        {
            switch (mt)
            {
            case (ModelFormat.MODEL_CUSTOM_DIRECTORY):
                if (!Directory.Exists(path))
                {
                    throw new InvalidBeliefModelException(String.Format("The given path ({0}) does not exist (or you don't have permission to read it)!", path));
                }
                FrameName = new DirectoryInfo(path).Name;
                //Load the reference list:
                string refListFileName = path + Path.DirectorySeparatorChar + "values";
                if (!File.Exists(refListFileName))
                {
                    throw new InvalidBeliefModelException("The custom directory model should contain a file named \"values\" with the names of the possible worlds (one per line)!");
                }
                _refList = new StringReferenceList(refListFileName);
                //Load the models:
                _mappings = new List <DiscreteEvidentialMapping>();
                foreach (string dir in Directory.EnumerateDirectories(path))
                {
                    LoadDiscreteEvidentialMapping(dir);
                }
                break;

            case (ModelFormat.MODEL_XML_FILE):
                if (!File.Exists(path))
                {
                    throw new InvalidBeliefModelException(String.Format("The given xml file \"{0}\" does not exist (or you don't have permission to read it)!", path));
                }
                //Load the file:
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                //Create the ReferenceList:
                XmlNode frame = doc.DocumentElement.SelectSingleNode("/belief-from-beliefs/frame");
                if (frame == null)
                {
                    throw new InvalidBeliefModelException(String.Format("The xml file \"{0}\" should contain an element called \"frame\" to define the frame of discernment!", path));
                }
                this.FrameName = frame.Attributes["name"].InnerText;
                this._refList  = new StringReferenceList();
                try
                {
                    foreach (XmlNode n in frame.ChildNodes)
                    {
                        this._refList.Add(n.InnerText);
                    }
                }
                catch (IncompatibleReferenceListException)
                {
                    throw new InvalidBeliefModelException(String.Format("The xml file \"{0}\" has a state defined multiple times in the frame node!", path));
                }
                //Load the models:
                _mappings = new List <DiscreteEvidentialMapping>();
                XmlNode models = doc.DocumentElement.SelectSingleNode("/belief-from-beliefs/evidential-mappings");
                if (models == null)
                {
                    throw new InvalidBeliefModelException(String.Format("The xml file \"{0}\" does not seem to contain models!", path));
                }
                try
                {
                    foreach (XmlNode n in models.ChildNodes)
                    {
                        ParseDiscreteEvidentialMapping(n);
                    }
                }
                catch (FormatException)
                {
                    throw new InvalidBeliefModelException(String.Format("The numbers in the file \"{0}\" are not in the proper format or at the wrong place!", path));
                }
                break;
            }
        }
        public static void TestCase()
        {
            DiscreteElement     peuh    = new DiscreteElement(5, 3);
            DiscreteElement     peuh2   = new DiscreteElement(5, 9);
            StringReferenceList refList = new StringReferenceList("Aka", "Bea", "Coq", "Dad", "Elf");

            Console.WriteLine("\n\n" +
                              "+--------------------------------------------------------------------+\n" +
                              "|                        DiscreteElement Tests                       |\n" +
                              "+--------------------------------------------------------------------+"
                              );
            Console.WriteLine(refList);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Building Element from strings Aka, Coq, Elf");
            Console.WriteLine("Element: {0}", (new DiscreteElement(refList, new string[] { "Aka", "Coq", "Elf" })).ToString());
            Console.WriteLine("Element: {0}", (new DiscreteElement(refList, "Aka", "Coq", "Elf").ToString(refList)));
            Console.WriteLine("Building Element of size 68 with 4 2 0");
            Console.WriteLine("Element: {0}", (new DiscreteElement(68, 4, 2, 0)));
            Console.WriteLine("Building Element of size 36 with 0 2");
            Console.WriteLine("Element: {0}", (new DiscreteElement(36, 0, 2)));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Conjunction: {0}", peuh.Conjunction(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Conjunction: {0}", peuh & peuh2);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh.ToString(refList));
            Console.WriteLine("Element 2:   {0}", peuh2.ToString(refList));
            Console.WriteLine("Conjunction: {0}", peuh.Conjunction(peuh2).ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh.ToString(refList));
            Console.WriteLine("Element 2:   {0}", peuh2.ToString(refList));
            Console.WriteLine("Conjunction: {0}", (peuh & peuh2).ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Disjunction: {0}", peuh.Disjunction(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Disjunction: {0}", peuh | peuh2);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh.ToString(refList));
            Console.WriteLine("Element 2:   {0}", peuh2.ToString(refList));
            Console.WriteLine("Disjunction: {0}", peuh.Disjunction(peuh2).ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh.ToString(refList));
            Console.WriteLine("Element 2:   {0}", peuh2.ToString(refList));
            Console.WriteLine("Disjunction: {0}", (peuh | peuh2).ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:  {0}", peuh);
            Console.WriteLine("Opposite 1: {0}", peuh.Opposite());
            Console.WriteLine("Element 2:  {0}", peuh2);
            Console.WriteLine("Opposite 2: {0}", peuh2.Opposite());
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1: {0}", peuh);
            Console.WriteLine("Element 2: {0}", peuh2);
            Console.WriteLine("Equals (false) : {0}", peuh.Equals(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1: {0}", peuh);
            Console.WriteLine("Element 2: {0}", peuh);
            Console.WriteLine("Equals (true) : {0}", peuh.Equals(peuh));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1: {0}", peuh);
            Console.WriteLine("Element 2: {0}", peuh2);
            Console.WriteLine("IsASubset (false) : {0}", peuh.IsASubset(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1: {0}", peuh);
            Console.WriteLine("Element 2: {0}", peuh.Conjunction(peuh2));
            Console.WriteLine("IsASubset (true) : {0}", peuh.Conjunction(peuh2).IsASubset(peuh));
            Console.WriteLine("----------------------------------------------------------------------");

            peuh  = new DiscreteElement(68, 68);
            peuh2 = new DiscreteElement(68, 75);
            DiscreteElement peuh3 = peuh.Conjunction(peuh2);

            Console.WriteLine("Test of really big elements:");
            Console.WriteLine("Element of size 68: {0}", peuh);
            Console.WriteLine("Opposite:           {0}", peuh.Opposite());
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Conjunction: {0}", peuh.Conjunction(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Disjunction: {0}", peuh.Disjunction(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Opposite 1:  {0}", peuh.Opposite());
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Opposite 2:  {0}", peuh2.Opposite());
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("Equals (false) : {0}", peuh.Equals(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh);
            Console.WriteLine("Equals (true) : {0}", peuh.Equals(peuh));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh2);
            Console.WriteLine("IsASubset (false) : {0}", peuh.IsASubset(peuh2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Element 1:   {0}", peuh);
            Console.WriteLine("Element 2:   {0}", peuh.Conjunction(peuh2));
            Console.WriteLine("IsASubset (true) : {0}", peuh.Conjunction(peuh2).IsASubset(peuh));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Get the complete set: {0}", DiscreteElement.GetCompleteElement(68));
            Console.WriteLine("Get the emptyset:     {0}", DiscreteElement.GetEmptyElement(68));
            Console.WriteLine("----------------------------------------------------------------------");

            //Performance tests:
            DiscreteElement small1 = new DiscreteElement(5, 27);
            DiscreteElement small2 = new DiscreteElement(5, 13);
            DiscreteElement small3 = new DiscreteElement(64, 49227);
            DiscreteElement small4 = new DiscreteElement(64, 987543);

            int nbIterations = 1000000;

            Stopwatch watch = Stopwatch.StartNew();

            //Small conjunction test:
            for (int i = 0; i < nbIterations; i++)
            {
                small1.Conjunction(small2);
            }
            Console.WriteLine("Small conjunctions ({1}): {0}ms", watch.ElapsedMilliseconds, nbIterations);

            watch = Stopwatch.StartNew();
            //Small conjunction test:
            for (int i = 0; i < nbIterations; i++)
            {
                small3.Conjunction(small4);
            }
            Console.WriteLine("Big conjunctions ({1}): {0}ms", watch.ElapsedMilliseconds, nbIterations);

            Console.WriteLine("----------------------------------------------------------------------");

            watch = Stopwatch.StartNew();
            //Small conjunction test:
            for (int i = 0; i < nbIterations; i++)
            {
                small1.Disjunction(small2);
            }
            Console.WriteLine("Small disjunctions ({1}): {0}ms", watch.ElapsedMilliseconds, nbIterations);

            watch = Stopwatch.StartNew();
            //Small conjunction test:
            for (int i = 0; i < nbIterations; i++)
            {
                small3.Disjunction(small4);
            }
            Console.WriteLine("Big disjunctions ({1}): {0}ms", watch.ElapsedMilliseconds, nbIterations);

            Console.WriteLine("----------------------------------------------------------------------");
        }
        public static void TestCase()
        {
            DiscreteSet         s       = new DiscreteSet();
            DiscreteElement     peuh    = new DiscreteElement(5, 3);
            DiscreteElement     peuh2   = new DiscreteElement(5, 9);
            StringReferenceList refList = new StringReferenceList("Aka", "Bea", "Coq", "Dad", "Elf");

            Console.WriteLine("\n\n" +
                              "+--------------------------------------------------------------------+\n" +
                              "|                         DiscreteSet Tests                          |\n" +
                              "+--------------------------------------------------------------------+"
                              );
            Console.WriteLine(refList);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Empty set:           {0}", s.ToString(refList));
            Console.WriteLine("Adding the element   {0}", peuh.ToString(refList));
            s.Add(peuh);
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Adding the element   {0}", peuh.ToString(refList));
            s.Add(peuh);
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Adding the element   {0}", peuh2.ToString(refList));
            s.Add(peuh2);
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Removing the element {0}", peuh.ToString(refList));
            s.Remove(peuh);
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Removing the element {0}", peuh2.ToString(refList));
            s.Remove(peuh2);
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Empty set:           {0}", s.ToString(refList));
            Console.WriteLine("Adding the element   {0}", peuh.ToString(refList));
            s += peuh;
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Adding the element   {0}", peuh.ToString(refList));
            s += peuh;
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Adding the element   {0}", peuh2.ToString(refList));
            s += peuh2;
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Removing the element {0}", peuh.ToString(refList));
            s -= peuh;
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("Removing the element {0}", peuh2.ToString(refList));
            s -= peuh2;
            Console.WriteLine("Resulting set:       {0}", s.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Generating a set of 4 atoms.");
            s = DiscreteSet.GenerateSetOfAtoms(4);
            Console.WriteLine("Resulting set: {0}", s);
            Console.WriteLine("Number of elements: {0}", s.Card);
            Console.WriteLine("Size of elements: {0}", s.ElementSize);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Generating a set of 6 atoms.");
            s = DiscreteSet.GenerateSetOfAtoms(6);
            Console.WriteLine("Resulting set: {0}", s);
            Console.WriteLine("Number of elements: {0}", s.Card);
            Console.WriteLine("Size of elements: {0}", s.ElementSize);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Generating a set of 68 atoms.");
            s = DiscreteSet.GenerateSetOfAtoms(68);
            Console.WriteLine("Resulting set: {0}", s.ToStringOnePerLine());
            Console.WriteLine("Number of elements: {0}", s.Card);
            Console.WriteLine("Size of elements: {0}", s.ElementSize);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Generating a powerset with 4 worlds.");
            s = DiscreteSet.GeneratePowerSet(4);
            Console.WriteLine("Resulting set: {0}", s.ToStringOnePerLine());
            Console.WriteLine("Number of elements: {0}", s.Card);

            Console.WriteLine("Size of elements: {0}", s.ElementSize);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Generating a powerset with 6 worlds.");
            s = DiscreteSet.GeneratePowerSet(6);
            Console.WriteLine("Resulting set: {0}", s.ToStringOnePerLine());
            Console.WriteLine("Number of elements: {0}", s.Card);
            Console.WriteLine("Size of elements: {0}", s.ElementSize);
            Console.WriteLine("----------------------------------------------------------------------");
        }
 /// <summary>
 /// Builds an empty evidential mapping with just a frame name and a reference list.
 /// </summary>
 /// <param name="frameName">The name of the frame of discernment of origin.</param>
 /// <param name="refList">The reference list for this frame.</param>
 public DiscreteEvidentialMapping(string frameName, StringReferenceList refList)
 {
     this._frameName = frameName;
     this._refList   = refList;
     this._vectors   = new List <DiscreteMappingVector>();
 }
Example #11
0
        public static void TestCase()
        {
            StringReferenceList  refList = new StringReferenceList("Yes", "No");
            DiscreteMassFunction m1      = new DiscreteMassFunction();

            m1.AddMass(new DiscreteElement(2, 1), 0.1);
            m1.AddMass(new DiscreteElement(2, 2), 0.3);
            m1.AddMass(new DiscreteElement(2, 3), 0.6);
            m1.AddMass(new DiscreteElement(2, 3), 0.4);

            Console.WriteLine("\n\n" +
                              "+--------------------------------------------------------------------+\n" +
                              "|                      DiscreteMassFunction Tests                    |\n" +
                              "+--------------------------------------------------------------------+"
                              );
            Console.WriteLine(refList);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine(m1);
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Removing 0.4 to the total ignorance.");
            m1.RemoveMass(DiscreteElement.GetCompleteElement(2), 0.4);
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");
            DiscreteElement yes    = new DiscreteElement(2, 1);
            DiscreteElement no     = new DiscreteElement(2, 2);
            DiscreteElement yesUNo = new DiscreteElement(2, 3);

            Console.WriteLine("Belief tests:");
            Console.WriteLine("bel({0}) = {1} (should be 0.1)", yes, m1.Bel(yes));
            Console.WriteLine("bel({0}) = {1} (should be 0.3)", no, m1.Bel(no));
            Console.WriteLine("bel({0}) = {1} (should be 1.0)", yesUNo, m1.Bel(yesUNo));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("BetP tests:");
            Console.WriteLine("BetP({0}) = {1} (should be 0.4)", yes, m1.BetP(yes));
            Console.WriteLine("BetP({0}) = {1} (should be 0.6)", no, m1.BetP(no));
            Console.WriteLine("BetP({0}) = {1} (should be 1.0)", yesUNo, m1.BetP(yesUNo));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Plausibility tests:");
            Console.WriteLine("pl({0}) = {1} (should be 0.7)", yes, m1.Pl(yes));
            Console.WriteLine("pl({0}) = {1} (should be 0.9)", no, m1.Pl(no));
            Console.WriteLine("pl({0}) = {1} (should be 1.0)", yesUNo, m1.Pl(yesUNo));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Commonality tests:");
            Console.WriteLine("q({0}) = {1} (should be 0.7)", yes, m1.Q(yes));
            Console.WriteLine("q({0}) = {1} (should be 0.9)", no, m1.Q(no));
            Console.WriteLine("q({0}) = {1} (should be 0.6)", yesUNo, m1.Q(yesUNo));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Conditioning test:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("Conditioning by {0}...", yes.ToString(refList));
            m1 = m1.Conditioning(yes);
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Conditioning test:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("Conditioning by {0}...", no.ToString(refList));
            m1 = m1.Conditioning(no);
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            m1 = new DiscreteMassFunction();
            m1.AddMass(new DiscreteElement(2, 1), 0.1);
            m1.AddMass(new DiscreteElement(2, 2), 0.3);
            m1.AddMass(new DiscreteElement(2, 3), 0.6);

            Console.WriteLine("Conditioning test:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("Conditioning by {0}...", no.ToString(refList));
            m1 = m1.Conditioning(no);
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Conditioning test:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("Conditioning by {0}...", yes.ToString(refList));
            m1 = m1.Conditioning(yes);
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            m1 = new DiscreteMassFunction();
            m1.AddMass(new DiscreteElement(2, 1), 0.1);
            m1.AddMass(new DiscreteElement(2, 2), 0.3);
            m1.AddMass(new DiscreteElement(2, 3), 0.6);

            Console.WriteLine("Weakening test:");
            Console.WriteLine(m1.ToString(refList));
            m1 = m1.Weakening(0.1);
            Console.WriteLine("Weakened by with alpha = 0.1");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            m1 = new DiscreteMassFunction();
            m1.AddMass(new DiscreteElement(2, 1), 0.1);
            m1.AddMass(new DiscreteElement(2, 2), 0.3);
            m1.AddMass(new DiscreteElement(2, 3), 0.6);

            Console.WriteLine("Discounting test:");
            Console.WriteLine(m1.ToString(refList));
            m1 = m1.Discounting(0.1);
            Console.WriteLine("Disounting by with alpha = 0.1");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            m1 = new DiscreteMassFunction();
            m1.AddMass(new DiscreteElement(2, 1), 0.0);
            m1.AddMass(new DiscreteElement(2, 2), 0.3);
            m1.AddMass(new DiscreteElement(2, 3), 0.7);

            Console.WriteLine("Cleaning test:");
            Console.WriteLine(m1.ToString(refList));
            m1.Clean();
            Console.WriteLine("After cleaning:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            m1 = new DiscreteMassFunction();
            m1.AddMass(new DiscreteElement(2, 1), 0.33);
            m1.AddMass(new DiscreteElement(2, 2), 0.66);
            m1.AddMass(new DiscreteElement(2, 3), 1.01);

            Console.WriteLine("Normalization test");
            Console.WriteLine(m1.ToString(refList));
            m1.Normalise();
            Console.WriteLine("After normalization:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine("----------------------------------------------------------------------");

            m1 = new DiscreteMassFunction();
            m1.AddMass(new DiscreteElement(2, 1), 0.2);
            m1.AddMass(new DiscreteElement(2, 2), 0.2);
            m1.AddMass(new DiscreteElement(2, 3), 0.6);

            DiscreteMassFunction m2 = new DiscreteMassFunction();

            m2.AddMass(new DiscreteElement(2, 1), 0.2);
            m2.AddMass(new DiscreteElement(2, 2), 0.6);
            m2.AddMass(new DiscreteElement(2, 3), 0.2);

            Console.WriteLine("Smets combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationSmets(m2));
            Console.WriteLine("----------------------------------------------------------------------");

            DiscreteMassFunction m3 = new DiscreteMassFunction();

            m3.AddMass(new DiscreteElement(2, 1), 0.8);
            m3.AddMass(new DiscreteElement(2, 2), 0.2);

            Console.WriteLine("Smets combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationSmets(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Dempster combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationDempster(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Dempster combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationDempster(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Disjunctive combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationDisjunctive(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Disjunctive combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationDisjunctive(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Yager combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationYager(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Yager combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationYager(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Average combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationAverage(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Average combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationAverage(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Murphy combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationMurphy(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Murphy combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationMurphy(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Chen combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationChen(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Chen combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationChen(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("GetTreeOfFocals test with previous mass functions:");
            List <List <DiscreteElement> > tree = DiscreteMassFunction.GetTreeOfFocals(m1, m2);

            foreach (List <DiscreteElement> list in tree)
            {
                Console.Write("< ");
                foreach (DiscreteElement e in list)
                {
                    Console.Write("{0} ", e);
                }
                Console.Write(">\n");
            }
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("DuboisPrade combination test:");
            Console.WriteLine("m1: {0}\nm2: {1}", m1, m2);
            Console.WriteLine("Combination:\n{0}", m1.CombinationDuboisPrade(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("GetTreeOfFocals test with previous mass functions:");
            tree = DiscreteMassFunction.GetTreeOfFocals(m1, m2, m3);
            foreach (List <DiscreteElement> list in tree)
            {
                Console.Write("< ");
                foreach (DiscreteElement e in list)
                {
                    Console.Write("{0} ", e);
                }
                Console.Write(">\n");
            }
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("DuboisPrade combination test:");
            Console.WriteLine("Adding a mass function: {0}", m3);
            Console.WriteLine("Combination:\n{0}", m1.CombinationDuboisPrade(m2, m3));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Distance trivial test:\n{0}", m1);
            Console.WriteLine("Distance with itself: {0}", m1.Distance(m1));
            Console.WriteLine("----------------------------------------------------------------------");
            DiscreteMassFunction trivial1 = new DiscreteMassFunction();

            trivial1.AddMass(new DiscreteElement(3, 0), 1);
            DiscreteMassFunction trivial2 = new DiscreteMassFunction();

            trivial2.AddMass(new DiscreteElement(3, 7), 1);
            Console.WriteLine("Distance trivial test 2:\n{0}\nand {1}", trivial1, trivial2);
            Console.WriteLine("Distance between both: {0}", trivial1.Distance(trivial2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Distance test:\n{0}\n{1}", m1, m2);
            Console.WriteLine("Distance between both: {0}", m1.Distance(m2));
            Console.WriteLine("----------------------------------------------------------------------");
            Console.WriteLine("Distance test:\n{0}\n{1}", m1, m2);
            Console.WriteLine("Distance between both + m1: {0}", m1.Distance(m1, m2));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("Auto-conflict test:\n{0}", m1);
            Console.WriteLine("Auto-conflict:\nDegree 1: {0}", m1.AutoConflict(1));
            Console.WriteLine("Degree 2: {0}", m1.AutoConflict(2));
            Console.WriteLine("Degree 3: {0}", m1.AutoConflict(3));
            Console.WriteLine("Degree 4: {0}", m1.AutoConflict(4));
            Console.WriteLine("Degree 5: {0}", m1.AutoConflict(5));
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("GetMax test:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine();
            List <FocalElement <DiscreteElement> > max;

            max = m1.GetMax(m1.M, 1);
            Console.WriteLine("Max of m(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.M, 2);
            Console.WriteLine("Max of m(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.Bel, 1);
            Console.WriteLine("Max of bel(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.Bel, 2);
            Console.WriteLine("Max of bel(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.BetP, 1);
            Console.WriteLine("Max of BetP(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.BetP, 2);
            Console.WriteLine("Max of BetP(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.Pl, 1);
            Console.WriteLine("Max of pl(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.Pl, 2);
            Console.WriteLine("Max of pl(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.Q, 1);
            Console.WriteLine("Max of q(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            max = m1.GetMax(m1.Q, 2);
            Console.WriteLine("Max of q(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in max)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine("----------------------------------------------------------------------");

            Console.WriteLine("GetMin test:");
            Console.WriteLine(m1.ToString(refList));
            Console.WriteLine();
            List <FocalElement <DiscreteElement> > min;

            min = m1.GetMin(m1.M, 1);
            Console.WriteLine("Min of m(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.M, 2);
            Console.WriteLine("Min of m(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.Bel, 1);
            Console.WriteLine("Min of bel(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.Bel, 2);
            Console.WriteLine("Min of bel(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.BetP, 1);
            Console.WriteLine("Min of BetP(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.BetP, 2);
            Console.WriteLine("Min of BetP(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.Pl, 1);
            Console.WriteLine("Min of pl(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.Pl, 2);
            Console.WriteLine("Min of pl(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.Q, 1);
            Console.WriteLine("Min of q(), maxCard = 1:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine();

            min = m1.GetMin(m1.Q, 2);
            Console.WriteLine("Min of q(), maxCard = 2:");
            foreach (FocalElement <DiscreteElement> fe in min)
            {
                Console.WriteLine("Element: {0}, Value: {1}", fe.Element.ToString(refList), fe.Value);
            }
            Console.WriteLine("----------------------------------------------------------------------");
        }
Example #12
0
        //------------------------------------------------------------------------------------------------

        /// <summary>
        /// Gives a string representation of the current mapping point given a reference list.
        /// </summary>
        /// <param name="refList">The reference list to give sense to the states/worlds.</param>
        /// <returns>Returns a string representation of the current mapping point.</returns>
        public string ToString(StringReferenceList refList)
        {
            return(String.Format("[Element={0}, MappingFactor={1}]", Element.ToString(refList), MappingFactor));
        }