/// <summary> /// Builds a OPTANO Algorithm Tuner instance that tunes by process runtime. /// </summary> /// <param name="config"> /// The configuration. /// </param> /// <param name="trainingInstanceFolder"> /// The path to the folder containing training instances. /// </param> /// <param name="testInstanceFolder"> /// The path to the folder containing test instances. /// </param> /// <param name="basicCommand"> /// The basic command to the target algorithm as it should be executed by the /// command line. The path to the instance file and the parameters will be set by replacing /// <see cref="CommandExecutorBase{TResult}.InstanceReplacement"/> and /// <see cref="CommandExecutorBase{TResult}.ParameterReplacement"/>. /// </param> /// <param name="pathToParameterTree"> /// The path to a parameter tree defined via XML. /// </param> /// <param name="factorParK"> /// The factor for the penalization of the average runtime. /// </param> /// <returns> /// The built OPTANO Algorithm Tuner instance. /// </returns> private static AlgorithmTuner <TimeMeasuringExecutor, InstanceFile, RuntimeResult> BuildRuntimeTuner( AlgorithmTunerConfiguration config, string trainingInstanceFolder, string testInstanceFolder, string basicCommand, string pathToParameterTree, int factorParK) { IRunEvaluator <InstanceFile, RuntimeResult> runEvaluator; if (factorParK == 0) { runEvaluator = new SortByUnpenalizedRuntime <InstanceFile>(config.CpuTimeout); } else { runEvaluator = new SortByPenalizedRuntime <InstanceFile>(factorParK, config.CpuTimeout); } var tuner = new AlgorithmTuner <TimeMeasuringExecutor, InstanceFile, RuntimeResult>( targetAlgorithmFactory: new TimeMeasuringExecutorFactory(basicCommand, config.CpuTimeout), runEvaluator: runEvaluator, trainingInstances: ExtractInstances(trainingInstanceFolder), parameterTree: ParameterTreeConverter.ConvertToParameterTree(pathToParameterTree), configuration: config); if (testInstanceFolder != null) { tuner.SetTestInstances(ExtractInstances(testInstanceFolder)); } return(tuner); }
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); }