@@ -359,6 +359,7 @@ void Optimize::SetVerbosity(int verbosity_level)
359359void Optimize::SetDomainsPerShape (int domains_per_shape)
360360{
361361 this ->m_domains_per_shape = domains_per_shape;
362+ std::cout << " Initially, dps set to = " << domains_per_shape << std::endl;
362363 this ->m_sampler ->SetDomainsPerShape (this ->m_domains_per_shape );
363364}
364365
@@ -586,9 +587,14 @@ void Optimize::InitializeSampler()
586587 m_sampler->GetEnsembleEntropyFunction ()->SetRecomputeCovarianceInterval (1 );
587588 m_sampler->GetEnsembleEntropyFunction ()->SetHoldMinimumVariance (false );
588589
589- m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVariance (m_starting_regularization);
590+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVariance (m_starting_regularization); // For Initialization set start_reg_params
590591 m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetRecomputeCovarianceInterval (1 );
591592 m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetHoldMinimumVariance (false );
593+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetDomainsPerShapeInfo (m_domains_per_shape);
594+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceWithin (m_starting_regularization_multilevel); // For Initialization set start_reg_params
595+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetHoldMinimumVarianceWithin (false );
596+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceBetween (m_starting_regularization_multilevel_between); // For Initialization set start_reg_params
597+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetHoldMinimumVarianceBetween (false );
592598
593599 std::cout << " mlpca initialized" << std::endl;
594600 m_sampler->GetMeshBasedGeneralEntropyGradientFunction ()->SetMinimumVariance (
@@ -621,15 +627,15 @@ void Optimize::InitializeSampler()
621627 ->SetRecomputeCovarianceInterval (m_recompute_regularization_interval);
622628 m_sampler->GetEnsembleMlpcaEntropyFunction ()
623629 ->SetRecomputeCovarianceInterval (m_recompute_regularization_interval);
624- std::cout << " mlpca initialized 2" << std::endl;
630+ // std::cout << "mlpca initialized 2" << std::endl;
625631
626632
627633 // These flags must be set before Initialize, since Initialize need to know which domains are fixed ahead of time
628634 for (unsigned int i = 0 ; i < this ->m_domain_flags .size (); i++) {
629635 this ->GetSampler ()->GetParticleSystem ()->FlagDomain (this ->m_domain_flags [i]);
630636 }
631637 m_sampler->Initialize ();
632- std::cout << " Sampler Init 1 done" << std::endl;
638+ // std::cout << "Sampler Init 1 done" << std::endl;
633639
634640 m_sampler->GetOptimizer ()->SetTolerance (0.0 );
635641
@@ -728,18 +734,24 @@ void Optimize::Initialize()
728734 m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceDecay (m_starting_regularization,
729735 m_ending_regularization,
730736 m_iterations_per_split);
731-
737+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceDecayWithin (m_starting_regularization_multilevel,
738+ m_ending_regularization_multilevel,
739+ m_iterations_per_split);
740+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceDecayBetween (m_starting_regularization_multilevel_between,
741+ m_ending_regularization_multilevel_between,
742+ m_iterations_per_split);
743+
732744 m_sampler->GetMeshBasedGeneralEntropyGradientFunction ()->SetMinimumVarianceDecay (
733745 m_starting_regularization,
734746 m_ending_regularization,
735747 m_iterations_per_split);
736748 }
737749 else {
738750 // force to mean
739- if (m_use_mlpca_optimize){
740- m_sampler->SetCorrespondenceMode (shapeworks::CorrespondenceMode::MlpcaBasedEnsembleEntropyMeanEnergy);
741- }
742- else if ((m_attributes_per_domain.size () > 0 &&
751+ // if (m_use_mlpca_optimize){
752+ // m_sampler->SetCorrespondenceMode(shapeworks::CorrespondenceMode::MlpcaBasedEnsembleEntropyMeanEnergy);
753+ // }
754+ if ((m_attributes_per_domain.size () > 0 &&
743755 *std::max_element (m_attributes_per_domain.begin (),
744756 m_attributes_per_domain.end ()) > 0 ) || m_mesh_based_attributes) {
745757 m_sampler->SetCorrespondenceMode (shapeworks::CorrespondenceMode::MeshBasedGeneralMeanEnergy);
@@ -1053,6 +1065,16 @@ void Optimize::RunOptimize()
10531065 m_ending_regularization,
10541066 m_optimization_iterations -
10551067 m_optimization_iterations_completed);
1068+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceDecayWithin (
1069+ m_starting_regularization_multilevel,
1070+ m_ending_regularization_multilevel,
1071+ m_optimization_iterations -
1072+ m_optimization_iterations_completed);
1073+ m_sampler->GetEnsembleMlpcaEntropyFunction ()->SetMinimumVarianceDecayBetween (
1074+ m_starting_regularization_multilevel_between,
1075+ m_ending_regularization_multilevel_between,
1076+ m_optimization_iterations -
1077+ m_optimization_iterations_completed);
10561078
10571079
10581080 m_sampler->SetCorrespondenceOn (); // B - ON
@@ -2106,6 +2128,23 @@ void Optimize::SetStartingRegularization(double starting_regularization)
21062128void Optimize::SetEndingRegularization (double ending_regularization)
21072129{ this ->m_ending_regularization = ending_regularization; }
21082130
2131+ // ---------------------------------------------------------------------------
2132+ void Optimize::SetStartingRegularizationMultilevelWithin (std::vector<double > reg_params_start)
2133+ { this ->m_starting_regularization_multilevel = reg_params_start; }
2134+
2135+ // ---------------------------------------------------------------------------
2136+ void Optimize::SetEndingRegularizationMultilevelWithin (std::vector<double > reg_params_end)
2137+ { this ->m_ending_regularization_multilevel = reg_params_end; }
2138+
2139+ // ---------------------------------------------------------------------------
2140+ void Optimize::SetStartingRegularizationMultilevelBetween (double starting_regularization)
2141+ { this ->m_starting_regularization_multilevel_between = starting_regularization; }
2142+
2143+ // ---------------------------------------------------------------------------
2144+ void Optimize::SetEndingRegularizationMultilevelBetween (double ending_regularization)
2145+ { this ->m_ending_regularization_multilevel_between = ending_regularization; }
2146+
2147+
21092148// ---------------------------------------------------------------------------
21102149void Optimize::SetRecomputeRegularizationInterval (int recompute_regularization_interval)
21112150{ this ->m_recompute_regularization_interval = recompute_regularization_interval; }
0 commit comments