From 56129688eefb757d2e18692d4e7509012b15feeb Mon Sep 17 00:00:00 2001 From: vasiloglou Date: Fri, 15 Feb 2008 00:25:04 +0000 Subject: [PATCH] BFGS is not running properly but we are getting there possibly the initial steps are not good --- .../nvasil/non_convex_mvu/non_convex_mvu.h | 8 ++- .../non_convex_mvu/non_convex_mvu_impl.h | 56 ++++++++++++------- .../non_convex_mvu/non_convex_mvu_test.cc | 21 ++++++- 3 files changed, 60 insertions(+), 25 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 8b08666329..b38b4d8276 100644 --- a/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu.h +++ b/fastlib2/contrib/nvasil/non_convex_mvu/non_convex_mvu.h @@ -31,7 +31,7 @@ class NonConvexMVU { void Init(std::string data_file, index_t knns); void Init(std::string data_file, index_t knns, index_t leaf_size); void ComputeLocalOptimum(); - void ComputeLocalOptimumBFGS_(); + void ComputeLocalOptimumBFGS(); // eta < 1 void set_eta(double eta); // gamma > 1 @@ -48,6 +48,10 @@ class NonConvexMVU { * beta for armijo rule somewhere between 0.5 to 0.1 */ void set_armijo_beta(double armijo_beta); + /** + * Set the memory for the BFGS method + */ + void set_mem_bfgs(index_t mem_bfgs); Matrix &coordinates(); private: @@ -79,7 +83,7 @@ class NonConvexMVU { // These parameters are used for limited BFGS //ro_k = 1/(y^T * s) - ArrayList ro_bfgs_; + Vector ro_bfgs_; // the memory of bfgs index_t mem_bfgs_; // s_k = x_{k+1}-x_{k}; 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 ebc5b80a8c..cd20d58f01 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 @@ -87,7 +87,7 @@ void NonConvexMVU::ComputeLocalOptimum() { } -void NonConvexMVU::ComputeLocalOptimumBFGS_() { +void NonConvexMVU::ComputeLocalOptimumBFGS() { double distance_constraint; double centering_constraint; double sum_of_dist_square = la::LengthEuclidean(distances_.size(), &distances_[0]); @@ -107,7 +107,6 @@ void NonConvexMVU::ComputeLocalOptimumBFGS_() { for(index_t i=0; i alpha; + Vector alpha; alpha.Init(mem_bfgs_); - for(index_t i=0; iInit("test_data_3_1000.csv", 5); engine_->coordinates_.Init(1, 1); engine_->gradient_.Init(1, 1); + engine_->previous_gradient_.Init(1, 1); + engine_->previous_coordinates_.Init(1, 1); + engine_->ro_bfgs_.Init(1); + engine_->s_bfgs_.Init(); + engine_->y_bfgs_.Init(); engine_->lagrange_mult_.Init(30); engine_->centering_lagrange_mult_.Init(20); NOTIFY("TestInit passed!!\n"); @@ -46,15 +51,27 @@ class NonConvexMVUTest { engine_->ComputeLocalOptimum(); NOTIFY("TestComputeLocalOptimum() passed!!\n"); } - + void TestComputeLocalOptimumBFGS() { + NOTIFY("Testing ComputeLocalOptimum() ...\n"); + engine_->Init("test_data_3_1000.csv", 5); + engine_->set_new_dimension(3); + engine_->set_mem_bfgs(5); + engine_->ComputeLocalOptimumBFGS(); + NOTIFY("TestComputeLocalOptimum() passed!!\n"); + } + void TestAll() { Init(); TestInit(); Destruct(); + // Init(); + // TestComputeLocalOptimum(); + // Destruct(); Init(); - TestComputeLocalOptimum(); + TestComputeLocalOptimumBFGS(); Destruct(); } + private: NonConvexMVU *engine_; };