动机很难解释所以我将提供一个例子:假设你每秒都收到大量的样本,你的任务是对它们进行分类。
让我们这样说:你有两个分类器:heuristicFast和heuristicSlow。因此,假设您为每个样本运行heuristicFast(),然后如果结果接近未定(假设[0.45,0.55]范围为分类器,其中0为1级,1为class2),我运行更精确的heuristicSlow。
现在的问题是这是实时系统,所以我想确保我不会重载CPU(我正在使用线程),即使对heuristicFast的高度调用返回结果[0.45,0.55] ] 范围。
实现这一目标的最佳方法是什么?
我最好的想法是拥有heuristicSlow的entrycount,如果entrycount是>则不要输入它。 number_of_cores / 2
?
std::atomic<int> entrycount(0);
//...
if (classificationNotClear(result_heuristic_fast) && (entrycount<kMaxConcurrantCalls))
{
entrycount++;
final_result=heuristicSlow();
entrycount--;
}
else
final_result=result_heuristic_fast;
//...
答案 0 :(得分:2)
由于您正在构建实时系统,因此您可以获得关键信息:分类和启发式的最大允许运行时间。
您可以简单地计算完全快速启发式的剩余时间(总时间减去样本计数乘以快速启发式时间),并确定慢启发式应用程序的适用次数。将此数字写入计数器并减少。
答案 1 :(得分:1)
更优秀的解决方案:
按不确定性(即abs(result-0.5)
)对快速启发式结果进行排序,并在剩余时间内为尽可能多的情况运行慢启发式算法。