Ejemplo n.º 1
0
        public ISolution Mutate(ISolution solution)
        {
            ISolutionPair[] solutionPairs = new ISolutionPair[solution.GetSolutionPairs().Count];
            int             i             = 0;

            foreach (var item in solution.GetSolutionPairs())
            {
                var temp = item;
                solutionPairs[i] = temp;
                i++;
            }

            int rnd = this.random.Next(solutionPairs.Length);
            var wm  = solutionPairs[rnd].WorkerMan;

            do
            {
                solutionPairs[rnd].WorkerMan = this.workerMens[random.Next(this.workerMens.Length)];     //megváltoztatom az egyik munkást
            } while (solutionPairs[rnd].WorkerMan == wm);



            return(new Solution()
            {
                SolutionPairs = solutionPairs.ToList()
            });
        }
Ejemplo n.º 2
0
        private int GetFitnessForSolutionPair(ISolutionPair pair, List<ISolutionPair> solutionPairs)
        {
            WorkerMan workerMan = pair.WorkerMan;
            WorkToDo workToDo = pair.WorkToDo;
            return (workerMan.WorkingTimeByComplexity(workToDo.Complexity) / workerMan.Quality); // idő/minőség = fitnessz

        }
Ejemplo n.º 3
0
        private int GetFitnessForSolutionPair(ISolutionPair pair, List <ISolutionPair> solutionPairs)
        {
            WorkerMan workerMan = pair.WorkerMan;
            WorkToDo  workToDo  = pair.WorkToDo;

            //int maxWork = workerMan.WorkingMinutes;
            //var thisMenAllWorkTime =
            //    solutionPairs
            //    .Where(x => x.WorkerMan == workerMan)
            //    .Select(x => x.WorkerMan.WorkingTimeByComplexity(x.WorkToDo.Complexity)).Sum();
            //if (thisMenAllWorkTime > maxWork)
            //{
            //    return ((workerMan.WorkingTimeByComplexity(workToDo.Complexity) / workerMan.Quality)+1) * 1000; //ha nem fér bele a munka idejébe, akkor durván lehúzzuk
            //}
            //else
            //{
            return(workerMan.WorkingTimeByComplexity(workToDo.Complexity) / workerMan.Quality);      // idő/minőség = fitnessz
            //  }
        }