Beispiel #1
0
        //public List<Requisito> dependentes { get; set; }

        public Requisito(long id, long custo, long interesse = 0, Requisito pDependente = null)
        {
            this.id_requisito    = id;
            this.custo           = custo;
            this.valor_interesse = interesse;
            this.dependente      = pDependente;
        }
Beispiel #2
0
        public string Backtracking(long custo_release, List <Requisito> requisitos, List <Patrocinador> patrocinadores, StreamWriter _console)
        {
            long      custo_atual = 0;
            Requisito r           = null;

            try
            {
                if (custo_release >= custo_atual && requisitos.Count >= 0 && patrocinadores.Count >= 0)
                {
                    foreach (Requisito release in requisitos)
                    {
                        foreach (Patrocinador p in patrocinadores)
                        {
                            #region Patrocinadores sem o atual
                            List <Patrocinador> patrocinadores_sem_atual = patrocinadores.ToList();
                            patrocinadores_sem_atual.Remove(p);
                            #endregion

                            foreach (Patrocinador p2 in patrocinadores_sem_atual)
                            {
                                if (p.list_interesse_requi.Count > 0 && p2.list_interesse_requi.Count > 0)
                                {
                                    // Processa a solução, ou seja, retorna o requisito de maior prioridade
                                    r = new Program().ProcessaSolucao(p, p2);
                                    if (r == null)
                                    {
                                        break;
                                    }

                                    // Remove o requisito que já foi atribuido a release das listas do patrocinador
                                    p.list_interesse_requi.RemoveAll(x => x.id_requisito == r.id_requisito);
                                    p2.list_interesse_requi.RemoveAll(x => x.id_requisito == r.id_requisito);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (r != null)
                            {
                                if (custo_release >= custo_atual + r.custo)
                                {
                                    // calcula o custo dos requisitos que já estão na release com o que esta sendo adicionado agora
                                    custo_atual = custo_atual + r.custo;

                                    // É "impresso" o requisito de retorno do backtraking, e realiza uma chamada recussiva para o
                                    // próprio método passando os parametros sem o requisito que já está na release

                                    string out_release = Backtracking(custo_release - custo_atual, requisitos, patrocinadores, _console);
                                    _console.Write(out_release);
                                    Console.Write(out_release);
                                    _console.Write(r.id_requisito.ToString() + " - ");
                                    return(r.id_requisito.ToString() + " - ");
                                }
                            }
                        }
                    }
                }
                return(null);
            }
            catch (Exception ex)
            {
                return("error");
            }
        }