java的多变量非线性优化库类似于Matlab的求解器GRG算法

时间:2013-08-08 20:25:17

标签: java optimization

我一直在寻找一种好的优化算法,差不多一年了。

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

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

有一系列变量可以将它称为'a'和单个变量'b',它们在函数F中使用。

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

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

因此,假设计算第3行'N',我将'M'第3行中每个单元格的值与变量a [3]和b一起使用F.

为了计算N的第4行,我用M中的第4行的每个单元的值依次与[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
    }
}

现在的目标是通过找到[]和b的最佳值来最小化'总'(M和N之间的距离)。 也许如果有人做了类似的事情,他们可以指点我到图书馆? 或者快速演示我如何找到自己的最佳价值?

非常感谢您阅读本文,

埃里克

0 个答案:

没有答案