当前位置: 首页>>代码示例>>C++>>正文


C++ Evaluator::get_gradient_vec方法代码示例

本文整理汇总了C++中Evaluator::get_gradient_vec方法的典型用法代码示例。如果您正苦于以下问题:C++ Evaluator::get_gradient_vec方法的具体用法?C++ Evaluator::get_gradient_vec怎么用?C++ Evaluator::get_gradient_vec使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Evaluator的用法示例。


在下文中一共展示了Evaluator::get_gradient_vec方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: backtracking_linear_search

double backtracking_linear_search(
	Evaluator& evaluator,   // class of objective function value evaluation
	double *xp, // backup place for x
	double *p, // negative of search direction
	double *fx, // current function value at x
	double c, // sufficient decrease condition threshold
	double init_step, // initial step length
	double r, // scale factor in backtracking
	int *evaluateCnt // counter
){
	double *x=0; //current points
	int n=evaluator.get_current_parameter(x);
	double *g=evaluator.get_gradient_vec();
	double dec=vec_dot(g,p,n);
	//cout<<"#IN_LINEAR_SEARCH unit decrease of g'p="<<dec<<endl;
	if(dec<0){ // non suitable step,p is not a descent search direction
		return -1;
	}
//	for(int i=0;i<5;i++) 		cout<<"x["<<i<<"]="<<x[i]<<" p["<<i<<"]="<<p[i]<<endl; 
	double alpha=init_step;
	//vec_add(xp,x,p,n,1,-alpha);  // p is the negative of search of direction
	//TODO: do it better
	for(int i=0;i<n;++i) xp[i]=(x[i]-alpha*p[i]<1e-6)?0:(x[i]-alpha*p[i]);
	double old_fx=*fx;
	*fx=evaluator.evaluate(xp,g);
	++(*evaluateCnt);
	int trials=0;
	while( *fx > old_fx-alpha*c*dec ){
		//cout<<"-----try step length "<<alpha<<" get obj="<<*fx<<" dec="<<old_fx-*fx<<" require min dec="<<alpha*c*dec<<endl;
		alpha*=r;
		//vec_add(xp,x,p,n,1,-alpha);
		//TODO: do it better
		for(int i=0;i<n;++i) xp[i]=(x[i]-alpha*p[i]<1e-6)?0:(x[i]-alpha*p[i]);
		*fx=evaluator.evaluate(xp,g);
		++(*evaluateCnt);
		++trials;
	}
	//cout<<"#IN_LINEAR_SEARCH success linear search, get alpha="<<alpha<<" obj="<<*fx<<" dec="<<old_fx-*fx<<" required min dec="<<alpha*c*dec<<" trails="<<trials<<endl;
	return alpha;
}
开发者ID:bluekingsong,项目名称:private_alibaba,代码行数:40,代码来源:linear_search.cpp


注:本文中的Evaluator::get_gradient_vec方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。