示例#1
0
        public void BasicUsage()
        {
            var a = new Set <int>();

            a.Add(0);
            a.Add(1);

            var b = new Set <int>();

            b.Add(1);
            b.Add(2);
            b.Add(3);

            var proxy = new SetProxy <int>();

            Assert.AreEqual(0, proxy.Count);

            proxy.Target = a;
            Assert.AreEqual(2, proxy.Count);
            Assert.True(proxy.Contains(0));
            Assert.True(proxy.Contains(1));

            proxy.Target = b;
            Assert.AreEqual(3, proxy.Count);
            Assert.False(proxy.Contains(0));
            Assert.True(proxy.Contains(1));
            Assert.True(proxy.Contains(2));

            proxy.Target = null;
            Assert.AreEqual(0, proxy.Count);
            Assert.False(proxy.Contains(0));
            Assert.False(proxy.Contains(1));
            Assert.False(proxy.Contains(2));
        }
示例#2
0
 public CompositeModelState(CollectionsFactory factory)
 {
     this._methods        = factory.NewList <CompositeMethodModelMutable, CompositeMethodModelMutable, CompositeMethodModel>();
     this._fields         = factory.NewList <FieldModelMutable, FieldModelMutable, FieldModel>();
     this._constructors   = factory.NewList <ConstructorModelMutable, ConstructorModelMutable, ConstructorModel>();
     this._specialMethods = factory.NewList <SpecialMethodModelMutable, SpecialMethodModelMutable, SpecialMethodModel>();
     this._publicTypes    = factory.NewSetProxy <Type>();
 }
示例#3
0
        public void Setup()
        {
            this.fuzzyModule = new FuzzyModule();

            const float range      = 1000; // max distance from one corner to another
            const float nearPeak   = .25f * range;
            const float mediumPeak = .5f * range;
            const float farPeak    = .75f * range;

            Variable ownDistanceVariable = this.fuzzyModule.CreateVariable(OWN_DISTANCE_VARIABLE_KEY);
            SetProxy selfNear            = ownDistanceVariable.AddLeftShoulder("near", 0, nearPeak, mediumPeak);
            SetProxy selfMedium          = ownDistanceVariable.AddTriangleSet("medium", nearPeak, mediumPeak, farPeak);
            SetProxy selfFar             = ownDistanceVariable.AddRightShoulder("far", mediumPeak, farPeak, range);

            Variable avgTeammatesDistanceVariable = this.fuzzyModule.CreateVariable(AVG_TEAMMATE_DISTANCE_VARIABLE_KEY);
            SetProxy teamNear   = avgTeammatesDistanceVariable.AddLeftShoulder("near", 0, nearPeak, mediumPeak);
            SetProxy teamMedium = avgTeammatesDistanceVariable.AddTriangleSet("medium", nearPeak, mediumPeak, farPeak);
            SetProxy teamFar    = avgTeammatesDistanceVariable.AddRightShoulder("far", mediumPeak, farPeak, range);

            Variable strategyVariable = this.fuzzyModule.CreateVariable(OWN_STRATEGY_VARIABLE_KEY);

            this.defensive = strategyVariable.AddLeftShoulder("defensive", 0, .4, .6);
            this.offensive = strategyVariable.AddRightShoulder("offensive", .4, .6, 1);

            /*
             * IF I am near AND teammates are near
             * THEN offensive
             *
             * IF I am near AND teammates are medium distance or far
             * THEN defensive
             *
             * IF I am medium distance AND teammates are (medium distance OR far)
             * THEN defensive
             *
             * IF teammates are near
             * THEN offensive
             *
             * IF I am far
             * THEN offensive
             */

            this.rule_nearAndNear          = new And(selfNear, teamNear);
            this.rule_nearAndMedium        = new And(selfNear, teamMedium);
            this.rule_mediumAndMediumOrFar = new And(selfMedium, new Or(teamMedium, teamFar));
            this.rule_near = teamNear;
            this.rule_far  = selfFar;

            this.fuzzyModule.AddRule(this.rule_nearAndNear, this.offensive);
            this.fuzzyModule.AddRule(this.rule_nearAndMedium, this.defensive);
            this.fuzzyModule.AddRule(this.rule_mediumAndMediumOrFar, this.defensive);
            this.fuzzyModule.AddRule(this.rule_near, this.offensive);
            this.fuzzyModule.AddRule(this.rule_far, this.offensive);
        }
示例#4
0
        public Think(Ship owner, World world) : base(owner)
        {
            this.world  = world;
            this.random = new Random();

            this.fuzzyModule = new FuzzyModule();

            const float range      = 1000; // max distance from one corner to another
            const float nearPeak   = .25f * range;
            const float mediumPeak = .5f * range;
            const float farPeak    = .75f * range;

            Variable ownDistanceVariable = this.fuzzyModule.CreateVariable(OWN_DISTANCE_VARIABLE_KEY);
            SetProxy selfNear            = ownDistanceVariable.AddLeftShoulder("near", 0, nearPeak, mediumPeak);
            SetProxy selfMedium          = ownDistanceVariable.AddTriangleSet("medium", nearPeak, mediumPeak, farPeak);
            SetProxy selfFar             = ownDistanceVariable.AddRightShoulder("far", mediumPeak, farPeak, range);

            Variable avgTeammatesDistanceVariable = this.fuzzyModule.CreateVariable(AVG_TEAMMATE_DISTANCE_VARIABLE_KEY);
            SetProxy teamNear   = avgTeammatesDistanceVariable.AddLeftShoulder("near", 0, nearPeak, mediumPeak);
            SetProxy teamMedium = avgTeammatesDistanceVariable.AddTriangleSet("medium", nearPeak, mediumPeak, farPeak);
            SetProxy teamFar    = avgTeammatesDistanceVariable.AddRightShoulder("far", mediumPeak, farPeak, range);

            Variable strategyVariable = this.fuzzyModule.CreateVariable(OWN_STRATEGY_VARIABLE_KEY);

            this.defensive = strategyVariable.AddLeftShoulder("defensive", 0, .3, .5);
            this.offensive = strategyVariable.AddRightShoulder("offensive", .3, .5, 1);

            /*
             * IF I am near AND teammates are near
             * THEN offensive
             *
             * IF I am near AND teammates are medium distance or far
             * THEN defensive
             *
             * IF I am medium distance AND teammates are (medium distance OR far)
             * THEN defensive
             *
             * IF teammates are near
             * THEN offensive
             *
             * IF I am far
             * THEN offensive
             */

            this.fuzzyModule.AddRule(new And(
                                         new Or(selfNear, selfMedium),
                                         new Or(teamMedium, teamFar)
                                         ), this.defensive);
            this.fuzzyModule.AddRule(new Or(teamNear, selfFar), this.offensive);
        }
