/// <summary> /// Creates the final <see cref="AdapterDataRecord{GurobiResult}"/>. /// </summary> /// <param name="timeStamp">The time stamp.</param> /// <param name="model">The <see cref="GRBModel"/>.</param> /// <param name="result">The <see cref="GurobiResult"/>.</param> /// <returns>The final <see cref="AdapterDataRecord{GurobiResult}"/>.</returns> private AdapterDataRecord <GurobiResult> CreateFinalAdapterDataRecord(DateTime timeStamp, GRBModel model, GurobiResult result) { if (this._instanceFeatures == null) { throw new ArgumentNullException(nameof(this._instanceFeatures)); } var finalRuntimeFeatures = this.GetFinalGurobiRuntimeFeatures(model, result); var lastRuntimeFeatures = this._lastRuntimeFeatures ?? finalRuntimeFeatures; var adapterFeatures = GurobiUtils.ComposeAdapterFeatures(finalRuntimeFeatures, lastRuntimeFeatures, this._instanceFeatures); var adapterFeaturesHeader = GurobiUtils.ComposeAdapterFeaturesHeader(finalRuntimeFeatures, lastRuntimeFeatures, this._instanceFeatures); this._lastRuntimeFeatures = finalRuntimeFeatures.Copy(); return(new AdapterDataRecord <GurobiResult>( "Gurobi901", result.TargetAlgorithmStatus, // The cpu time is not recordable, because all parallel Gurobi runs are started in the same process in this implementation. TimeSpan.FromSeconds(0), this.GetCurrentRuntime(timeStamp), timeStamp, adapterFeaturesHeader, adapterFeatures, result)); }
/// <summary> /// Creates the current <see cref="AdapterDataRecord{GurobiResult}"/>. /// </summary> /// <param name="timeStamp">The time stamp.</param> /// <returns>The current <see cref="AdapterDataRecord{GurobiResult}"/>.</returns> private AdapterDataRecord <GurobiResult> CreateCurrentAdapterDataRecord(DateTime timeStamp) { if (this._instanceFeatures == null) { throw new ArgumentNullException(nameof(this._instanceFeatures)); } var currentRuntimeFeatures = this.GetCurrentGurobiRuntimeFeatures(); var lastRuntimeFeatures = this._lastRuntimeFeatures ?? currentRuntimeFeatures; var adapterFeatures = GurobiUtils.ComposeAdapterFeatures(currentRuntimeFeatures, lastRuntimeFeatures, this._instanceFeatures); var adapterFeaturesHeader = GurobiUtils.ComposeAdapterFeaturesHeader(currentRuntimeFeatures, lastRuntimeFeatures, this._instanceFeatures); this._lastRuntimeFeatures = currentRuntimeFeatures.Copy(); return(new AdapterDataRecord <GurobiResult>( "Gurobi901", TargetAlgorithmStatus.Running, // The cpu time is not recordable, because all parallel Gurobi runs are started in the same process in this implementation. TimeSpan.FromSeconds(0), this.GetCurrentRuntime(timeStamp), timeStamp, adapterFeaturesHeader, adapterFeatures, new GurobiResult( currentRuntimeFeatures.MipGap, this._runnerConfiguration.CpuTimeout, TargetAlgorithmStatus.CancelledByGrayBox, currentRuntimeFeatures.FeasibleSolutionsCount > 0))); }