/// <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; } }
/// <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; }
/// <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); }
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); }
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); }