tmp update
This commit is contained in:
@@ -268,9 +268,11 @@ int lbfgs(
|
||||
lbfgsfloatval_t *xp = NULL;
|
||||
lbfgsfloatval_t *g = NULL, *gp = NULL, *pg = NULL; // gp (p for previous) pg (p for pesudo)
|
||||
lbfgsfloatval_t *d = NULL, *w = NULL, *pf = NULL;
|
||||
lbfgsfloatval_t *dp = NULL; // p for preconditioned
|
||||
lbfgsfloatval_t *dp = NULL; // p for preconditioned (Add by Yi Zhang on 02-16-2022)
|
||||
lbfgsfloatval_t *y2 = NULL; // Add by Yi Zhang on 02-16-2022
|
||||
iteration_data_t *lm = NULL, *it = NULL;
|
||||
lbfgsfloatval_t ys, yy;
|
||||
lbfgsfloatval_t Yk; // Add by Yi Zhang on 02-16-2022
|
||||
lbfgsfloatval_t xnorm, gnorm, beta;
|
||||
lbfgsfloatval_t fx = 0.;
|
||||
lbfgsfloatval_t rate = 0.;
|
||||
@@ -384,6 +386,13 @@ int lbfgs(
|
||||
goto lbfgs_exit;
|
||||
}
|
||||
|
||||
// Add by Yi Zhang on 02-16-2022
|
||||
y2 = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));
|
||||
if (y2 == NULL) {
|
||||
ret = LBFGSERR_OUTOFMEMORY;
|
||||
goto lbfgs_exit;
|
||||
}
|
||||
|
||||
if (cd.proc_precondition) {
|
||||
dp = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));
|
||||
if (dp == NULL) {
|
||||
@@ -391,6 +400,7 @@ int lbfgs(
|
||||
goto lbfgs_exit;
|
||||
}
|
||||
}
|
||||
// End
|
||||
|
||||
// 初始化计算L1模的数组
|
||||
if (param.orthantwise_c != 0.) {
|
||||
@@ -625,9 +635,13 @@ int lbfgs(
|
||||
vecadd(d, it->y, -it->alpha, n);
|
||||
}
|
||||
|
||||
vecscale(d, ys / yy, n); // 适当缩放d的大小
|
||||
// Annotated by Yi Zhang on 02-16-2022
|
||||
//vecscale(d, ys / yy, n); // 适当缩放d的大小
|
||||
|
||||
// 我们在这里提供一个预优函数的接口 返回 d = H0^-1 * d
|
||||
// Add by Yi Zhang on 02-16-2022
|
||||
// Wah June Leong & Chuei Yee Chen (2013) A class of diagonal preconditioners for limited memory BFGS method,
|
||||
// Optimization Methods and Software, 28:2, 379-392, DOI: 10.1080/10556788.2011.653356
|
||||
// 我们在这里提供一个预优函数的接口 需还原则删除下面的代码段 同时取消上面一行注释
|
||||
if (cd.proc_precondition) {
|
||||
if (param.orthantwise_c == 0.) {
|
||||
cd.proc_precondition(cd.instance, x, g, d, dp, n);
|
||||
@@ -636,7 +650,15 @@ int lbfgs(
|
||||
}
|
||||
|
||||
veccpy(d, dp, n);
|
||||
} else if (ys < yy) {
|
||||
vecscale(d, ys / yy, n); // 适当缩放d的大小
|
||||
} else {
|
||||
veccpy(y2, lm[end].y, n);
|
||||
vecmul(y2, lm[end].y, n);
|
||||
vecdot(&Yk, y2, y2, n);
|
||||
vecadd(d, y2, (ys-yy)/Yk, n);
|
||||
}
|
||||
// End
|
||||
|
||||
for (i = 0;i < bound;++i) {
|
||||
it = &lm[j];
|
||||
@@ -688,6 +710,14 @@ lbfgs_exit:
|
||||
vecfree(g);
|
||||
vecfree(xp);
|
||||
|
||||
// Add by Yi Zhang on 02-16-2022
|
||||
vecfree(y2);
|
||||
|
||||
if (cd.proc_precondition) {
|
||||
vecfree(dp);
|
||||
}
|
||||
// End
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user