Пример #1
0
        private static void Main(string[] args)
        {
            if (!(args.Length == 3) || !int.TryParse(args[0], out _))
            {
                Console.WriteLine("Usage: WeigthOptimizer <indexMode> <indexPath> <outputPath>");
                Console.WriteLine("Source path must contain one folder per language (sl, hr, ...) with the Xml CoNLL-UP files.");
                Console.WriteLine("Index mode can be: 0=single index file per type, 1=index file per language");

                return;
            }

            var langArray = GeneticOptimizer <ParametrizedEnsembleCandidate <Paragraph>, ParametrizedSearchQuery, Paragraph> .SupportedLanguages;

            List <Task> tasks = new List <Task>();

            for (int srcloop = 0; srcloop < langArray.Count; srcloop++)
            {
                IndexManager indexManager = new IndexManager((IndexingMode)int.Parse(args[0]), args[1], true);
                for (int tgtloop = 0; tgtloop < langArray.Count; tgtloop++)
                {
                    if (srcloop != tgtloop)
                    {
                        int          src     = srcloop;
                        int          tgt     = tgtloop;
                        IndexManager manager = indexManager;
                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            Console.WriteLine("[{0}]: Startingh alignement for language pair: {1}, {2}.", DateTime.Now, src, tgt);
                            string logPathSentence  = @$ "{args[2]}\_{langArray[src]}_{langArray[tgt]}";
                            string logPathParagraph = @$ "{args[2]}\{langArray[src]}_{langArray[tgt]}";
                            System.IO.Directory.CreateDirectory(logPathSentence);
                            System.IO.Directory.CreateDirectory(logPathParagraph);
                            var go1 = new GeneticOptimizer <ParametrizedOptimizingAlignerCandidate <Paragraph>, ParametrizedSearchQuery, Paragraph>(manager, trainingSetReseedFrequency: 1, sourceLanguageIndex: src, targetLanguageIndex: tgt);
                            var go2 = new GeneticOptimizer <ParametrizedOptimizingAlignerCandidate <Sentence>, ParametrizedSearchQuery, Sentence>(manager, trainingSetReseedFrequency: 1, sourceLanguageIndex: src, targetLanguageIndex: tgt);
                            for (int i = 0; i < 8; i++)
                            {
                                Console.WriteLine("[{0}]: Starting iteration {1} for paragraph alignement for language pair: {2}, {3}.", DateTime.Now, i, langArray[src], langArray[tgt]);

                                go1.AdvanceGeneration();
                                go1.SaveState(logPathParagraph);

                                Console.WriteLine("[{0}]: Starting iteration {1} for sentence alignement for language pair: {2}, {3}.", DateTime.Now, i, langArray[src], langArray[tgt]);

                                go2.AdvanceGeneration();
                                go2.SaveState(logPathSentence);

                                Console.WriteLine("[{0}]: Completed iteration {1} for for language pair: {2}, {3}.", DateTime.Now, i, langArray[src], langArray[tgt]);
                            }
                        }, TaskCreationOptions.LongRunning));
Пример #2
0
        private void ensureInitialized()
        {
            if (precedenceTree == null)
            {
                precedenceTree = new PathTree(paths);

                evaluator = new TravelCostEvaluator(precedenceTree);
                selector  = new RouletteWheelSelector();
                IMutator mutator = new ReverseSequenceMutator();
                procreator = new SexualProcreator(new ShortestTravelCrossover(precedenceTree), mutator, 0.5);

                Population genesis = new Population();

                Individual individual0         = genesis.Append();
                IReadOnlyList <PathNode> nodes = precedenceTree.NearestNeighborTraversal();
                List <int> chromosome0         = individual0.GetChromosome();
                chromosome0.AddRange(nodes.Select(node => node.Id));
                //chromosome0.AddRange(Enumerable.Range(0, precedenceTree.Nodes.Count));
                evaluator.Baseline(chromosome0);

                //List<int> lastChromosome = chromosome0;
                for (int i = 1; i < 100; i++)
                {
                    List <int> chromosome = genesis.Append().GetChromosome();
                    chromosome.AddRange(chromosome0);
                    //chromosome.AddRange(lastChromosome);
                    mutator.Mutate(chromosome, random);
                    //lastChromosome = chromosome;
                }

                genesis.Freeze(evaluator);

                optimizer         = new GeneticOptimizer(genesis);
                maxFitness        = double.MinValue;
                optimalPriorities = new List <int>();
            }
        }