コード例 #1
0
        public override List <ISolucao> GerarVizinhanca()
        {
            List <ISolucao> vizinhos = new List <ISolucao>();

            Random random = new Random();

            for (int c = 0; c < Solucao.Componentes.Count; c++)
            {
                Mochila temp = ((Mochila)Solucao).Clone();

                Item item = (Item)temp.Componentes[c];

                temp.RemoveComponente(item);

                int espaco = temp.CapacidadeMaxima - temp.CapacidadeAtual;

                while (espaco > 0)
                {
                    List <Item> comps = ItensDisponiveis.Where(x => x.Peso <= espaco &&
                                                               !temp.Componentes.Contains(x) && x != item).ToList();

                    Item selected = comps.Where(x => (int)x.Utilidade == comps.Max(z => (int)z.Utilidade))
                                    .FirstOrDefault();

                    temp.AddComponente(selected);

                    espaco = temp.CapacidadeMaxima - temp.CapacidadeAtual;
                }

                vizinhos.Add(temp);
            }

            return(vizinhos);
        }
コード例 #2
0
        public Mochila Clone()
        {
            Mochila temp = new Mochila(this.CapacidadeMaxima);

            foreach (IComponente it in this.Componentes)
                temp.AddComponente((Item)it);

            return temp;
        }
コード例 #3
0
        public Mochila Clone()
        {
            Mochila temp = new Mochila(this.CapacidadeMaxima);

            foreach (IComponente it in this.Componentes)
            {
                temp.AddComponente((Item)it);
            }

            return(temp);
        }