Removed the OW-LQN code in the MoreThuente method because the mathematical foundation is not 100% correct.
git-svn-id: file:///home/svnrepos/software/liblbfgs/trunk@42 ecf4c44f-38d1-4fa4-9757-a0b4dd0349fc
This commit is contained in:
parent
d1ab96d686
commit
8fe5ce006d
22
lib/lbfgs.c
22
lib/lbfgs.c
@ -915,7 +915,7 @@ static int line_search_morethuente(
|
|||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int brackt, stage1, uinfo = 0;
|
int brackt, stage1, uinfo = 0;
|
||||||
lbfgsfloatval_t dg, norm;
|
lbfgsfloatval_t dg;
|
||||||
lbfgsfloatval_t stx, fx, dgx;
|
lbfgsfloatval_t stx, fx, dgx;
|
||||||
lbfgsfloatval_t sty, fy, dgy;
|
lbfgsfloatval_t sty, fy, dgy;
|
||||||
lbfgsfloatval_t fxm, dgxm, fym, dgym, fm, dgm;
|
lbfgsfloatval_t fxm, dgxm, fym, dgym, fm, dgm;
|
||||||
@ -929,11 +929,7 @@ static int line_search_morethuente(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Compute the initial gradient in the search direction. */
|
/* Compute the initial gradient in the search direction. */
|
||||||
if (param->orthantwise_c != 0.) {
|
vecdot(&dginit, g, s, n);
|
||||||
dginit = owlqn_direction_line(x, g, s, param->orthantwise_c, param->orthantwise_start, param->orthantwise_end);
|
|
||||||
} else {
|
|
||||||
vecdot(&dginit, g, s, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure that s points to a descent direction. */
|
/* Make sure that s points to a descent direction. */
|
||||||
if (0 < dginit) {
|
if (0 < dginit) {
|
||||||
@ -996,22 +992,10 @@ static int line_search_morethuente(
|
|||||||
veccpy(x, wa, n);
|
veccpy(x, wa, n);
|
||||||
vecadd(x, s, *stp, n);
|
vecadd(x, s, *stp, n);
|
||||||
|
|
||||||
if (param->orthantwise_c != 0.) {
|
|
||||||
/* The current point is projected onto the orthant of the previous one. */
|
|
||||||
owlqn_project(x, wa, param->orthantwise_start, param->orthantwise_end);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Evaluate the function and gradient values. */
|
/* Evaluate the function and gradient values. */
|
||||||
*f = cd->proc_evaluate(cd->instance, x, g, cd->n, *stp);
|
*f = cd->proc_evaluate(cd->instance, x, g, cd->n, *stp);
|
||||||
if (0. < param->orthantwise_c) {
|
vecdot(&dg, g, s, n);
|
||||||
/* Compute the L1 norm of the variables and add it to the object value. */
|
|
||||||
norm = owlqn_x1norm(x, param->orthantwise_start, param->orthantwise_end);
|
|
||||||
*f += norm * param->orthantwise_c;
|
|
||||||
|
|
||||||
dg = owlqn_direction_line(x, g, s, param->orthantwise_c, param->orthantwise_start, param->orthantwise_end);
|
|
||||||
} else {
|
|
||||||
vecdot(&dg, g, s, n);
|
|
||||||
}
|
|
||||||
ftest1 = finit + *stp * dgtest;
|
ftest1 = finit + *stp * dgtest;
|
||||||
++count;
|
++count;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user