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 override bool VerificaSolucaoCompleta() { int espaco = Mochila.CapacidadeMaxima - Mochila.CapacidadeAtual; if (espaco > 0) { return(ItensDisponiveis.Where(x => x.Peso <= espaco && !Mochila.Componentes.Contains(x)).ToList().Count == 0); } else { return(true); } }
public void AddItem(Item item) { ItensDisponiveis.Add(item); }