| File: Tuner\SearchThread.cs | Web Access |
| Project: src\src\Microsoft.ML.AutoML\Microsoft.ML.AutoML.csproj (Microsoft.ML.AutoML) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Microsoft.ML.SearchSpace; namespace Microsoft.ML.AutoML { internal class SearchThread { private const double _eps = 1e-10; private readonly Flow2 _searchAlg; private double _costBest; private double _costBest1; private double _costBest2; private double _costLast; private double _costTotal; private double _objBest1; private double _objBest2; private double _speed = 0; public SearchThread(Flow2 searchAlgorithm) { _searchAlg = searchAlgorithm; _costLast = searchAlgorithm.CostIncumbent == null ? 0 : (double)searchAlgorithm.CostIncumbent; _costTotal = _costLast; _costBest = _costLast; _costBest1 = _costLast; _costBest2 = 0; _objBest1 = searchAlgorithm.BestObj == null ? double.PositiveInfinity : (double)searchAlgorithm.BestObj; _objBest2 = _objBest1; } public bool IsConverged { get => _searchAlg.IsConverged; } public Flow2 SearchArg { get => _searchAlg; } public void OnTrialComplete(Parameter parameter, double metric, double cost) { _searchAlg.ReceiveTrialResult(parameter, metric, cost); _costLast = cost; _costTotal += cost; if (metric < _objBest1) { _costBest2 = _costBest1; _costBest1 = _costTotal; _objBest2 = double.IsInfinity(_objBest1) ? metric : _objBest1; _objBest1 = metric; _costBest = _costLast; } if (_objBest2 > _objBest1) { _speed = (_objBest2 - _objBest1) / (_costTotal - _costBest2 + _eps); } else { _speed = 0; } } public Parameter Suggest(int trialId) { return _searchAlg.Suggest(trialId); } } }