public AlgoritmoGenetico(int tP, int tI, int np, double pMut, IProblema pr) { poblacion = new Poblacion(tP, tI, pr); problema = pr; probMutacion = pMut; pasos = np; }
public BuscaEmArvoreBase(IProblema <T> problema) { Problema = problema; Raiz = new No <T> { Estado = Problema.Inicial }; }
/// <summary> /// Crea un array de Individuos de tamano tP. /// </summary> /// <param name="tP">Numero de individuos de la publiacion</param> /// <param name="tI">Longitud del cromosoma de los individuos</param> /// <param name="pr">Metodo a usar para calcular el fitness de cada individuo</param> public Poblacion(int tP, int tI, IProblema pr) { individuos = new Individuo[tP]; for (int i = 0; i < individuos.Length; i++) { individuos[i] = new Individuo(tI, pr); } }
public BuscaEmProfundidade(IProblema <T> problema, int?limite = null) { Problema = problema; this.limite = limite; Raiz = new No <T> { Estado = problema.Inicial }; borda.Push(Raiz); }
public AGUniforme(int tP, int tI, int np, double pMut, IProblema pr) : base(tP, tI, np, pMut, pr) { }
public Individuo(int tam, IProblema pr) { cromosoma = new Cromosoma(tam, true); fitness = pr.Evalua(cromosoma); }
public Individuo(Cromosoma cr, IProblema pr) { cromosoma = cr.Copia(); fitness = pr.Evalua(cromosoma); }
public BuscaAprofundamentoIterativo(IProblema <T> problema) { Problema = problema; algoritmoProfundidade = new BuscaEmProfundidadeComVisitados <T>(problema, Limite); }
public AGUnPunto(int tP, int tI, int np, double pMut, IProblema pr) : base(tP,tI,np,pMut,pr) { }
public BuscaEmLargura(IProblema <T> problema) : base(problema) { borda.Enqueue(Raiz); }
public BuscaCustoUniforme(IProblema <T> problema) : base(problema) { Raiz.Custo = 0; borda.Add(Raiz); }
public BuscaEmProfundidadeComVisitados(IProblema <T> problema, int?limite = null) : base(problema) { this.limite = limite; borda.Push(Raiz); }
static IAlgoritmo <T> InstanciaAlgoritmo <T>(IProblema <T> problema, Dictionary <string, string> dict) { var a = dict.GetValueOrDefault("a", "bfs"); switch (a) { case "bfs": return(new BuscaEmLargura <T>(problema)); case "dfs": return(new BuscaEmProfundidade <T>(problema, dict.GetIntOrDefault("l", null))); case "dfsv": return(new BuscaEmProfundidadeComVisitados <T>(problema, dict.GetIntOrDefault("l", null))); case "idfs": return(new BuscaAprofundamentoIterativo <T>(problema)); case "bb": #region Busca Bidirecional if (!(problema is ProblemaMapa)) { throw new ArgumentException("Problema não suportado por Busca Bidirecional."); } TipoAlgoritmo a1 = TipoAlgoritmo.BuscaEmLargura, a2 = TipoAlgoritmo.BuscaEmLargura; switch (dict.GetValueOrDefault("a1", "bfs")) { case "bfs": a1 = TipoAlgoritmo.BuscaEmLargura; break; case "dfs": a1 = TipoAlgoritmo.BuscaEmProfundidade; break; default: throw new ArgumentException("Algoritmo inválido para Busca Bidirecional."); } switch (dict.GetValueOrDefault("a2", "bfs")) { case "bfs": a2 = TipoAlgoritmo.BuscaEmLargura; break; case "dfs": a2 = TipoAlgoritmo.BuscaEmProfundidade; break; default: throw new ArgumentException("Algoritmo inválido para Busca Bidirecional."); } return(new BuscaBidirecional(problema as ProblemaMapa, a1, a2) as IAlgoritmo <T>); #endregion case "bcu": return(new BuscaCustoUniforme <T>(problema)); case "bgl": { if (problema is IProblemaHeuristica <T> p) { return(new BuscaGulosa <T>(p)); } throw new ArgumentException("Tipo de problema não suportado por Busca Gulosa."); } case "ba*": { if (problema is IProblemaHeuristica <T> p) { return(new BuscaAEsrela <T>(p)); } throw new ArgumentException("Tipo de problema não suportado Busca A*."); } default: throw new ArgumentException("Algoritmo inválido."); } }