ほぼ 1 年間、優れた最適化アルゴリズムを探していました。
私の問題は、観測された値の行列を取得し、それを「M」と呼び、関数「F」を使用して、M の各セルを 1 つずつ変換することで、別の行列「N」を生成することで構成されます。
次に、行列「M」と「N」が最小二乗法を使用して比較され、「F」の変数を変更することによってそれらの間の距離が最小化されます。
関数Fで使用される変数の配列があり、それを「a」と呼び、単一の変数「b」と呼びます。
変数「b」は、行列「N」を取得するために必要なすべての計算で一貫しています。
配列 'a' の長さは行数によって異なります。配列 'a' の 1 つの数値が各行に対応します。
したがって、「N」の 3 行目を計算するとします。変数 a[3] および b と共に、「M」の 3 行目の各セルの値に F を使用します。
NI の 4 行目を計算するには、M の 4 行目の各セルの値と a[4] および b を順に使用して F を計算します。
などなど。
N の全体を計算したら、それを M と比較し、変数 a[] と変数 b の配列を調整して距離を最小化する必要があります。
小さな行列にApache cmaesを使用していますが、大きな行列ではmatlabのソルバーほどうまく機能しません
編集
これを数学的にではなく、アルゴリズム的に説明しようとするのはうまくいきません。それが私の強みだからです。
double[w,h] m //Matrix M
double[w,h] n //Matrix N
double[] hv // this is an array of constant hardcoded values
double[] a // this array is initialised to an initial guess
double b //also initialised to an initial guess
double total //target value, this value needs to be minimised
//w and h are constant
for(i=0; i<h; i++){
for(j=0; j<w; j++)
m[i,j] = getObservedValue[i,j] //observed values are not under my control
}
}
for(i=0; i<h; i++){
for(j=0; j<w; j++)
n[i,j] = 0.75/1+e^(-b*(hv[i]-a[i]))+25
}
}
//once N is calculated initially using guesses for a[] and b
for(i=0; i<h; i++){
for(j=0; j<w; j++)
total = total + (m[i,j]*(m[i,j]-n[i,j])^2) //sum of square distances
}
}
ここでの目的は、a[] と b の最適値を見つけて、「合計」(M と N の間の距離) を最小化することです。おそらく誰かが似たようなことをしたなら、彼らは私に図書館を教えてくれるでしょうか? または、最適な値を自分で見つける方法の簡単なデモはありますか?
これを読んでくれてどうもありがとう、
エリック