Exemple #1
0
        public IFuzzySet Fuzzyfie(string[] value, IDomain domain)
        {
            IList <double> memberships = new List <double>(new double[domain.GetCardinality()]);

            memberships[domain.GetIndexOfElement(domain.FromStringRepresentation(value))] = 1;
            return(FuzzySetFactory.CreateFuzzySet(domain, memberships));
        }
 public void GivenMultipleDomains_TestOutputSet()
 {
     IDomain   d1 = DomainFactory.CreateDomain(new int[] { 1, 2, 3 });
     IDomain   d2 = DomainFactory.CreateDomain(new string[] { "a", "b" });
     IDomain   d3 = DomainFactory.CreateDomain(new IDomain[] { d1, d2 });
     IFuzzySet f1 = FuzzySetFactory.CreateFuzzySet(d1, new double[] { 1, 0.5, 0 });
     IFuzzySet f2 = f1.CylindricalExtension(d3);
 }
Exemple #3
0
        protected override IFuzzySet GetAcceleration(params string[][] variables)
        {
            IList <IFuzzySet> sets = new List <IFuzzySet>();
            IFuzzySet         set;

            foreach (var rule in accelerationRules)
            {
                IList <double> values = new List <double>();
                for (int i = 0; i < rule.Item1.Count; i++)
                {
                    IFuzzySet variable = rule.Item1[i];
                    double    value    = variable.GetMembershipFor(variable.GetDomain().FromStringRepresentation(variables[i]));
                    values.Add(value);
                }
                double min = values.Min();
                set = FuzzySetFactory.CreateFuzzySet(rule.Item2.GetDomain(), Enumerable.Repeat(min, rule.Item2.GetDomain().GetCardinality()));
                sets.Add(set.TNorm(rule.Item2, tNorm));
            }
            set = FuzzySetFactory.CreateFuzzySet(accelerationRules[0].Item2.GetDomain(), Enumerable.Repeat(0.0, accelerationRules[0].Item2.GetDomain().GetCardinality()));
            return(sets.Aggregate((current, next) => current.SNorm(next, sNorm)));
        }
        public string Calculate(string input)
        {
            string[] inList = input.Split(' ');

            IDomain domainPosition     = DomainFactory.CreateDomain(-1950, 1950, 1);
            IDomain domainSpeed        = DomainFactory.CreateDomain(0, 40, 1);
            IDomain domainAngle        = DomainFactory.CreateDomain(-90, 90, 1);
            IDomain domainAcceleration = DomainFactory.CreateDomain(-10, 10, 1);

            int position = (-1 * int.Parse(inList[1])) + int.Parse(inList[0]) + (-1 * int.Parse(inList[3])) / 2 + int.Parse(inList[2]) / 2;
            int speed    = int.Parse(inList[4]);
            //IFuzzySet position = fuzzyfier.Fuzzyfie(new string[] { pos.ToString() }, domainPosition);
            //IFuzzySet speed = fuzzyfier.Fuzzyfie(new string[] { inList[4] }, domainSpeed);

            IFuzzySet zoPosition = FuzzySetFactory.Lambda(domainPosition, -10, 0, 10);
            IFuzzySet psPosition = FuzzySetFactory.Lambda(domainPosition, 0, 20, 40);
            IFuzzySet pmPosition = FuzzySetFactory.Lambda(domainPosition, 20, 80, 140);
            IFuzzySet pbPosition = FuzzySetFactory.Lambda(domainPosition, 80, 200, 320);
            IFuzzySet phPosition = FuzzySetFactory.Gamma(domainPosition, 200, 680);
            IFuzzySet nsPosition = FuzzySetFactory.Lambda(domainPosition, -40, -20, 0);
            IFuzzySet nmPosition = FuzzySetFactory.Lambda(domainPosition, -140, -80, -20);
            IFuzzySet nbPosition = FuzzySetFactory.Lambda(domainPosition, -320, -200, -80);
            IFuzzySet nhPosition = FuzzySetFactory.L(domainPosition, -680, -200);

            IFuzzySet sSpeed = FuzzySetFactory.L(domainSpeed, 0, 20);
            IFuzzySet mSpeed = FuzzySetFactory.Lambda(domainSpeed, 0, 20, 40);
            IFuzzySet bSpeed = FuzzySetFactory.Gamma(domainSpeed, 20, 40);

            IFuzzySet zoAngle = FuzzySetFactory.Lambda(domainAngle, -5, 0, 5);
            IFuzzySet psAngle = FuzzySetFactory.Lambda(domainAngle, 0, 10, 20);
            IFuzzySet pmAngle = FuzzySetFactory.Lambda(domainAngle, 10, 30, 50);
            IFuzzySet pbAngle = FuzzySetFactory.Gamma(domainAngle, 30, 70);
            IFuzzySet nsAngle = FuzzySetFactory.Lambda(domainAngle, -20, -10, 0);
            IFuzzySet nmAngle = FuzzySetFactory.Lambda(domainAngle, -50, -30, -10);
            IFuzzySet nbAngle = FuzzySetFactory.L(domainAngle, -70, -30);

            IFuzzySet zoAcceleration = FuzzySetFactory.Lambda(domainAcceleration, -2, 0, 2);
            IFuzzySet psAcceleration = FuzzySetFactory.Lambda(domainAcceleration, 0, 4, 8);
            IFuzzySet pbAcceleration = FuzzySetFactory.Gamma(domainAcceleration, 4, 10);
            IFuzzySet nsAcceleration = FuzzySetFactory.Lambda(domainAcceleration, -8, -4, 0);
            IFuzzySet nbAcceleration = FuzzySetFactory.L(domainAcceleration, -10, -4);

            angleRules = new List <Tuple <IList <IFuzzySet>, IFuzzySet> >()
            {
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    nhPosition
                }, nmAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    nbPosition
                }, nsAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    nmPosition
                }, nsAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    nsPosition
                }, nsAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    zoPosition
                }, zoAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    psPosition
                }, psAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    pmPosition
                }, psAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    pbPosition
                }, psAngle
                ),
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    phPosition
                }, pmAngle
                )
            };

            accelerationRules = new List <Tuple <IList <IFuzzySet>, IFuzzySet> >()
            {
                new Tuple <IList <IFuzzySet>, IFuzzySet>
                (
                    new List <IFuzzySet>()
                {
                    mSpeed
                }, zoAcceleration
                ),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){bSpeed},nsAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,nhPosition},nsAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,nbPosition},nsAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,nmPosition},zoAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,nsPosition},zoAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,zoPosition},zoAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,psPosition},zoAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,pmPosition},zoAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,pbPosition},nsAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){mSpeed,phPosition},nsAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,nhPosition},psAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,nbPosition},psAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,nmPosition},psAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,nsPosition},pbAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,zoPosition},pbAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,psPosition},pbAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,pmPosition},psAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,pbPosition},psAcceleration
                //),
                //new Tuple<IList<BaseFuzzySet>, BaseFuzzySet>
                //(
                //    new List<BaseFuzzySet>(){sSpeed,phPosition},psAcceleration
                //)
            };

            IFuzzySet angle             = this.GetAngle(new string[] { position.ToString() }, new string[] { speed.ToString() });
            IFuzzySet acceleration      = this.GetAcceleration(new string[] { speed.ToString() }, new string[] { position.ToString() });
            string    angleValue        = this.defuzzyfier.Defuzzyfie(angle);
            string    accelerationValue = this.defuzzyfier.Defuzzyfie(acceleration);

            return(accelerationValue + ' ' + angleValue);
        }