示例#5
0
        public void PutWord_SetProxyTest()
        {
            CreateSetProxyTest();
            SetProxy setProxy = setProxy_;

            byte[]      bytes1 = Encoding.ASCII.GetBytes("test array 1");
            byte[]      bytes2 = Encoding.ASCII.GetBytes("test array 2");
            Word        word1  = new Word(42, bytes1);
            Word        word2  = new Word(43, bytes2);
            List <Word> words  = new List <Word> {
                word1, word2
            };

            setProxy.PutWord(42, words);
        }
示例#6
0
        public void FindWord_SetProxyTest()
        {
            PutWord_SetProxyTest();
            SetProxy setProxy = setProxy_;

            //byte[] bytes = new byte[16];
            byte[] bytes42 = null;
            bytes42 = setProxy.FindWord(42, false);
            if (bytes42 != null)
            {
                string string42 = Encoding.ASCII.GetString(bytes42);
            }

            byte[] bytes43 = null;
            bytes43 = setProxy.FindWord(43, false);
            if (bytes43 != null)
            {
                string string43 = Encoding.ASCII.GetString(bytes43);
            }
        }
        internal SingletonApplicationModelImmutable(
            SingletonArchitecture architecture,
            Type genericCompositePropertyMixin,
            Type genericCompositeEventMixin,
            Type genericFragmentBaseType,
            DictionaryQuery <CompositeModelType, CompositeModelTypeAssemblyScopeSupport> modelTypeAssemblyScopeSupport,
            out DictionaryQuery <CompositeModelType, CompositeModelTypeModelScopeSupport> compositeModelTypeSupport,
            out DictionaryProxy <Int32, CompositeModel> models,
            out SetProxy <CompositeModel> modelsForContainer,
            Assembler assembler
            )
            : base(architecture, genericCompositePropertyMixin, genericCompositeEventMixin, genericFragmentBaseType, modelTypeAssemblyScopeSupport, out compositeModelTypeSupport, out models)
        {
            ArgumentValidator.ValidateNotNull("Assembler", assembler);

            this._assembler       = assembler;
            this._compositeModels = this.CollectionsFactory.NewSetProxy <CompositeModel>();

            modelsForContainer = this._compositeModels;
        }
示例#8
0
        public void Test_WhenCalculateCalled_ShouldOrWithMembership()
        {
            // Arrange
            FuzzySet antecedentSet = new TriangleSet(.5, .3, .3);

            antecedentSet.DegreeOfMembership = .7;
            Term antecedent = new SetProxy(antecedentSet);

            FuzzySet consequenceSet = new TriangleSet(.5, .3, .3);

            consequenceSet.DegreeOfMembership = 0;
            Term consequence = new SetProxy(consequenceSet);

            Rule rule = new Rule(antecedent, consequence);

            // Act
            rule.Calculate();

            // Assert
            Assert.AreEqual(.7, antecedent.Membership, .00001);
            Assert.AreEqual(.7, consequence.Membership, .00001);
        }
示例#9
0
        public void ObserveAdded()
        {
            var a = new Set <int>();

            a.Add(1);
            a.Add(2);

            var b = new Set <int>();

            b.Add(4);
            b.Add(8);

            var proxy     = new SetProxy <int>();
            var sum       = 0;
            var observers = new Disposable()
                            .Add(proxy.Added(item => sum   += item))
                            .Add(proxy.Removed(item => sum -= item));

            proxy.Target = a;
            Assert.AreEqual(3, sum);
            a.Remove(1);
            Assert.AreEqual(2, sum);

            proxy.Target = b;
            Assert.AreEqual(12, sum);
            b.Add(1);
            Assert.AreEqual(13, sum);

            proxy.Target = null;
            Assert.AreEqual(0, sum);

            b.Remove(8);
            proxy.Target = b;
            Assert.AreEqual(5, sum);
            observers.Dispose();
            b.Add(7);
            proxy.Target = null;
            Assert.AreEqual(5, sum);
        }
示例#10
0
        public void CreateSetProxyTest()
        {
            SetProxy setProxy = new SetProxy(4, 2, 16);

            setProxy_ = setProxy;
        }
示例#11
0
 public ModuleModelState(CollectionsFactory collectionsFactory)
 {
     this._compositeModels       = collectionsFactory.NewSetProxy <CompositeModel>();
     this._compositeVisibilities = new Dictionary <CompositeModelType, IDictionary <CompositeModel, Visibility> >();
 }