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); }
public Mochila Clone() { Mochila temp = new Mochila(this.CapacidadeMaxima); foreach (IComponente it in this.Componentes) temp.AddComponente((Item)it); return temp; }
public Mochila Clone() { Mochila temp = new Mochila(this.CapacidadeMaxima); foreach (IComponente it in this.Componentes) { temp.AddComponente((Item)it); } return(temp); }