Я пишу программу, основанную на многоцепочечном алгоритме Метрополиса, чтобы найти параметры минимальной энергии для данной функции.Эта программа в основном выполняется два раза:
- Первый многоканальный прогон прогона, который охватывает пространство параметров и останавливается при достижении заданного критерия сходимости;различные возможности параметров вокруг точек сходимости, рассчитанные на первом шаге, но только с одной цепочкой.
Для каждой цепочки я сохраняю все параметры, через которые она прошла, и соответствующую ей энергию.Каждый шаг каждой цепочки запускает (среди прочего) следующий код:
int Step(double * current_energy, vector<double> & energy){
energy.push_back(current_energy);
return 0;
}
Проблема в том, что для первой части программы я храню энергии в
vector< vector<double> > burn_energy;
чтобы я мог сохранить несколько серий энергий в одном месте.Во второй части я храню энергии в
vector<double> explore_energy;
, потому что мне нужно сохранить только одну серию энергии.
Проблема возникает, когда мне нужно вызвать эти шаги.Для первой части я бы назвал их так:
Step(& current_energy[j], burn_energy[j]);
, где j обозначает номер цепочки.Во второй части, поскольку существует только одна цепочка, вызов будет выглядеть примерно так:
Step(& current_energy, explore_energy);
Я не вижу, что не так с моей реализацией, но XCode выдает мне следующую ошибку в первой части:
error: no matching function for call to 'std::vector<double, std::allocator<double> >::push_back(double*&)'
Это ошибка с передачей энергии вектора или элемента массива current_energy
?