From 25e895b4e52cd3a05ee01843b74ca8429bf01cd6 Mon Sep 17 00:00:00 2001 From: naoaki Date: Mon, 16 Feb 2009 13:41:27 +0000 Subject: [PATCH] Now OW-LQN method is available only with backtracking linesearch methods. git-svn-id: file:///home/svnrepos/software/liblbfgs/trunk@46 ecf4c44f-38d1-4fa4-9757-a0b4dd0349fc --- lib/lbfgs.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/lib/lbfgs.c b/lib/lbfgs.c index 0f5af2f..51e90f3 100644 --- a/lib/lbfgs.c +++ b/lib/lbfgs.c @@ -357,18 +357,30 @@ int lbfgs( if (n < param.orthantwise_end) { return LBFGSERR_INVALID_ORTHANTWISE_END; } - switch (param.linesearch) { - case LBFGS_LINESEARCH_MORETHUENTE: - linesearch = line_search_morethuente; - break; - case LBFGS_LINESEARCH_BACKTRACKING: - case LBFGS_LINESEARCH_BACKTRACKING_STRONG: - linesearch = line_search_backtracking; - break; - default: - return LBFGSERR_INVALID_LINESEARCH; + if (param.orthantwise_c != 0.) { + switch (param.linesearch) { + case LBFGS_LINESEARCH_MORETHUENTE: + return LBFGSERR_INVALID_LINESEARCH; + case LBFGS_LINESEARCH_BACKTRACKING: + case LBFGS_LINESEARCH_BACKTRACKING_STRONG: + linesearch = line_search_backtracking_owlqn; + break; + default: + return LBFGSERR_INVALID_LINESEARCH; + } + } else { + switch (param.linesearch) { + case LBFGS_LINESEARCH_MORETHUENTE: + linesearch = line_search_morethuente; + break; + case LBFGS_LINESEARCH_BACKTRACKING: + case LBFGS_LINESEARCH_BACKTRACKING_STRONG: + linesearch = line_search_backtracking; + break; + default: + return LBFGSERR_INVALID_LINESEARCH; + } } - linesearch = line_search_backtracking_owlqn; /* Allocate working space. */ xp = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));