public void AddOperator(OperatorStrips newOperator) { if (!operators.Contains(newOperator)) { operators.Add(newOperator); } }
public string GetNextAction() { desiredTags.Add("Goal"); Analize(); OperatorStrips nextOperation = currentPlan[0]; return(nextOperation.GetFunctionName()); }
/// <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); } }
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()); }