From c441f3e7142c02dbf156d83cedb9ca603ae9fbcf Mon Sep 17 00:00:00 2001 From: vasiloglou Date: Sat, 16 Feb 2008 06:24:37 +0000 Subject: [PATCH] it is running all bugsfixed --- .../nvasil/non_convex_mvu/non_convex_mvu.h | 5 +- .../non_convex_mvu/non_convex_mvu_impl.h | 145 +++++++++++------- .../non_convex_mvu/non_convex_mvu_test.cc | 2 +- 3 files changed, 97 insertions(+), 55 deletions(-) diff --git a/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu.h b/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu.h index b38b4d8276..cdeaebcb7c 100644 --- a/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu.h +++ b/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu.h @@ -70,6 +70,7 @@ class NonConvexMVU { double sigma_; double eta_; double gamma_; + double trace_factor_; double previous_feasibility_error_; double step_size_; double tolerance_; @@ -100,8 +101,8 @@ class NonConvexMVU { void InitOptimization_(); void UpdateLagrangeMult_(); void UpdateLagrangeMultStochastic_(); - void LocalSearch_(double *step); - void ComputeBFGS_(); + void LocalSearch_(double *step, Matrix &grad); + void ComputeBFGS_(double *step, Matrix &grad); void InitBFGS(); void UpdateBFGS_(); double ComputeLagrangian_(Matrix &coordinates); diff --git a/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu_impl.h b/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu_impl.h index cd20d58f01..cdcce6cd59 100644 --- a/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu_impl.h +++ b/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu_impl.h @@ -17,16 +17,17 @@ */ NonConvexMVU::NonConvexMVU() { - eta_ = 0.25; - gamma_ = 1.92; - sigma_ = 1e2; - step_size_ = 1; - max_iterations_ = 20000; - tolerance_ = 1e-5; + eta_ = 0.8; + gamma_ =1.3; + sigma_ = 1e1; + step_size_ = 2; + max_iterations_ = 100000; + tolerance_ =5* 1e-5; armijo_sigma_=1e-1; armijo_beta_=0.5; new_dimension_ = -1; mem_bfgs_ = -1; + trace_factor_=1; } void NonConvexMVU::Init(std::string data_file, index_t knns) { Init(data_file, knns, 20); @@ -61,7 +62,7 @@ void NonConvexMVU::ComputeLocalOptimum() { for(index_t it1=0; it1= armijo_factor) { break; @@ -302,34 +324,47 @@ void NonConvexMVU::LocalSearch_(double *step) { la::AddExpert(-0.01/gradient_norm, gradient_, &temp_coordinates); lagrangian2 = ComputeLagrangian_(temp_coordinates); */ - NOTIFY("step_size: %lg, sigma: %lg\n", beta * step_size_, sigma_); - NOTIFY("lagrangian1 - lagrangian2 = %lg\n", lagrangian1-lagrangian2); - NOTIFY("lagrangian2: %lg, Objective: %lg\n", lagrangian2, - ComputeObjective_(temp_coordinates)); +// NOTIFY("step_size: %lg, sigma: %lg\n", beta * step_size_, sigma_); +// NOTIFY("lagrangian1 - lagrangian2 = %lg\n", lagrangian1-lagrangian2); +// NOTIFY("lagrangian2: %lg, Objective: %lg\n", lagrangian2, +// ComputeObjective_(temp_coordinates)); coordinates_.CopyValues(temp_coordinates); } -void NonConvexMVU::ComputeBFGS_() { +void NonConvexMVU::ComputeBFGS_(double *step, Matrix &grad) { Vector alpha; alpha.Init(mem_bfgs_); Matrix scaled_y; scaled_y.Init(new_dimension_, num_of_points_); index_t num=0; + Matrix temp_gradient(grad); for(index_t i=index_bfgs_, num=0; numInit("test_data_3_1000.csv", 5); engine_->set_new_dimension(3); - engine_->set_mem_bfgs(5); + engine_->set_mem_bfgs(150); engine_->ComputeLocalOptimumBFGS(); NOTIFY("TestComputeLocalOptimum() passed!!\n"); }