我有一个很大的优化问题,我正在使用我编写的BFGS优化器来解决。优化器会对目标函数进行多次调用,这需要一些时间。我想加快速度。现在在目标函数内部,我可以利用并行性,因为目标函数是100次独立计算之和。
但问题是,如果我在目标函数中添加并行性,程序将必须为优化器中的每个调用构造销毁每个线程。
有没有办法初始化多线程机制?
示意图如下:
public class Optimizer
{
public static double[] Minimize(Func<double[],double> objective, double[] guess)
{
while(condition)
{
update_guess(guess);
var value = objective(guess);
}
return guess;
}
}
public class Problem
{
public void Solve()
{
var guess = new double[50];
Func<double[],double> objective = x =>
{
// this is not the best way because it will be called many times
return x.AsParallel().Select(x => ExpensiveStuff(x)).Sum()
}
var results = Optimizer.Minimize(objective, guess);
}
}