예제 #1
0
 public void AddOperator(OperatorStrips newOperator)
 {
     if (!operators.Contains(newOperator))
     {
         operators.Add(newOperator);
     }
 }
예제 #2
0
    public string GetNextAction()
    {
        desiredTags.Add("Goal");

        Analize();

        OperatorStrips nextOperation = currentPlan[0];

        return(nextOperation.GetFunctionName());
    }
예제 #3
0
        /// <summary>
        /// Algoritmo regresivo
        /// </summary>
        private void ListaDeEstados(OperatorStrips estadoMeta)
        {
            //Estadisticas
            contador_operaciones++;

            _estadoFinal._pc.OrderBy(m =>
                                     (_allOperators.Where(x => x._a[0]._tag == m._tag).First()._pc.Count)
                                     );

            foreach (var _pc in estadoMeta._pc)
            {
                var _estadoAuxialiar = _allOperators.Where(x => x._a[0]._tag == _pc._tag).First();
                ListaDeEstados(_estadoAuxialiar);
            }

            if (!_currentPlan.Contains(estadoMeta))
            {
                _currentPlan.Add(estadoMeta);
            }
        }
예제 #4
0
        public CellInfo GetNextAction()
        {
            if (_allOperators.Count == 0)
            {
                var l = _character.BoardManager.boardInfo.ItemsOnBoard;
                foreach (PlaceableItem p in l)
                {
                    var lPC = new List <PropertyStrips>();
                    foreach (var pc in p.Preconditions)
                    {
                        lPC.Add(new PropertyStrips(pc.Tag));
                    }

                    var target = _character.BoardManager.boardInfo.CellWithItem(p.Tag);
                    _allOperators.Add(new OperatorStrips(lPC, target, p.Tag));
                }

                Debug.Log("Final");
            }

            if (_currentPlan.Count == 0)
            {
                //Obtenemos el estado final
                _estadoFinal = _allOperators.Where(x => x._a[0]._tag == "Goal").First();
                //Ordenamos el array en funcion de los objetivos
                _estadoFinal._pc.OrderBy(m =>
                                         (_allOperators.Where(x => x._a[0]._tag == m._tag).First()._pc.Count)
                                         );
                //Generamos el estado Meta
                var estadoMeta = new EstadoStrips(_estadoFinal._pc);
                //Iniciacion del documento
                var init = new ResultStrips
                {
                    Estado = new EstadoStrips(),
                    Plan   = new List <OperatorStrips>(),
                    Valido = true
                };

                ///////////////////////////////////////////////////////////
                ///////////////////ALGORITMO DE STRIPS/////////////////////
                ///////////////////////////////////////////////////////////

                //Obtenemos el resultado
                var result = StripsHeuristica(init, estadoMeta);
                //Lo metemos en el currentPlan
                _currentPlan = result.Plan;
                //Añadimos el estado final
                _currentPlan.Add(_estadoFinal);

                ///////////////////////////////////////////////////////////
                //ESTE ES EL OTRO ALGORITMO DE PLANIFICACION DE OBJETIVOS//
                ///////////////////////////////////////////////////////////

                // ListaDeEstados(_estadoFinal); //Descomentar para utilizar esta opcion


                //Estadisticas
                Debug.Log("Numero de operaciones " + contador_operaciones + " || PC Goal: " + _estadoFinal._pc.Count);
            }

            var nextOperation = _currentPlan[0];

            _currentPlan.RemoveAt(0);
            return(nextOperation.GetCellInfo());
        }