コード例 #1
0
        //------------------------------------------------------------------------------------------------

        /// <summary>
        /// Adds a point to the current model.
        /// </summary>
        /// <param name="p">The point to add the the model.</param>
        /// <exception cref="InvalidBeliefModelException">Thrown if the model already contains the given
        /// point.</exception>
        public void AddPoint(DiscreteSensorFocalPoint p)
        {
            if (_belief.Contains(p))
            {
                throw new InvalidBeliefModelException(String.Format("The model contains twice the same sensor measure for the Element {0}!", _element.ToString()));
            }
            _belief.Add(p);
        }
コード例 #2
0
        //------------------------------------------------------------------------------------------------

        private void ParseDiscreteSensorModel(XmlNode node)
        {
            DiscreteSensorModel sensorBelief = new DiscreteSensorModel(node.Attributes["name"].InnerText);
            //Load options if there are some:
            XmlNode options = node.SelectSingleNode("options");

            if (options != null)
            {
                foreach (XmlNode n in options.ChildNodes)
                {
                    string name  = n.Attributes["name"].InnerText.ToLower();
                    string param = n.InnerText;
                    if (name == "tempo-specificity")
                    {
                        sensorBelief.AddOption(DiscreteSensorOption.Option_Flags.OP_TEMPO_SPECIFICITY, Convert.ToDouble(param));
                    }
                    else if (name == "tempo-fusion")
                    {
                        sensorBelief.AddOption(DiscreteSensorOption.Option_Flags.OP_TEMPO_FUSION, Convert.ToDouble(param));
                    }
                    else if (name == "variation")
                    {
                        sensorBelief.AddOption(DiscreteSensorOption.Option_Flags.OP_VARIATION, Convert.ToDouble(param));
                    }
                    else
                    {
                        throw new InvalidBeliefModelException("The option \"{0}\" does not exist!");
                    }
                }
            }
            //Load each point:
            XmlNodeList points = node.SelectNodes("point");

            if (points == null)
            {
                throw new InvalidBeliefModelException("A sensor model should contain points!");
            }
            List <DiscreteSensorFocalBelief> focals = new List <DiscreteSensorFocalBelief>();

            foreach (XmlNode point in points)
            {
                XmlNode value = point.SelectSingleNode("value");
                if (value == null)
                {
                    throw new InvalidBeliefModelException("Every point in a model should contain a sensor measure value under \"value\"!");
                }
                double      measure = Convert.ToDouble(value.InnerText);
                XmlNodeList masses  = point.SelectNodes("mass");
                if (masses == null)
                {
                    throw new InvalidBeliefModelException("Every point in a model should contain masses!");
                }
                foreach (XmlNode mass in masses)
                {
                    //Create the focal point:
                    double massValue             = Convert.ToDouble(mass.InnerText);
                    DiscreteSensorFocalPoint sfp = new DiscreteSensorFocalPoint(measure, massValue);
                    //Create the element and add it if necessary:
                    DiscreteElement           e   = new DiscreteElement(this._refList, mass.Attributes["set"].InnerText.Split(' '));
                    DiscreteSensorFocalBelief sfb = new DiscreteSensorFocalBelief(e);
                    if (focals.Contains(sfb))
                    {
                        int index = focals.IndexOf(sfb);
                        focals[index].AddPoint(sfp);
                    }
                    else
                    {
                        focals.Add(sfb);
                        focals[focals.Count - 1].AddPoint(sfp);
                    }
                }
            }
            foreach (DiscreteSensorFocalBelief sfb in focals)
            {
                sfb.Sort();
                sensorBelief.AddFocal(sfb);
            }
            //Add the model:
            _discreteSensorModels.Add(sensorBelief);
        }