示例#1
0
        protected void AddTransition(WithinAgentTransition <T> transition)
        {
            if (!_modelStates.Contains(transition.Origin))
            {
                throw new ArgumentException(
                          "This transition is invalid because the origin state is not part of this model");
            }
            if (!_modelStates.Contains(transition.Destination))
            {
                throw new ArgumentException(
                          "This transition is invalid because the destination state is not part of this model");
            }

            _allTransitions.Add(transition);
            transition.Origin.TransitionsFromThisState.Add(transition);

            transition.Origin.WithinHostTransitionsFromState.Add(transition);
        }
示例#2
0
        private void GeneratePermutationCache()
        {
            _cachedPermutations.Clear();
            var k = WithinHostTransitionsFromState.Count;

            var permutationMaker = new AllPermutationsGenerator(k);

            foreach (var permutation in permutationMaker.AllPermutations)
            {
                var transitionPermutation = new WithinAgentTransition <T> [k];

                for (var x = 0; x < k; x++)
                {
                    var idx = permutation[x];
                    transitionPermutation[x] = WithinHostTransitionsFromState[idx];
                }
                _cachedPermutations.Add(transitionPermutation);
            }

            _permutationCacheSize = WithinHostTransitionsFromState.Count;
        }