int main() { int nvar=20; // This is the number of independent variables independent_variables x(1,nvar); // these are the independent variables double f; // This is the dependent variable dvector g(1,nvar); // Holds the vector of partial derivatives (the gradient) fmm fmc(nvar); // Create structure to manage minimization BEGIN_MINIMIZATION(nvar,f,x,g,fmc) // Macro to set up beginning of // minimization loop f=fcomp(nvar,x); END_MINIMIZATION(nvar,g) // Macro to set up end of minimization loop cout << " The minimizing values are\n" << x << "\n"; //Print out the answer return 0; }
void print_count(int width, int height) { mpz_t count; mpz_init(count); fmc(&count, width, height); size_t optimal_bits = mpz_sizeinbase(count, 2); int naive_bits = (width-1)*height + width*(height-1); /* i.e. using 1 bit per edge of the graph */ gmp_printf("There are %Zd different mazes on a %dx%d grid. " "That’s a %zd-bit number, compared with %d bits for a naive packing, a saving of %.2f%%.\n", count, width, height, optimal_bits, naive_bits, 100.0 * (1.0 - (float) optimal_bits / naive_bits)); mpz_clear(count); }
void GLControlWidget::drawText() { glPushAttrib(GL_LIGHTING_BIT | GL_TEXTURE_BIT); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); qglColor(white); QString str("Rendering text in OpenGL is easy with Qt"); QFontMetrics fm(font()); renderText((width() - fm.width(str)) / 2, 15, str); QFont f("courier", 8); QFontMetrics fmc(f); qglColor(QColor("skyblue")); int x, y, z; x = (xRot >= 0) ? (int) xRot % 360 : 359 - (QABS((int) xRot) % 360); y = (yRot >= 0) ? (int) yRot % 360 : 359 - (QABS((int) yRot) % 360); z = (zRot >= 0) ? (int) zRot % 360 : 359 - (QABS((int) zRot) % 360); str.sprintf("Rot X: %03d - Rot Y: %03d - Rot Z: %03d", x, y, z); renderText((width() - fmc.width(str)) / 2, height() - 15, str, f); glPopAttrib(); }
/** * Description not yet available. * \param */ void function_minimizer::trust_region_update(int nvar,int _crit, independent_variables& x,const dvector& _g,const double& _f) { double & f= (double&)_f; dvector & g= (dvector&)_g; fmm fmc(nvar); if (random_effects_flag) { initial_params::set_active_only_random_effects(); //int unvar=initial_params::nvarcalc(); // get the number of active initial_params::restore_start_phase(); initial_params::set_inactive_random_effects(); int nvar1=initial_params::nvarcalc(); // get the number of active if (nvar1 != nvar) { cerr << "failed sanity check in " "void function_minimizer::quasi_newton_block" << endl; ad_exit(1); } } uistream uis("admodel.hes"); if (!uis) { cerr << "Error trying to open file admodel.hes" << endl; ad_exit(1); } int hnvar = 0; uis >> hnvar; dmatrix Hess(1,hnvar,1,hnvar); uis >> Hess; if (!uis) { cerr << "Error trying to read Hessian from admodel.hes" << endl; ad_exit(1); } dmatrix tester(1,hnvar,1,hnvar); tester=Hess; dvector e=sort(eigenvalues(Hess)); double lambda=-e(1)+100.; for (int i=1;i<=hnvar;i++) { tester(i,i)+=lambda; } dvector step = x-solve(tester,g); { // calculate the number of random effects unvar // this turns on random effects variables and turns off // everything else //cout << nvar << endl; initial_params::set_active_only_random_effects(); //cout << nvar << endl; int unvar=initial_params::nvarcalc(); // get the number of active //df1b2_gradlist::set_no_derivatives(); if (lapprox) { delete lapprox; lapprox=0; df1b2variable::pool->deallocate(); for (int i=0;i<df1b2variable::adpool_counter;i++) { delete df1b2variable::adpool_vector[i]; df1b2variable::adpool_vector[i]=0; df1b2variable::nvar_vector[i]=0; df1b2variable::adpool_counter=0; } } lapprox=new laplace_approximation_calculator(nvar,unvar,1,nvar+unvar, this); initial_df1b2params::current_phase=initial_params::current_phase; initial_df1b2params::save_varsptr(); allocate(); initial_df1b2params::restore_varsptr(); df1b2_gradlist::set_no_derivatives(); int ynvar=initial_params::nvarcalc_all(); dvector y(1,ynvar); initial_params::xinit_all(y); initial_df1b2params::reset_all(y); g=(*lapprox)(step,f,this); } } // end block for quasi newton minimization
/** * Description not yet available. * \param */ void laplace_approximation_calculator::generate_antithetical_rvs() { // number of random vectors const ivector & itmp=(*num_local_re_array)(1,num_separable_calls); //const ivector & itmpf=(*num_local_fixed_array)(1,num_separable_calls); for (int i=2;i<=num_separable_calls;i++) { if (itmp(i) != itmp(i-1)) { cerr << "At present can only use antithetical rv's when " "all separable calls are the same size" << endl; ad_exit(1); } } int n=itmp(1); int samplesize=num_importance_samples; // mesh size double delta=0.01; // maximum of distribution is near here double mid=sqrt(double(n-1)); dmatrix weights(1,2*n,1,2); double spread=15; if (mid-spread<=0.001) spread=mid-0.1; double ssum=0.0; double x=0.0; double tmax=(n-1)*log(mid)-0.5*mid*mid; for (x=mid-spread;x<=mid+spread;x+=delta) { ssum+=exp((n-1)*log(x)-0.5*x*x-tmax); } double tsum=0; dvector dist(1,samplesize+1); dist.initialize(); int is=0; int ii; for (x=mid-spread;x<=mid+spread;x+=delta) { tsum+=exp((n-1)*log(x)-0.5*x*x-tmax)/ssum*samplesize; int ns=int(tsum); for (ii=1;ii<=ns;ii++) { dist(++is)=x; } tsum-=ns; } if (is==samplesize-1) { dist(samplesize)=mid; } else if (is<samplesize-1) { cerr << "This can't happen" << endl; exit(1); } // get random numbers random_number_generator rng(rseed); if (antiepsilon) { if (allocated(*antiepsilon)) { delete antiepsilon; antiepsilon=0; } } antiepsilon=new dmatrix(1,samplesize,1,n); dmatrix & M=*antiepsilon; M.fill_randn(rng); for (int i=1;i<=samplesize;i++) { M(i)=M(i)/norm(M(i)); } int nvar=(samplesize-1)*n; independent_variables xx(1,nvar); ii=0; for (int i=2;i<=samplesize;i++) { for (int j=1;j<=n;j++) { xx(++ii)=M(i,j); } } fmmt1 fmc(nvar,5); //fmm fmc(nvar,5); fmc.noprintx=1; fmc.iprint=10; fmc.maxfn=2500; fmc.crit=1.e-6; double f; double fbest=1.e+50;; dvector g(1,nvar); dvector gbest(1,nvar); dvector xbest(1,nvar); gbest.fill_seqadd(1.e+50,0.); { while (fmc.ireturn>=0) { //int badflag=0; fmc.fmin(f,xx,g); if (fmc.ihang) { //int hang_flag=fmc.ihang; //double maxg=max(g); //double ccrit=fmc.crit; //int current_ifn=fmc.ifn; } if (fmc.ireturn>0) { f=fcomp1(xx,dist,samplesize,n,g,M); if (f < fbest) { fbest=f; gbest=g; xbest=xx; } } } xx=xbest; } ii=0; for (int i=2;i<=samplesize;i++) { for (int j=1;j<=n;j++) { M(i,j)=xx(++ii); } } for (int i=1;i<=samplesize;i++) { M(i)*=dist(i)/norm(M(i)); } }