Beispiel #1
0
        /// <summary>
        /// Enumerates all possible sequences of alternatives
        /// </summary>
        /// <param name="obs">optional exploration observer</param>
        /// <returns>a concatenation of all possible sequences of exploration alternatives</returns>
        public IEnumerable <Alternative> Enumerate(IDSEObserver obs)
        {
            var  enums     = _tasks.Select(t => t.Alternatives.GetEnumerator()).ToArray();
            bool emptyAlts = false;

            foreach (var iter in enums)
            {
                if (!iter.MoveNext())
                {
                    emptyAlts = true;
                    break;
                }
            }
            if (emptyAlts)
            {
                yield break;
            }

            long progress = 0;
            bool end      = false;

            do
            {
                if (obs != null)
                {
                    obs.OnBeginFlow(enums.Select(iter => iter.Current), progress);
                }

                for (int i = 0; i < enums.Length; i++)
                {
                    if (obs != null)
                    {
                        obs.OnBeginTask(_tasks[i], enums[i].Current, progress++);
                    }
                    yield return(enums[i].Current);
                }

                end = true;
                foreach (var iter in enums)
                {
                    if (iter.MoveNext())
                    {
                        end = false;
                        break;
                    }
                    else
                    {
                        iter.Reset();
                        iter.MoveNext();
                    }
                }
            } while (!end);

            if (obs != null)
            {
                obs.OnEndOfDSE();
            }
        }
Beispiel #2
0
        /// <summary>
        /// Performs a design-space exploration
        /// </summary>
        /// <param name="obs">optional exploration observer</param>
        public void Explore(IDSEObserver obs = null)
        {
            if (obs != null)
            {
                long spaceSize = Enumerate(null).LongCount();
                obs.NotifySpaceSize(spaceSize);
            }

            foreach (var alt in Enumerate(obs))
            {
                alt.StepAction();
            }
        }
        /// <summary>
        /// Performs a design-space exploration
        /// </summary>
        /// <param name="obs">optional exploration observer</param>
        public void Explore(IDSEObserver obs = null)
        {
            if (obs != null)
            {
                long spaceSize = Enumerate(null).LongCount();
                obs.NotifySpaceSize(spaceSize);
            }

            foreach (var alt in Enumerate(obs))
                alt.StepAction();
        }
        /// <summary>
        /// Enumerates all possible sequences of alternatives
        /// </summary>
        /// <param name="obs">optional exploration observer</param>
        /// <returns>a concatenation of all possible sequences of exploration alternatives</returns>
        public IEnumerable<Alternative> Enumerate(IDSEObserver obs)
        {
            var enums = _tasks.Select(t => t.Alternatives.GetEnumerator()).ToArray();
            bool emptyAlts = false;
            foreach (var iter in enums)
            {
                if (!iter.MoveNext())
                {
                    emptyAlts = true;
                    break;
                }
            }
            if (emptyAlts)
                yield break;

            long progress = 0;
            bool end = false;
            do
            {
                if (obs != null)
                    obs.OnBeginFlow(enums.Select(iter => iter.Current), progress);

                for (int i = 0; i < enums.Length; i++)
                {
                    if (obs != null)
                        obs.OnBeginTask(_tasks[i], enums[i].Current, progress++);
                    yield return enums[i].Current;
                }

                end = true;
                foreach (var iter in enums)
                {
                    if (iter.MoveNext())
                    {
                        end = false;
                        break;
                    }
                    else
                    {
                        iter.Reset();
                        iter.MoveNext();
                    }
                }
            } while (!end);

            if (obs != null)
                obs.OnEndOfDSE();
        }