Esempio n. 1
0
 private static Boolean Eval(List <int> vecin, List <int> sol, Rucsac r)
 {
     if (CheckIsValid(vecin, r) == true)
     {
         if (r.Fitnes(vecin) > r.Fitnes(sol))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 2
0
 private static List <int> RepairSolution(List <int> sol, Rucsac r)
 {
     while (CheckIsValid(sol, r) == false)
     {
         Random rnd    = new Random();
         int    indice = rnd.Next(0, r.NumarObiecte);
         while (sol[indice] == 0)
         {
             indice = rnd.Next(0, r.NumarObiecte);
         }
         sol[indice] = 0;
     }
     return(sol);
 }
Esempio n. 3
0
        private static List <int> SAHL(Rucsac r, int k)
        {
            List <int> solutie = GenerateRandomSearch(r.NumarObiecte, new Random());
            List <int> best    = new List <int>(r.NumarObiecte);
            int        indice  = 0;
            int        contor  = 0;

            solutie = RepairSolution(solutie, r);
            best    = new List <int>(solutie);
            Console.WriteLine(r.GreutateTotalaASolutie(solutie));
            Console.WriteLine("Valoare = " + r.Fitnes(solutie));
            WriteSolutie(solutie);

            while (indice < k)
            {
                List <int> vecinSol = GetVecin(solutie, r.NumarObiecte);

                if (Eval(vecinSol, solutie, r) == true)
                {
                    solutie = new List <int>(vecinSol);
                    Console.WriteLine("\nSe schimba solutie\n");

                    if (Eval(solutie, best, r) == true)
                    {
                        best = new List <int>(solutie);
                        Console.WriteLine("\nSe schimba bestul\n");
                    }
                }
                else
                {
                    contor++;
                }

                if (contor == r.NumarObiecte)
                {
                    solutie = GenerateRandomSearch(r.NumarObiecte, new Random());
                    solutie = RepairSolution(solutie, r);
                    contor  = 0;
                }
                indice++;
            }

            return(best);
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            Rucsac rucsac = new Rucsac();
            string path   = Meniu();
            string con    = "y";

            rucsac.CitesteDinFisier(path);

            while (con == "y")
            {
                Console.Write("k = ");
                int        k        = Convert.ToInt32(Console.ReadLine());
                List <int> solFinal = SAHL(rucsac, k);
                int        fitnes   = rucsac.GreutateTotalaASolutie(solFinal);

                Console.WriteLine(fitnes);
                WriteSolutie(solFinal);
                WriteSolutieToFile(solFinal, fitnes);

                Console.WriteLine("Vrei sa mai rulezi inca o data? (y sau n)");
                con = Console.ReadLine();
            }
        }