74 unsigned int sampleNr,
82 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
84 printf(
"%s(NLOPT, %d, %u, %u, %u, status)\n", __func__, doLocal, tgoNr, sampleNr, neighNr);
96 if(verbose>0) {fprintf(stderr,
"Error: too many dimensions to optimize.\n"); fflush(stderr);}
103 if(verbose>1 && fixedParNr>0) printf(
"fixedParNr := %d\n", fixedParNr);
104 unsigned int fittedParNr=nlo->
totalNr-fixedParNr;
105 if(verbose>1) printf(
"fittedParNr := %d\n", fittedParNr);
112 for(
unsigned int i=0; i<nlo->
totalNr; i++) {
114 if(!(nlo->
xtol[i]>0.0)) {
115 if(verbose>0) {fprintf(stderr,
"Error: invalid xtol[].\n"); fflush(stderr);}
122 if(sampleNr<10) sampleNr=50*fittedParNr;
123 if(sampleNr&1) sampleNr++;
124 if(neighNr<2) neighNr=sampleNr/2;
125 else if(neighNr>sampleNr-1) neighNr=sampleNr-1;
126 if(tgoNr==0) tgoNr=1+fittedParNr;
128 printf(
"sampleNr := %d\n", sampleNr);
129 printf(
"neighNr := %d\n", neighNr);
130 printf(
"tgoNr := %d\n", tgoNr);
135 int initGuessAvailable=1;
136 double initGuessCost=nan(
"");
137 for(
unsigned int i=0; i<nlo->
totalNr; i++) {
138 if(isnan(nlo->
xfull[i])) {initGuessAvailable=0;
break;}
139 if(nlo->
xfull[i]<nlo->
xlower[i]) {initGuessAvailable=0;
break;}
140 if(nlo->
xfull[i]>nlo->
xupper[i]) {initGuessAvailable=0;
break;}
142 if(initGuessAvailable) {
145 if(!isfinite(initGuessCost)) initGuessAvailable=0;
147 printf(
"valid initial guess with cost=%g\n", initGuessCost);
152 TGO_POINT *points=(TGO_POINT*)malloc(sampleNr*
sizeof(TGO_POINT));
157 for(
unsigned int i=0; i<sampleNr; i++) {
159 points[i].fvalue=0.0;
165 unsigned int topoNr=0;
166 for(
unsigned int tgoi=0; tgoi<tgoNr; tgoi++) {
168 if(verbose>3 && tgoNr>1) {printf(
"TGO iteration # %d: \n", 1+tgoi); fflush(stdout);}
172 unsigned int badNr=0;
173 for(
unsigned int si=0; si<sampleNr; si++)
if(points[si].topomin==0) {
174 if(tgoi==0 && si==0 && initGuessAvailable) {
176 for(
unsigned int i=0; i<nlo->
totalNr; i++) points[si].par[i]=nlo->
xfull[i];
177 points[si].fvalue=initGuessCost;
185 while(!isfinite(points[si].fvalue) && tries<2) {
187 printf(
"this point did not give normal return value:\n");
188 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
" %10.2e", points[si].par[i]);
196 if(!isfinite(points[si].fvalue)) badNr++;
198 if(verbose>4 && badNr>0) printf(
"Number of bad points: %d\n", badNr);
200 if(tgoi==0 && (sampleNr-badNr)<=neighNr) {
202 fprintf(stderr,
"Error: invalid values inside parameter range.\n"); fflush(stderr);}
209 printf(
"Sampled points:\n");
210 for(
unsigned int si=0; si<sampleNr; si++) {
211 printf(
"%d\t", 1+si);
212 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", points[si].par[i]);
213 printf(
"=> %e\n", points[si].fvalue);
221 for(
unsigned int si=0; si<sampleNr; si++) {
222 points[si].topomin=0;
225 double sdist[sampleNr];
226 for(
unsigned int sj=0; sj<sampleNr; sj++) {
228 if(si==sj) {sdist[sj]=1.0E+99;
continue;}
229 for(
unsigned int k=0; k<nlo->
totalNr; k++) {
230 if(!(nlo->
xtol[k]>0.0))
continue;
231 double d=(points[si].par[k]-points[sj].par[k])/nlo->
xtol[k];
232 if(isfinite(d)) sdist[sj]+=d*d;
240 unsigned int neighs[neighNr];
242 for(ni=0; ni<neighNr; ni++) {
244 double minv=sdist[mini];
245 for(
unsigned int sj=0; sj<sampleNr; sj++) {
246 if(sdist[sj]<minv) {minv=sdist[sj]; mini=sj;}
252 if(!(points[si].fvalue<points[mini].fvalue))
break;
255 if(ni<neighNr)
continue;
257 points[si].topomin=1; topoNr++;
260 printf(
"TM point %d:\n", topoNr);
261 printf(
"%d\t", 1+si);
262 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", points[si].par[i]);
263 printf(
"=> %e\n", points[si].fvalue);
265 printf(
" points neighbours:");
266 for(ni=0; ni<neighNr; ni++) printf(
" %d", 1+neighs[ni]);
273 if(verbose>4) {printf(
" %d topographical minima\n", topoNr); fflush(stdout);}
275 if(verbose>0) {fprintf(stderr,
"Warning: no topographical minima found\n"); fflush(stderr);}
284 if(verbose>0) {fprintf(stderr,
"Error: no topographical minima found\n"); fflush(stderr);}
289 for(
unsigned int si=0; si<sampleNr; si++)
if(points[si].topomin>0) {
290 if(verbose>2) printf(
"LO for TM point %d\n", 1+si);
293 for(
unsigned int i=0; i<nlo->
totalNr; i++) lnlo.
xfull[i]=points[si].par[i];
294 lnlo.
funval=points[si].fvalue;
299 for(
unsigned int i=0; i<nlo->
totalNr; i++) points[si].par[i]=lnlo.
xfull[i];
300 points[si].fvalue=lnlo.
funval;
302 printf(
"TM point %d after LO:\n", 1+si);
303 printf(
"%d\t", 1+si);
304 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", points[si].par[i]);
305 printf(
"=> %e\n", points[si].fvalue); fflush(stdout);
307 }
else if(verbose>7) {printf(
" LO failed\n"); fflush(stdout);}
315 double minv=points[mini].fvalue;
316 for(
unsigned int si=1; si<sampleNr; si++)
317 if(!(points[si].fvalue>minv)) {minv=points[si].fvalue; mini=si;}
318 for(
unsigned int i=0; i<nlo->
totalNr; i++) nlo->
xfull[i]=points[mini].par[i];
319 nlo->
funval=points[mini].fvalue;
357 unsigned int sampleNr,
361 unsigned int neighNr,
365 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
367 printf(
"%s(NLOPT, %d, %u, %u, %u, status)\n", __func__, doLocal, tgoNr, sampleNr, neighNr);
379 if(verbose>0) {fprintf(stderr,
"Error: too many dimensions to optimize.\n"); fflush(stderr);}
386 if(verbose>1 && fixedParNr>0) printf(
"fixedParNr := %d\n", fixedParNr);
387 unsigned int fittedParNr=nlo->
totalNr-fixedParNr;
388 if(verbose>1) printf(
"fittedParNr := %d\n", fittedParNr);
395 for(
unsigned int i=0; i<nlo->
totalNr; i++) {
397 if(!(nlo->
xtol[i]>0.0)) {
398 if(verbose>0) {fprintf(stderr,
"Error: invalid xtol[].\n"); fflush(stderr);}
405 if(sampleNr<10) sampleNr=50*fittedParNr;
406 if(sampleNr&1) sampleNr++;
407 if(neighNr<2) neighNr=sampleNr/2;
408 else if(neighNr>sampleNr-1) neighNr=sampleNr-1;
409 if(tgoNr==0) tgoNr=1+fittedParNr;
411 printf(
"sampleNr := %d\n", sampleNr);
412 printf(
"neighNr := %d\n", neighNr);
413 printf(
"tgoNr := %d\n", tgoNr);
418 int initGuessAvailable=1;
419 double initGuessCost=nan(
"");
420 for(
unsigned int i=0; i<nlo->
totalNr; i++) {
421 if(isnan(nlo->
xfull[i])) {initGuessAvailable=0;
break;}
422 if(nlo->
xfull[i]<nlo->
xlower[i]) {initGuessAvailable=0;
break;}
423 if(nlo->
xfull[i]>nlo->
xupper[i]) {initGuessAvailable=0;
break;}
425 if(initGuessAvailable) {
428 if(!isfinite(initGuessCost)) initGuessAvailable=0;
430 printf(
"valid initial guess with cost=%g\n", initGuessCost);
435 TGO_POINT *points=(TGO_POINT*)malloc(sampleNr*
sizeof(TGO_POINT));
440 for(
unsigned int i=0; i<sampleNr; i++) {
442 points[i].fvalue=0.0;
444 TGO_POINT *gpoints=(TGO_POINT*)malloc(sampleNr*
sizeof(TGO_POINT));
450 for(
unsigned int i=0; i<sampleNr; i++) {
451 gpoints[i].topomin=0;
452 gpoints[i].fvalue=0.0;
458 unsigned int topoNr=0;
459 if(initGuessAvailable) {
461 for(
unsigned int i=0; i<nlo->
totalNr; i++) gpoints[0].par[i]=nlo->
xfull[i];
462 gpoints[0].fvalue=initGuessCost;
465 for(
unsigned int tgoi=0; tgoi<tgoNr; tgoi++) {
467 if(verbose>2 && tgoNr>1) {printf(
"TGO iteration # %d: \n", 1+tgoi); fflush(stdout);}
469 while(topoNr<sampleNr) {
470 if(verbose>3) {printf(
" topoNr := %d\n", topoNr); fflush(stdout);}
473 unsigned int badNr=0;
474 for(
unsigned int si=0; si<sampleNr; si++) {
475 points[si].topomin=0;
481 while(!isfinite(points[si].fvalue) && tries<2) {
483 printf(
"this point did not give normal return value:\n");
484 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
" %10.2e", points[si].par[i]);
492 if(!isfinite(points[si].fvalue)) badNr++;
494 if(verbose>4 && badNr>0) printf(
"Number of bad points: %d\n", badNr);
496 if(tgoi==0 && (sampleNr-badNr)<=neighNr) {
498 fprintf(stderr,
"Error: invalid values inside parameter range.\n"); fflush(stderr);}
499 free(points); free(gpoints);
506 for(
unsigned int si=0; si<sampleNr; si++) {
507 points[si].topomin=0;
510 double sdist[sampleNr];
511 for(
unsigned int sj=0; sj<sampleNr; sj++) {
513 if(si==sj) {sdist[sj]=1.0E+99;
continue;}
514 for(
unsigned int k=0; k<nlo->
totalNr; k++) {
515 if(!(nlo->
xtol[k]>0.0))
continue;
516 double d=(points[si].par[k]-points[sj].par[k])/nlo->
xtol[k];
517 if(isfinite(d)) sdist[sj]+=d*d;
526 for(ni=0; ni<neighNr; ni++) {
528 double minv=sdist[mini];
529 for(
unsigned int sj=0; sj<sampleNr; sj++) {
530 if(sdist[sj]<minv) {minv=sdist[sj]; mini=sj;}
535 if(!(points[si].fvalue<points[mini].fvalue))
break;
537 if(ni<neighNr)
continue;
539 points[si].topomin=1;
541 if(topoNr<sampleNr) {
542 for(
unsigned int i=0; i<nlo->
totalNr; i++) gpoints[topoNr].par[i]=points[si].par[i];
543 gpoints[topoNr++].fvalue=points[si].fvalue;
547 printf(
"TM point %d\t", 1+si);
548 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", points[si].par[i]);
549 printf(
"=> %e\n", points[si].fvalue);
556 if(verbose>3) {printf(
" process gpoints.\n"); fflush(stdout);}
559 for(
unsigned int si=0; si<sampleNr; si++) {
560 gpoints[si].topomin=0;
563 double sdist[sampleNr];
564 for(
unsigned int sj=0; sj<sampleNr; sj++) {
566 if(si==sj) {sdist[sj]=1.0E+99;
continue;}
567 for(
unsigned int k=0; k<nlo->
totalNr; k++) {
568 if(!(nlo->
xtol[k]>0.0))
continue;
569 double d=(gpoints[si].par[k]-gpoints[sj].par[k])/nlo->
xtol[k];
570 if(isfinite(d)) sdist[sj]+=d*d;
576 for(ni=0; ni<neighNr; ni++) {
578 double minv=sdist[mini];
579 for(
unsigned int sj=0; sj<sampleNr; sj++) {
580 if(sdist[sj]<minv) {minv=sdist[sj]; mini=sj;}
585 if(!(gpoints[si].fvalue<gpoints[mini].fvalue))
break;
587 if(ni<neighNr)
continue;
589 gpoints[si].topomin=1;
592 printf(
"GTM point %d\t", 1+si);
593 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", gpoints[si].par[i]);
594 printf(
"=> %e\n", gpoints[si].fvalue);
600 for(
unsigned int si=0; si<sampleNr; si++)
if(gpoints[si].topomin>0) {
602 for(
unsigned int i=0; i<nlo->
totalNr; i++) gpoints[topoNr].par[i]=gpoints[si].par[i];
603 gpoints[topoNr].fvalue=gpoints[si].fvalue;
607 if(verbose>3) {printf(
" %d topographical minima\n", topoNr); fflush(stdout);}
609 if(verbose>0) {fprintf(stderr,
"Warning: no topographical minima found\n"); fflush(stderr);}
619 if(verbose>0) {fprintf(stderr,
"Error: no topographical minima found\n"); fflush(stderr);}
620 free(points); free(gpoints);
624 for(
unsigned int si=0; si<sampleNr; si++)
if(gpoints[si].topomin>0) {
625 if(verbose>2) printf(
"LO for TM point %d\n", 1+si);
627 printf(
"TM point %d before LO:\n", 1+si);
628 printf(
"%d\t", 1+si);
629 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", gpoints[si].par[i]);
630 printf(
"=> %e\n", gpoints[si].fvalue); fflush(stdout);
634 for(
unsigned int i=0; i<nlo->
totalNr; i++) lnlo.
xfull[i]=gpoints[si].par[i];
635 lnlo.
funval=points[si].fvalue;
640 for(
unsigned int i=0; i<nlo->
totalNr; i++) gpoints[si].par[i]=lnlo.
xfull[i];
641 gpoints[si].fvalue=lnlo.
funval;
643 printf(
"TM point %d after LO:\n", 1+si);
644 printf(
"%d\t", 1+si);
645 for(
unsigned int i=0; i<nlo->
totalNr; i++) printf(
"%e ", gpoints[si].par[i]);
646 printf(
"=> %e\n", gpoints[si].fvalue); fflush(stdout);
648 }
else if(verbose>7) {printf(
" LO failed\n"); fflush(stdout);}
656 double minv=gpoints[mini].fvalue;
657 for(
unsigned int si=1; si<sampleNr; si++)
658 if(!(gpoints[si].fvalue>minv)) {minv=gpoints[si].fvalue; mini=si;}
659 for(
unsigned int i=0; i<nlo->
totalNr; i++) nlo->
xfull[i]=gpoints[mini].par[i];
660 nlo->
funval=gpoints[mini].fvalue;
663 free(points); free(gpoints);
695 unsigned int maxIterNr,
703 int verbose=0;
if(status!=NULL) {verbose=status->
verbose; fp=status->
fp;}
705 fprintf(fp,
"%s(NLOPT, %d, %u, %g, status)\n", __func__, doLocal, maxIterNr, neighFract);
720 fprintf(fp,
"\nInitial limits and tolerances:\n");
721 for(
unsigned int i=0; i<dim; i++)
722 fprintf(fp,
"\t%g\t%g\t%e\n", nlo->
xlower[i], nlo->
xupper[i], nlo->
xtol[i]);
727 if(verbose>2 && fixedParNr>0) fprintf(fp,
"fixedParNr := %d\n", fixedParNr);
728 unsigned int fittedParNr=nlo->
totalNr-fixedParNr;
729 if(verbose>2) {fprintf(fp,
"fittedParNr := %d\n", fittedParNr); fflush(fp);}
736 for(
unsigned int i=0; i<dim; i++) {
738 if(!(nlo->
xtol[i]>0.0)) {
739 if(verbose>0) {fprintf(stderr,
"Error: invalid xtol[].\n"); fflush(stderr);}
746 if(neighFract<0.04) neighFract=0.04;
else if(neighFract>0.97) neighFract=0.97;
747 unsigned int sampleNr=50*fittedParNr/neighFract;
748 if(maxIterNr==0) maxIterNr=5+2*fittedParNr;
749 unsigned int neighNr=neighFract*sampleNr;
751 fprintf(fp,
"sampleNr := %u\n", sampleNr);
752 fprintf(fp,
"neighFract := %g\n", neighFract);
753 fprintf(fp,
"neighNr := %u\n", neighNr);
754 fprintf(fp,
"maxIterNr := %u\n", maxIterNr);
762 if(verbose>3) {fprintf(fp,
"Making initial random samples\n"); fflush(fp);}
767 nlo->
plist=(
double*)malloc(sampleNr*(dim+1)*
sizeof(
double));
768 if(nlo->
plist==NULL) {
775 unsigned int badNr=0;
777 for(
unsigned int si=0; si<sampleNr; si++) {
784 if(!isfinite(nlo->
plist[si*(dim+1)+dim])) badNr++;
786 if(verbose>3 && badNr>0) fprintf(fp,
"Number of bad points: %d\n", badNr);
788 if((sampleNr-badNr)<10) {
790 fprintf(stderr,
"Error: invalid values inside parameter range.\n"); fflush(stderr);}
797 for(
unsigned int si=0; si<sampleNr; si++)
if(!isfinite(nlo->
plist[si*(dim+1)+dim])) {
801 if(!isfinite(nlo->
plist[si*(dim+1)+dim])) badNr++;
803 if(verbose>4 && badNr>0) fprintf(fp,
"Number of bad points after retry: %d\n", badNr);
808 int initGuessAvailable=1;
809 double initGuessCost=nan(
"");
810 for(
unsigned int i=0; i<dim; i++) {
811 if(isnan(nlo->
xfull[i])) {initGuessAvailable=0;
break;}
812 if(nlo->
xfull[i]<nlo->
xlower[i]) {initGuessAvailable=0;
break;}
813 if(nlo->
xfull[i]>nlo->
xupper[i]) {initGuessAvailable=0;
break;}
815 if(initGuessAvailable) {
817 if(isfinite(initGuessCost)) {
821 initGuessAvailable=0;
825 if(initGuessAvailable) fprintf(fp,
"valid initial guess with cost=%g\n", initGuessCost);
826 else fprintf(fp,
"no valid initial guess provided.\n");
833 if(verbose>2) {fprintf(fp,
"\nStarting TGO iterations\n"); fflush(fp);}
834 unsigned int iterNr=0, stopCounter=0;
835 double prevBest=nan(
"");
836 while(iterNr<maxIterNr && nlo->funCalls<nlo->maxFunCalls) {
838 unsigned int sampleNr=nlo->
funCalls;
839 if(verbose>3) {fprintf(fp,
"\nIteration %d with %d samples\n", iterNr, sampleNr); fflush(fp);}
846 if(verbose>15) {fprintf(fp,
"Points so far:\n");
nloptPrintP(nlo, 0, fp);}
847 else if(verbose>6) {fprintf(fp,
"Best points so far:\n");
nloptPrintP(nlo, 10, fp);}
849 fprintf(fp,
"best point so far:");
850 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
" %e", nlo->
plist[i]);
851 fprintf(fp,
" => %e\n", nlo->
plist[dim]); fflush(fp);
855 if(verbose>4 && !isnan(prevBest))
856 fprintf(fp,
"dif_to_prev_point := %e\n", prevBest-nlo->
plist[dim]);
857 if(!isnan(prevBest) && (prevBest-nlo->
plist[dim])<1.0E-20) {
858 if(verbose>4) fprintf(fp,
"Best point did not improve.\n");
861 for(i=0; i<dim; i++)
if(fabs(nlo->
xdelta[i])>nlo->
xtol[i])
break;
863 if(verbose>2) fprintf(fp,
"Small SD of best points.\n");
865 }
else stopCounter=0;
867 }
else stopCounter=0;
868 prevBest=nlo->
plist[dim];
871 if(verbose>4) fprintf(fp,
"stopCounter := %d\n", stopCounter);
873 if(verbose>2) fprintf(fp,
"\n Required tolerance reached.\n");
881 unsigned int tmlist[sampleNr];
882 for(
unsigned int i=0; i<sampleNr; i++) tmlist[i]=0;
884 unsigned int topoNr=0;
885 if(verbose>3) {fprintf(fp,
"neighNr := %d\n", neighNr); fflush(fp);}
889 for(
unsigned int si=0; si<sampleNr-neighNr; si++)
if(tmlist[si]==0) {
892 if(!isfinite(nlo->
plist[si*(dim+1)+dim]))
continue;
895 double sdist[sampleNr];
896 for(
unsigned int sj=0; sj<sampleNr; sj++) {
897 if(si==sj || !isfinite(nlo->
plist[sj*(dim+1)+dim])) {
898 sdist[sj]=nan(
"");
continue;}
900 for(
unsigned int k=0; k<dim; k++) {
901 if(!(nlo->
xtol[k]>0.0))
continue;
902 double d=(nlo->
plist[si*(dim+1)+k]-nlo->
plist[sj*(dim+1)+k])/nlo->
xtol[k];
908 double sdist2[sampleNr];
909 for(
unsigned int sj=0; sj<sampleNr; sj++) sdist2[sj]=sdist[sj];
912 unsigned int nn=0;
double prev_mind=nan(
"");
917 for(
unsigned int sj=0; sj<sampleNr; sj++) {
918 if(!isfinite(mind) || mind>sdist[sj]) {mind=sdist[sj]; mini=sj;}
920 if(!isfinite(mind))
break;
922 if(verbose>100) fprintf(fp,
" min_distance[%u] := %g , with fval := %g\n",
923 1+nn, mind, nlo->
plist[mini*(dim+1)+dim]);
925 if(nlo->
plist[mini*(dim+1)+dim] < nlo->
plist[si*(dim+1)+dim])
break;
927 nn++; tmlist[mini]=1+si;
931 if(isnan(prev_mind)) prev_mind=mind;
932 if(nn>=neighNr && mind>1.0 && mind>prev_mind)
break;
939 for(
unsigned int ni=0; ni<sampleNr; ni++)
if(tmlist[ni]==1+si) tmlist[ni]=0;
947 fprintf(fp,
"TM point %d\t", 1+si);
948 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
"%e ", nlo->
plist[si*(dim+1)+i]);
949 fprintf(fp,
"=> %e\n", nlo->
plist[si*(dim+1)+dim]);
951 fprintf(fp,
"and its %u neighbours:\n", nn);
952 for(
unsigned int sj=0; sj<sampleNr; sj++)
if(sj!=si && tmlist[sj]==1+si) {
953 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
"%e ", nlo->
plist[sj*(dim+1)+i]);
954 fprintf(fp,
"=> %e\t(%g)\n", nlo->
plist[sj*(dim+1)+dim], sdist2[sj]);
960 if(verbose>3) {fprintf(fp,
"topographic minima: %d\n", topoNr); fflush(fp);}
962 if(verbose>0) {fprintf(stderr,
"Error: no topographical minima found\n"); fflush(stderr);}
970 for(
unsigned int si=0; si<sampleNr; si++)
if(tmlist[si]==1+si) {
971 if(verbose>5) {fprintf(fp,
"LO for TM point %d\n", 1+si); fflush(fp);}
973 fprintf(fp,
"TM point %d before LO:\n", 1+si);
974 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
" %e", nlo->
plist[si*(dim+1)+i]);
975 fprintf(fp,
" => %e\n", nlo->
plist[si*(dim+1)+dim]); fflush(fp);
978 double meanp[dim], sdp[dim];
unsigned int nn=0;
979 for(
unsigned int i=0; i<dim; i++) {
983 for(
unsigned int sj=0; sj<sampleNr; sj++)
984 if(tmlist[sj]==1+si) x[nn++]=nlo->
plist[sj*(dim+1)+i];
987 meanp[i]=nlo->
xlower[i]; sdp[i]=0.0;
991 fprintf(fp,
"TM point (n=%u) mean and SD:\n", nn);
992 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
"\t%g\t%g\n", meanp[i], sdp[i]);
996 for(
unsigned int i=0; i<dim; i++)
if(nlo->
xupper[i]>nlo->
xlower[i]) {
1004 if(verbose>1) {fprintf(fp,
" LO failed: %s\n",
errorMsg(ret)); fflush(fp);}
1007 fprintf(fp,
"Point after LO:");
1008 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
" %e ", nlo->
xfull[i]);
1009 fprintf(fp,
" => %e\n", nlo->
funval); fflush(fp);
1013 unsigned int bi=0;
double bval=nan(
"");
1014 for(
unsigned int ni=0; ni<neighNr; ni++) {
1018 if(isnan(bval) || bval>fval) {bval=fval; bi=nlo->
funCalls;}
1022 fprintf(fp,
"Best TM point %d after LO:\n", 1+si);
1023 for(
unsigned int i=0; i<dim; i++) fprintf(fp,
" %e", nlo->
plist[bi*(dim+1)+i]);
1024 fprintf(fp,
" => %e\n", nlo->
plist[bi*(dim+1)+dim]); fflush(fp);
1033 if(iterNr>=maxIterNr)
1034 fprintf(fp,
"\n Exceeded the maximum number for loops.\n");
1036 fprintf(fp,
"\n Exceeded the maximum number for function calls.\n");
1044 for(
unsigned int i=0; i<dim; i++) nlo->
xfull[i]=nlo->
plist[i];