/// <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.</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 SapsUtils.SeedsToUse(numSeedsToUse, rngSeed)) { instanceSeedFiles.Add(new InstanceSeedFile(instanceFilePath.FullName, seed)); fileAndSeedCsv += $";{seed}"; } instanceSeedCombinations.Add(fileAndSeedCsv); } SapsUtils.DumpFileSeedCombinations(instanceDirectory, instanceSeedCombinations); return(instanceSeedFiles); } catch (Exception e) { Console.Out.WriteLine(e.Message); Console.Out.WriteLine("Cannot open folder."); throw; } }
BuildSapsAlgorithmTuner( AlgorithmTunerConfiguration tunerConfig, string trainingInstanceFolder, string testInstanceFolder, SapsRunnerConfiguration runnerConfig) { var tuner = new AlgorithmTuner <SapsRunner, InstanceSeedFile, RuntimeResult, TLearnerModel, TPredictorModel, TSamplingStrategy>( targetAlgorithmFactory: new SapsRunnerFactory(runnerConfig.PathToExecutable, tunerConfig.CpuTimeout), runEvaluator: new SortByRuntime(runnerConfig.FactorParK), trainingInstances: SapsUtils.CreateInstances(trainingInstanceFolder, runnerConfig.NumberOfSeeds, runnerConfig.RngSeed), parameterTree: SapsUtils.CreateParameterTree(), configuration: tunerConfig); if (!string.IsNullOrWhiteSpace(testInstanceFolder)) { tuner.SetTestInstances(SapsUtils.CreateInstances(testInstanceFolder, runnerConfig.NumberOfSeeds, runnerConfig.RngSeed)); } return(tuner); }
BuildSapsAlgorithmTuner( AlgorithmTunerConfiguration tunerConfig, string trainingInstanceFolder, string testInstanceFolder, SapsRunnerConfiguration 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 <SapsRunner, InstanceSeedFile, RuntimeResult, TLearnerModel, TPredictorModel, TSamplingStrategy>( targetAlgorithmFactory: new SapsRunnerFactory(runnerConfig.PathToExecutable, tunerConfig.CpuTimeout), runEvaluator: runEvaluator, trainingInstances: InstanceSeedFile.CreateInstanceSeedFilesFromDirectory( trainingInstanceFolder, SapsUtils.ListOfValidFileExtensions, runnerConfig.NumberOfSeeds, runnerConfig.RngSeed), parameterTree: SapsUtils.CreateParameterTree(), configuration: tunerConfig); if (!string.IsNullOrWhiteSpace(testInstanceFolder)) { tuner.SetTestInstances( InstanceSeedFile.CreateInstanceSeedFilesFromDirectory( testInstanceFolder, SapsUtils.ListOfValidFileExtensions, runnerConfig.NumberOfSeeds, runnerConfig.RngSeed)); } return(tuner); }