Ejemplo n.º 1
0
        /// <summary>
        /// Handles a data record update by adding an element to the list of data records and checking for gray box cancellation, if desired.
        /// </summary>
        /// <param name="sender">Sender object.</param>
        /// <param name="adapterDataRecord">The adapter data record.</param>
        private void HandleDataRecordUpdate(object sender, AdapterDataRecord <TResult> adapterDataRecord)
        {
            lock (this._lock)
            {
                var currentDataRecord = new DataRecord <TResult>(this._tunerDataRecord.Copy(), adapterDataRecord);

                if (this._useGrayBoxInCurrentEvaluation && currentDataRecord.AdapterDataRecord.TargetAlgorithmStatus
                    == TargetAlgorithmStatus.Running &&
                    currentDataRecord.AdapterDataRecord.ExpendedWallClockTime
                    >= this._configuration.GrayBoxStartTimePoint)
                {
                    var grayBoxFeatures   = this._customGrayBoxMethods.GetGrayBoxFeaturesFromDataRecord(currentDataRecord);
                    var grayBoxConfidence = this._grayBoxRandomForest.PredictProbability(grayBoxFeatures)
                                            .Probabilities[GrayBoxUtils.GrayBoxLabelOfTimeouts];
                    currentDataRecord.TunerDataRecord.GrayBoxConfidence = grayBoxConfidence;

                    if (grayBoxConfidence >= this._configuration.GrayBoxConfidenceThreshold)
                    {
                        this._grayBoxTargetAlgorithm.CancelByGrayBox();
                        LoggingHelper.WriteLine(
                            VerbosityLevel.Info,
                            $"Cancelled the current evaluation by gray box tuning with confidence {grayBoxConfidence:0.######}!");
                    }
                }

                this._listOfDataRecords.Add(currentDataRecord);
            }
        }
Ejemplo n.º 2
0
        public void CorrectGrayBoxFeaturesAreSelected()
        {
            var gurobiGrayBoxMethods = new GurobiGrayBoxMethods();

            var runtimeFeatures       = new GurobiRuntimeFeatures(DateTime.Now);
            var instanceFeatures      = new GurobiInstanceFeatures();
            var adapterFeatures       = GurobiUtils.ComposeAdapterFeatures(runtimeFeatures, runtimeFeatures, instanceFeatures);
            var adapterFeaturesHeader = GurobiUtils.ComposeAdapterFeaturesHeader(runtimeFeatures, runtimeFeatures, instanceFeatures);
            var result = new GurobiResult(double.NaN, TimeSpan.MaxValue, TargetAlgorithmStatus.CancelledByTimeout, false);

            var adapterDataRecord = new AdapterDataRecord <GurobiResult>(
                "Gurobi901",
                TargetAlgorithmStatus.Running,
                TimeSpan.Zero,
                TimeSpan.Zero,
                DateTime.Now,
                adapterFeaturesHeader,
                adapterFeatures,
                result);

            var tunerDataRecord = new TunerDataRecord <GurobiResult>(
                "Node",
                0,
                0,
                "Instance",
                0.5,
                new[] { "Genome" },
                (GenomeDoubleRepresentation) new[] { 0D },
                result);

            var dataRecord = new DataRecord <GurobiResult>(tunerDataRecord, adapterDataRecord);

            var featureNames = gurobiGrayBoxMethods.GetGrayBoxFeatureNamesFromDataRecord(dataRecord);

            var correctFeatureNames = new[]
            {
                "ExpendedWallClockTime",
                "RuntimeFeature_CuttingPlanesCount_Current",
                "RuntimeFeature_ExploredNodeCount_Current",
                "RuntimeFeature_FeasibleSolutionsCount_Current",
                "RuntimeFeature_MipGap_Current",
                "RuntimeFeature_SimplexIterationsCount_Current",
                "RuntimeFeature_UnexploredNodeCount_Current",
                "RuntimeFeature_CuttingPlanesCount_Last",
                "RuntimeFeature_ExploredNodeCount_Last",
                "RuntimeFeature_FeasibleSolutionsCount_Last",
                "RuntimeFeature_MipGap_Last",
                "RuntimeFeature_SimplexIterationsCount_Last",
                "RuntimeFeature_UnexploredNodeCount_Last",
                "InstanceFeature_NumberOfIntegerVariables",
                "InstanceFeature_NumberOfLinearConstraints",
                "InstanceFeature_NumberOfNonZeroCoefficients",
                "InstanceFeature_NumberOfVariables",
            };

            featureNames.SequenceEqual(correctFeatureNames).ShouldBeTrue();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds the final data record to the list of data records, if missing.
        /// </summary>
        /// <param name="finalResult">The final result.</param>
        private void AddFinalDataRecordIfMissing(TResult finalResult)
        {
            var lastDataRecord = this._listOfDataRecords.Last();

            if (lastDataRecord.AdapterDataRecord.TargetAlgorithmStatus == TargetAlgorithmStatus.Running)
            {
                var newLastTunerDataRecord = lastDataRecord.TunerDataRecord.Copy();
                newLastTunerDataRecord.GrayBoxConfidence = double.NaN;

                var newLastAdapterDataRecord = new AdapterDataRecord <TResult>(
                    lastDataRecord.AdapterDataRecord.TargetAlgorithmName,
                    finalResult.TargetAlgorithmStatus,
                    lastDataRecord.AdapterDataRecord.ExpendedCpuTime,
                    lastDataRecord.AdapterDataRecord.ExpendedWallClockTime,
                    DateTime.Now,
                    lastDataRecord.AdapterDataRecord.AdapterFeaturesHeader,
                    lastDataRecord.AdapterDataRecord.AdapterFeatures,
                    finalResult);

                var newLastDataRecord = new DataRecord <TResult>(newLastTunerDataRecord, newLastAdapterDataRecord);
                this._listOfDataRecords.Add(newLastDataRecord);
            }
        }