Example #1
0
        /// <summary>
        /// Creates the list of SAT instances to train on using .cnf files in the given directory.
        /// </summary>
        /// <param name="pathToInstanceFolder">Path to the folder containing the instance .cnf files.</param>
        /// <param name="numSeedsToUse">The number of seeds to use.</param>
        /// <param name="rngSeed">The random number generator seed.</param>
        /// <returns>
        /// The created list.
        /// </returns>
        public static List<InstanceSeedFile> CreateInstances(string pathToInstanceFolder, int numSeedsToUse, int rngSeed)
        {
            try
            {
                // Find all .cnf files in directory and set them as instances.
                var instanceDirectory = new DirectoryInfo(pathToInstanceFolder);
                var instanceSeedCombinations = new List<string>();
                var instanceSeedFiles = new List<InstanceSeedFile>();
                foreach (var instanceFilePath in instanceDirectory.EnumerateFiles()
                    .Where(file => file.Extension.ToLower() == ".cnf"))
                {
                    var fileAndSeedCsv = instanceFilePath.FullName;
                    foreach (var seed in LingelingUtils.SeedsToUse(numSeedsToUse, rngSeed))
                    {
                        instanceSeedFiles.Add(new InstanceSeedFile(instanceFilePath.FullName, seed));
                        fileAndSeedCsv += $";{seed}";
                    }

                    instanceSeedCombinations.Add(fileAndSeedCsv);
                }

                LingelingUtils.DumpFileSeedCombinations(instanceDirectory, instanceSeedCombinations);
                return instanceSeedFiles;
            }
            catch (Exception e)
            {
                Console.Out.WriteLine(e.Message);
                Console.Out.WriteLine("Cannot open folder.");
                throw;
            }
        }
Example #2
0
 /// <summary>
 /// Creates a parameter tree from the "lingelingParamTree.xml" in the working directory.
 /// </summary>
 /// <returns>The <see cref="ParameterTree"/>.</returns>
 public static ParameterTree CreateParameterTree()
 {
     var parameterTree = ParameterTreeConverter.ConvertToParameterTree(
         Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"lingelingParamTree.xml"));
     LingelingUtils.AddAllActiveParameterWrappers(parameterTree);
     return parameterTree;
 }
Example #3
0
        /// <summary>
        /// Creates a parameter tree from the "parameterTree.xml" in the working directory.
        /// </summary>
        /// <returns>The <see cref="ParameterTree"/>.</returns>
        public static ParameterTree CreateParameterTree()
        {
            var parameterTree = ParameterTreeConverter.ConvertToParameterTree(
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory ?? throw new InvalidOperationException(), @"parameterTree.xml"));

            LingelingUtils.AddAllActiveParameterWrappers(parameterTree);
            return(parameterTree);
        }
Example #4
0
        BuildLingelingAlgorithmTuner(
            AlgorithmTunerConfiguration tunerConfig,
            string trainingInstanceFolder,
            string testInstanceFolder,
            LingelingRunnerConfiguration runnerConfig)
        {
            IRunEvaluator <InstanceSeedFile, RuntimeResult> runEvaluator;

            if (runnerConfig.FactorParK == 0)
            {
                runEvaluator = new SortByUnpenalizedRuntime <InstanceSeedFile>(tunerConfig.CpuTimeout);
            }
            else
            {
                runEvaluator = new SortByPenalizedRuntime <InstanceSeedFile>(runnerConfig.FactorParK, tunerConfig.CpuTimeout);
            }

            var tuner = new AlgorithmTuner <LingelingRunner, InstanceSeedFile, RuntimeResult, TLearnerModel,
                                            TPredictorModel,
                                            TSamplingStrategy>(
                targetAlgorithmFactory: new LingelingRunnerFactory(runnerConfig.PathToExecutable, tunerConfig, runnerConfig.MemoryLimitMegabyte),
                runEvaluator: runEvaluator,
                trainingInstances: InstanceSeedFile.CreateInstanceSeedFilesFromDirectory(
                    trainingInstanceFolder,
                    LingelingUtils.ListOfValidFileExtensions,
                    runnerConfig.NumberOfSeeds,
                    runnerConfig.RngSeed),
                parameterTree: LingelingUtils.CreateParameterTree(),
                configuration: tunerConfig);

            if (!string.IsNullOrWhiteSpace(testInstanceFolder))
            {
                tuner.SetTestInstances(
                    InstanceSeedFile.CreateInstanceSeedFilesFromDirectory(
                        testInstanceFolder,
                        LingelingUtils.ListOfValidFileExtensions,
                        runnerConfig.NumberOfSeeds,
                        runnerConfig.RngSeed));
            }

            return(tuner);
        }
Example #5
0
        BuildLingelingAlgorithmTuner(
            AlgorithmTunerConfiguration tunerConfig,
            string trainingInstanceFolder,
            string testInstanceFolder,
            LingelingRunnerConfiguration runnerConfig)
        {
            var tuner = new AlgorithmTuner <LingelingRunner, InstanceSeedFile, RuntimeResult, TLearnerModel,
                                            TPredictorModel,
                                            TSamplingStrategy>(
                targetAlgorithmFactory: new LingelingRunnerFactory(runnerConfig.PathToExecutable, tunerConfig, runnerConfig.MemoryLimitMegabyte),
                runEvaluator: new SortByRuntime(runnerConfig.FactorParK),
                trainingInstances: LingelingUtils.CreateInstances(trainingInstanceFolder, runnerConfig.NumberOfSeeds, runnerConfig.RngSeed),
                parameterTree: LingelingUtils.CreateParameterTree(),
                configuration: tunerConfig);

            if (!string.IsNullOrWhiteSpace(testInstanceFolder))
            {
                tuner.SetTestInstances(LingelingUtils.CreateInstances(testInstanceFolder, runnerConfig.NumberOfSeeds, runnerConfig.RngSeed));
            }

            return(tuner);
        }