0

近一年来,我一直在寻找一个好的优化算法。

我的问题包括取一个观察值矩阵,我们称之为'M'并使用一个函数'F',它通过一个接一个地转换M的每个单元格,产生另一个矩阵'N'。

然后使用最小二乘法比较矩阵'M'和'N',并通过改变'F'的变量来最小化它们之间的距离。

有一个变量数组,我们称之为'a'和一个变量'b',它们在函数F中使用。

变量“b”在获得矩阵“N”所需的所有计算之间是一致的。

数组“a”的长度取决于行数;数组“a”中的一个数字对应于每一行。

因此,假设要计算“N”的第三行,我在“M”的第三行中的每个单元格的值上使用 F 以及变量 a[3] 和 b。

为了计算 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 之间的距离)。也许如果有人做过类似的事情,他们可以将我指向图书馆?或者快速演示我如何找到自己的最佳值?

非常感谢您阅读本文,

埃里克

4

0 回答 0