ここに問題があります。非線形最適化にはminpackを使用しています。コスト関数には次のシグネチャがあります。
void cost_function(const int* n, const int* m,const double *p, double *x, int* iflag)
n-初期点のサイズm-関数ベクトルのサイズp-初期点x-関数ベクトル
オブジェクトの配列を反復処理するforループがあります。各オブジェクトには、最適化関数の入力情報が含まれています。
for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}
しかし、コスト関数では、現在のオブジェクトに関連する特定の値が必要です。コスト関数がクラスメンバーである場合、ポインターの型が間違っているため、このポインターをlmdif1_に渡すことはできません。
これで、グローバルオブジェクトを使用した一時的な解決策ができました。
for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
global_obj = object;
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}
次に、cost_functionはこのグローバルオブジェクトを使用して必要な情報を受け取ります。しかし、それは良くありません。この問題の正しい解決策は何ですか?ありがとう。