예제 #1
0
        internal bool ProcessEvent(Node parentNode, TSuccessor successor)
        {
            var state = parentNode.State as TState;
            var args  = new StateExpansionEventArgs(state, successor, parentNode.Cost, parentNode.Depth);

            OnSuccessorExpanded(this, args);
            return(!args.CancelExpansion);
        }
예제 #2
0
        /// <summary>
        /// Handles the <see cref="E:SuccessorExpanded" /> event.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="StateExpansionEventArgs"/> instance containing the event data.</param>
        protected virtual void OnSuccessorExpanded(object sender, StateExpansionEventArgs e)
        {
            EventHandler <StateExpansionEventArgs> handler = SuccessorExpanded;

            if (handler != null)
            {
                handler(sender, e);
            }
        }
예제 #3
0
        /// <summary>
        ///   Finds the specified initial state.
        /// </summary>
        /// <param name="initialState">The initial state.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public virtual bool Find(TState initialState)
        {
            if (Strategy == null)
            {
                return(false);
            }

            Strategy.Add(new Node(initialState));
            while (Strategy.Count() > 0)
            {
                var n = Strategy.Remove();
                if (n.Parent != null && n.Successor != null)
                {
                    var eventArgs = new StateExpansionEventArgs(
                        (TState)n.Parent.State,
                        (TSuccessor)n.Successor,
                        n.Cost,
                        n.Depth);
                    OnSuccessorExpanded(this, eventArgs);

                    if (eventArgs.CancelExpansion)
                    {
                        return(false);
                    }
                }

                if (n.State.IsTerminal)
                {
                    CreateSolution(n);
                    return(true);
                }

                foreach (var node in n.Expand(_closed))
                {
                    Strategy.Add(node);
                    _closed?.Add(node.State);
                }
            }

            return(false);
        }
예제 #4
0
파일: Search.cs 프로젝트: sethjuarez/numl
 /// <summary>
 /// Handles the <see cref="E:SuccessorExpanded" /> event.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="e">The <see cref="StateExpansionEventArgs"/> instance containing the event data.</param>
 protected virtual void OnSuccessorExpanded(object sender, StateExpansionEventArgs e)
 {
     EventHandler<StateExpansionEventArgs> handler = SuccessorExpanded;
     if (handler != null)
         handler(sender, e);
 }
예제 #5
0
        /// <summary>
        ///   Handles the <see cref="E:SuccessorExpanded" /> event.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="StateExpansionEventArgs" /> instance containing the event data.</param>
        protected virtual void OnSuccessorExpanded(object sender, StateExpansionEventArgs e)
        {
            var handler = SuccessorExpanded;

            handler?.Invoke(sender, e);
        }