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_; };