float64_t CKLDualInferenceMethod::adjust_step(void *obj, const float64_t *parameters, const float64_t *direction, const int dim, const float64_t step) { /* Note that parameters = parameters_pre_iter - step * gradient_pre_iter */ CKLDualInferenceMethod * obj_prt = static_cast<CKLDualInferenceMethod *>(obj); ASSERT(obj_prt != NULL); float64_t *non_const_direction=const_cast<float64_t *>(direction); SGVector<float64_t> sg_direction(non_const_direction, dim, false); CDualVariationalGaussianLikelihood* lik= obj_prt->get_dual_variational_likelihood(); float64_t adjust_stp=lik->adjust_step_wrt_dual_parameter(sg_direction, step); return adjust_stp; }
float64_t CKLDualInferenceMethodMinimizer::adjust_step(void *obj, const float64_t *parameters, const float64_t *direction, const int dim, const float64_t step) { /* Note that parameters = parameters_pre_iter - step * gradient_pre_iter */ CKLDualInferenceMethodMinimizer * obj_prt = static_cast<CKLDualInferenceMethodMinimizer *>(obj); REQUIRE(obj_prt, "The instance object passed to L-BFGS optimizer should not be NULL\n"); float64_t *non_const_direction=const_cast<float64_t *>(direction); SGVector<float64_t> sg_direction(non_const_direction, dim, false); KLDualInferenceMethodCostFunction* fun=dynamic_cast<KLDualInferenceMethodCostFunction*>(obj_prt->m_fun); REQUIRE(fun, "The cost function must be KLDualInferenceMethodCostFunction\n"); CDualVariationalGaussianLikelihood* lik=fun->get_dual_variational_likelihood(); float64_t adjust_stp=lik->adjust_step_wrt_dual_parameter(sg_direction, step); return adjust_stp; }