Exemplo n.º 1
0
        public async Task <IActionResult> PerformPreGenerationChecks([FromBody] ScheduleCreatorDto scheduleCreator)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            string assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
                                  .Substring(6) + Path.DirectorySeparatorChar + scheduleCreator.AssemblyDirName;


            if (!scheduleCreator.Date.HasValue)
            {
                return(BadRequest());
            }

            ISpeciesOriginator speciesOriginator = DynamicFactory.GetSpeciesOriginator(assemblyPath, scheduleCreator.Date.Value, scheduleCreator.Args);

            List <Requirement> requirements = DynamicFactory.GetRequirements(assemblyPath, scheduleCreator.Date.Value, scheduleCreator.Args);

            await speciesOriginator.SetDataFromCustomApi();

            var messenger = speciesOriginator.PerformPreGenerationChecks();

            return(Ok(messenger.Messages));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetSchedule([FromBody] ScheduleCreatorDto scheduleCreator)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            /*//string assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
             *                        .Substring(6) + Path.DirectorySeparatorChar + scheduleCreator.AssemblyDirName;*/

            string assemblyPath = Path.Combine(_environment.ContentRootPath, scheduleCreator.AssemblyDirName);

            if (!scheduleCreator.Date.HasValue)
            {
                return(BadRequest());
            }

            ISpeciesOriginator speciesOriginator = DynamicFactory.GetSpeciesOriginator(assemblyPath, scheduleCreator.Date.Value, scheduleCreator.Args);

            List <Requirement> requirements = DynamicFactory.GetRequirements(assemblyPath, scheduleCreator.Date.Value, scheduleCreator.Args);

            await speciesOriginator.SetDataFromCustomApi();

            foreach (var requirement in requirements)
            {
                await requirement.SetDataFromRemoteApi();
            }

            Population population = new Population(new CostCalculator(requirements), speciesOriginator);

            population.Initialize();

            population.CalculateGeneralCost();

            do
            {
                population.PerformNaturalSelection();

                population.CalculateGeneralCost();
            } while (population.NumberOfGenerations < 100);

            IAllel[,] solution = population.BestSolution.Dna;

            Dictionary <DateTime, object> data = speciesOriginator.CustomFormatSolution(solution, scheduleCreator.Date.Value);

            Dictionary <string, object> dataToReturn = Converter.ConvertDateTimeToString(data);

            return(Ok(dataToReturn));
        }
Exemplo n.º 3
0
        public static ISpeciesOriginator GetSpeciesOriginator(string assemblyPath, DateTime date, List <Object> arguments)
        {
            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => LoadAssemblyFromFile(sender, args, assemblyPath);

            if (!Directory.Exists(assemblyPath))
            {
                throw new InvalidOperationException($"Could not find the assembly path {assemblyPath}");
            }

            IEnumerable <string> assemblyFiles =
                Directory.EnumerateFiles(assemblyPath, "*.dll", SearchOption.TopDirectoryOnly);


            string assemblyFile = assemblyFiles.First();

            Assembly assembly = Assembly.LoadFrom(assemblyFile);

            ISpeciesOriginator speciesOriginator = null;

            foreach (var type in assembly.ExportedTypes)
            {
                if (type.IsClass && typeof(ISpeciesOriginator).IsAssignableFrom(type))
                {
                    arguments.Add(date);
                    Object[] args = arguments.ToArray();

                    // parametry w konstruktorach muszą mieć taką samą kolejność jak w talicy Object[] args;

                    speciesOriginator = Activator.CreateInstance(type, args) as ISpeciesOriginator;
                    arguments.Remove(date);
                    break;
                }
            }

            return(speciesOriginator);
        }
Exemplo n.º 4
0
 public Population(CostCalculator costCalculator, ISpeciesOriginator speciesOriginatorOriginator)
 {
     this._costCalculator               = costCalculator;
     this._speciesOriginator            = speciesOriginatorOriginator;
     _costCalculator.BestSolutionFound += OnBestSolutionFound;
 }