00001
00002
00003
00004 int enableOutput;
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <stdio.h>
00032 #include <stdlib.h>
00033 #include <math.h>
00034 #include <limits.h>
00035 #include <float.h>
00036 #include <string.h>
00037
00038
00039
00040
00041
00042 #include "bbobStructures.h"
00043 #include "benchmarksdeclare.h"
00044 #include "benchmarkshelper.h"
00045 #include "benchmarks.h"
00046 #include "benchmarksnoisy.h"
00047
00048
00049 void writeNewIndexEntry(ParamStruct PARAMS);
00050 void addIndexEntry(ParamStruct PARAMS);
00051 void addDatIndexEntry(ParamStruct PARAMS);
00052 void writeFinalData(ParamStruct PARAMS, LastEvalStruct BestFEval, double lastWriteEval, LastEvalStruct LastEval, double Fopt);
00053 void writeBestF(char * dataFile, double BestFEval, double Fopt);
00054 void sprintData(FILE* fout, double evals, double F, double bestF, double Fnoisy, double bestFnoisy, double * x, double Fopt);
00055 void writeDataHeader(char * dataFile, double Fopt);
00056 ParamStruct setNextDataFile(ParamStruct PARAMS, unsigned int isAllParamsMatching);
00057
00058
00059
00060
00061
00062
00063
00064 double fTrigger;
00065 double evalsTrigger;
00066 unsigned int idxEvalsTrigger, idxDIMEvalsTrigger;
00067 int idxFTrigger;
00068
00069 double maxFunEvalsFactor = 1e6;
00070 unsigned int nbPtsEvals = 20;
00071 unsigned int nbPtsF = 5;
00072 int initDone = 0;
00073
00074 bbobFunction actFunc = NULL;
00075 LastEvalStruct LastEval, BestFEval;
00076 double lastWriteEval;
00077
00078
00079 LastEvalStruct lastEvalInit = {0, DBL_MAX, DBL_MAX, DBL_MAX, {0}, 0};
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 ParamStruct DefaultParam = {
00106 "not-specified",
00107 "",
00108 ".",
00109 "bbobexp",
00110 0,
00111 1e-8,
00112 9999,
00113 9999,
00114 "",
00115 "",
00116 "",
00117 "",
00118 "",
00119 "",
00120 "",
00121 "",
00122 "",
00123 "",
00124 0,
00125 0
00126 };
00127
00128 ParamStruct PreviousPARAMS = {
00129 "not-specified",
00130 "",
00131 ".",
00132 "bbobexp",
00133 0,
00134 1e-8,
00135 9999,
00136 9999,
00137 "",
00138 "",
00139 "",
00140 "",
00141 "",
00142 "",
00143 "",
00144 "",
00145 "",
00146 "",
00147 0,
00148 0
00149 };
00150
00151 ParamStruct CurrentPARAMS = {
00152 "not-specified",
00153 "",
00154 ".",
00155 "bbobexp",
00156 0,
00157 1e-8,
00158 9999,
00159 9999,
00160 "",
00161 "",
00162 "",
00163 "",
00164 "",
00165 "",
00166 "",
00167 "",
00168 "",
00169 "",
00170 0,
00171 0
00172 };
00173
00174
00175
00176
00177 ParamStruct fgeneric_getDefaultPARAMS(void)
00178 {
00179 return DefaultParam;
00180 }
00181
00182
00183
00184
00185
00186 int fgeneric_exist(unsigned int FUNC_ID)
00187 {
00188 if ( (FUNC_ID <= handlesLength ) ||
00189 ( (100 < FUNC_ID) && (FUNC_ID <= 100+handlesNoisyLength) )
00190 )
00191 return 1;
00192 return 0;
00193 }
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219 double fgeneric_initialize(ParamStruct PARAMS)
00220 {
00221 char sLoc[1024];
00222 double * X;
00223 TwoDoubles res;
00224
00225
00226 if (!( (PARAMS.DIM == CurrentPARAMS.DIM) &&
00227 (PARAMS.funcId == CurrentPARAMS.funcId) &&
00228 (PARAMS.instanceId == CurrentPARAMS.instanceId))
00229 )
00230 {
00231 isInitDone = 0;
00232 }
00233
00234
00235 if (actFunc != NULL) {
00236 WARNING("Calling fgeneric_initialize while an experiment is still running (DIM %d, function %d, instance %d)\nCalling fgeneric_finalize to close it properly", CurrentPARAMS.DIM, CurrentPARAMS.funcId, CurrentPARAMS.instanceId);
00237 fgeneric_finalize();
00238 }
00239
00240
00241
00242 if (PARAMS.DIM == 0)
00243 ERROR("You need to set the dimension of the problem greater than 0");
00244
00245 if (PARAMS.DIM > DIM_MAX)
00246 ERROR("You need to recompile the program to increase DIM_MAX if you want to run with dimension %d\nPlease also pay attention at the definition of lastEvalInit", PARAMS.DIM);
00247
00248
00249 if (CurrentPARAMS.DIM != PARAMS.DIM)
00250 {
00251 if (CurrentPARAMS.DIM != 0)
00252 {
00253 finibenchmarks();
00254 finibenchmarksnoisy();
00255 finibenchmarkshelper();
00256 }
00257
00258 DIM = PARAMS.DIM;
00259
00260 initbenchmarkshelper();
00261 initbenchmarks();
00262 initbenchmarksnoisy();
00263 }
00264
00265
00266
00267 if (PARAMS.funcId-1 < handlesLength )
00268 actFunc = handles[PARAMS.funcId-1];
00269 else
00270 {
00271 if ( (100 < PARAMS.funcId) && (PARAMS.funcId-101 < handlesNoisyLength) )
00272 actFunc = handlesNoisy[PARAMS.funcId - 101];
00273 else
00274 ERROR("funcId in PARAMS is %d which is not a valid function identifier", PARAMS.funcId);
00275 }
00276
00277 trialid = PARAMS.instanceId;
00278
00279
00280
00281 Fopt = computeFopt(PARAMS.funcId, PARAMS.instanceId);
00282
00283 LastEval = lastEvalInit;
00284 BestFEval = LastEval;
00285 BestFEval.isWritten = 1;
00286
00287 lastWriteEval = 0;
00288
00289 idxFTrigger = INT_MAX;
00290 fTrigger = DBL_MAX;
00291 idxEvalsTrigger = 0;
00292 evalsTrigger = floor(pow(10.,(double)idxEvalsTrigger/(double)nbPtsEvals));
00293 idxDIMEvalsTrigger = 0;
00294
00295 PARAMS.runCounter = 1;
00296
00297
00298
00299
00300
00301
00302 if(enableOutput) {
00303
00304
00305
00306
00307 if ( strlen(PARAMS.dataPath) == 0 )
00308 ERROR("PARAMS.DATAPATH is expected to be a non-empty string. To set DATAPATH to the current working directory, input '.'");
00309
00310 dirOK(PARAMS.dataPath);
00311
00312
00313
00314
00315
00316
00317
00318
00319 sprintf(sLoc, "%s_f%d.info", PARAMS.filePrefix, PARAMS.funcId);
00320 createFullFileName(PARAMS.indexFile, PARAMS.dataPath, sLoc);
00321
00322 sprintf(sLoc, "data_f%d", PARAMS.funcId);
00323 createFullFileName(PARAMS.dataFilePrefixNameOnly, sLoc, PARAMS.filePrefix);
00324
00325
00326
00327 createFullFileName(sLoc, PARAMS.dataPath, sLoc);
00328 dirOK(sLoc);
00329
00330 createFullFileName(PARAMS.dataFilePrefix, PARAMS.dataPath, PARAMS.dataFilePrefixNameOnly);
00331
00332
00333
00334
00335
00336 if ((PARAMS.DIM == CurrentPARAMS.DIM) && (PARAMS.funcId == CurrentPARAMS.funcId) &&
00337 (PARAMS.precision == CurrentPARAMS.precision) && !strcmp(PARAMS.algName, CurrentPARAMS.algName) &&
00338 !strcmp(PARAMS.comments, CurrentPARAMS.comments)
00339 )
00340 {
00341 PARAMS.dataFileSuffix = CurrentPARAMS.dataFileSuffix;
00342 PARAMS = setNextDataFile(PARAMS, 1);
00343 if (!strcmp(PARAMS.dataFile, CurrentPARAMS.dataFile))
00344 addIndexEntry(PARAMS);
00345 else
00346 addDatIndexEntry(PARAMS);
00347 }
00348 else
00349 {
00350 PARAMS = setNextDataFile(PARAMS, 0);
00351 writeNewIndexEntry(PARAMS);
00352 }
00353 writeDataHeader(PARAMS.dataFile, Fopt);
00354 writeDataHeader(PARAMS.hdataFile, Fopt);
00355 writeDataHeader(PARAMS.rdataFile, Fopt);
00356
00357 }
00358
00359
00360 CurrentPARAMS = PARAMS;
00361
00362
00363
00364 X = (double*)malloc(DIM * sizeof(double));
00365 res = (*actFunc)(X);
00366 free(X);
00367 return Fopt + PARAMS.precision;
00368 }
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379 double fgeneric_finalize(void)
00380 {
00381 if (actFunc == NULL)
00382 ERROR("Finalization process of fgeneric is called before the initialization process has occurred.");
00383
00384 if(enableOutput)
00385 writeFinalData(CurrentPARAMS,BestFEval,lastWriteEval, LastEval, Fopt);
00386
00387 CurrentPARAMS.runCounter = CurrentPARAMS.runCounter + 1;
00388 PreviousPARAMS = CurrentPARAMS;
00389
00390
00391 actFunc = NULL;
00392
00393 return BestFEval.F;
00394 }
00395
00396
00397
00398
00399
00400 double fgeneric_evaluations(void)
00401 {
00402 if (actFunc == NULL)
00403 WARNING("fgeneric_evaluations: fgeneric_initialized has not been called.");
00404 return LastEval.num;
00405 }
00406
00407
00408
00409
00410 double fgeneric_best(void)
00411 {
00412 if (actFunc == NULL)
00413 WARNING("fgeneric_best: fgeneric_initialized has not been called.");
00414 return BestFEval.F;
00415 }
00416
00417
00418
00419
00420 double fgeneric_ftarget(void)
00421 {
00422 if (actFunc == NULL) {
00423 WARNING("fgeneric_ftarget: fgeneric_initialized has not been called.");
00424 return 0.0;
00425 }
00426 else
00427 return Fopt + CurrentPARAMS.precision;
00428 }
00429
00430
00431
00432
00433
00434 double fgeneric_maxevals(unsigned int DIM)
00435 {
00436 return (double)maxFunEvalsFactor * DIM;
00437 }
00438
00439
00440
00441
00442 void fgeneric_noiseseed(unsigned long seed)
00443 {
00444 seed = seed % 1000000000;
00445 setNoiseSeed(seed, seed);
00446 }
00447
00448
00449
00450
00451
00452 void fgeneric_restart(char * restart_reason){
00453 FILE * rdataFileId;
00454 rdataFileId = bbobOpenFile(CurrentPARAMS.rdataFile);
00455 fprintf(rdataFileId, "%% restart: '%s'\n", restart_reason);
00456 sprintData(rdataFileId, LastEval.num, LastEval.F, BestFEval.F, LastEval.Fnoisy, LastEval.bestFnoisy, LastEval.x, Fopt);
00457 fclose(rdataFileId);
00458 }
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471 void fgeneric_evaluate_vector(double * XX, unsigned int howMany, double * result)
00472 {
00473 unsigned int i;
00474 double * XXtmp=XX;
00475 double * resultTmp = result ;
00476
00477 for (i=0; i<howMany; i++)
00478 {
00479 *resultTmp = fgeneric_evaluate(XXtmp);
00480 resultTmp++;
00481 XXtmp += DIM;
00482 }
00483 }
00484
00485
00486
00487
00488 double fgeneric_evaluate(double * X)
00489 {
00490 int i;
00491 unsigned int boolImprovement = 0;
00492 double Fvalue, Ftrue;
00493 double evalsj;
00494 FILE * dataFileId;
00495 FILE * hdataFileId;
00496 TwoDoubles res;
00497
00498 if (actFunc == NULL)
00499 ERROR("fgeneric has not been initialized. Please call 'fgeneric_initialize' first.");
00500
00501 res = (*actFunc)(X);
00502 Fvalue = res.Fval;
00503 Ftrue = res.Ftrue;
00504
00505
00506
00507
00508
00509 if(enableOutput) {
00510
00511
00512
00513 if ( (LastEval.num+1 >= evalsTrigger) || (Ftrue-Fopt < fTrigger) )
00514 {
00515 evalsj = LastEval.num + 1;
00516
00517 if (Fvalue < LastEval.bestFnoisy)
00518 LastEval.bestFnoisy = Fvalue;
00519
00520 if (Ftrue < BestFEval.F) {
00521 boolImprovement = 1;
00522 BestFEval.F = Ftrue;
00523 BestFEval.bestFnoisy = LastEval.bestFnoisy;
00524 BestFEval.isWritten = 0;
00525 }
00526
00527
00528 if (evalsj >= evalsTrigger)
00529 {
00530 lastWriteEval = evalsj;
00531 BestFEval.isWritten = 1;
00532 dataFileId = bbobOpenFile(CurrentPARAMS.dataFile);
00533
00534 sprintData(dataFileId, evalsj,Ftrue, BestFEval.F, Fvalue, LastEval.bestFnoisy, X,Fopt);
00535 fclose(dataFileId);
00536
00537 while (evalsj >= floor(pow(10., (double)idxEvalsTrigger/(double)nbPtsEvals)) )
00538 idxEvalsTrigger = idxEvalsTrigger + 1;
00539
00540 while ( evalsj >= DIM * pow(10., (double)idxDIMEvalsTrigger))
00541 idxDIMEvalsTrigger = idxDIMEvalsTrigger + 1;
00542
00543 evalsTrigger = fmin(floor(pow(10., (double)idxEvalsTrigger/(double)nbPtsEvals)), DIM * pow(10., (double) idxDIMEvalsTrigger));
00544 }
00545
00546
00547 if (Ftrue - Fopt < fTrigger)
00548 {
00549 hdataFileId = bbobOpenFile(CurrentPARAMS.hdataFile);
00550 sprintData(hdataFileId, evalsj,Ftrue,BestFEval.F, Fvalue, LastEval.bestFnoisy, X, Fopt);
00551 fclose(hdataFileId);
00552
00553 if (Ftrue-Fopt <= 0)
00554 fTrigger = -DBL_MAX;
00555 else
00556 {
00557 if (idxFTrigger == INT_MAX)
00558 idxFTrigger = ceil(log10(Ftrue-Fopt))*nbPtsF;
00559
00560 while ( (Ftrue-Fopt) <= pow(10., (double)idxFTrigger/(double)nbPtsF) )
00561 idxFTrigger = idxFTrigger - 1;
00562
00563 fTrigger = fmin(fTrigger, pow(10., (double)idxFTrigger/(double)nbPtsF));
00564 }
00565 }
00566
00567 if ( ! BestFEval.isWritten && boolImprovement )
00568 {
00569 BestFEval.num = LastEval.num+1;
00570 BestFEval.Fnoisy = Fvalue;
00571 for (i=0; i<DIM; i++)
00572 BestFEval.x[i] = X[i];
00573 }
00574 }
00575 else
00576 {
00577 if (Ftrue < BestFEval.F)
00578 {
00579 BestFEval.num = LastEval.num+1;
00580 BestFEval.Fnoisy = Fvalue;
00581 for (i=0; i<DIM; i++)
00582 BestFEval.x[i] = X[i];
00583 BestFEval.F = Ftrue;
00584 BestFEval.bestFnoisy=fmin(LastEval.bestFnoisy, Fvalue);
00585 BestFEval.isWritten = 0;
00586 }
00587 LastEval.bestFnoisy = fmin(LastEval.bestFnoisy,Fvalue);
00588 }
00589
00590 LastEval.num = LastEval.num + 1;
00591 LastEval.F = Ftrue;
00592 LastEval.Fnoisy = Fvalue;
00593 for (i=0; i<DIM; i++)
00594 LastEval.x[i] = X[i];
00595
00596
00597 }
00598
00599
00600 return Fvalue;
00601 }
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611 void writeDataHeader(char * dataFile, double Fopt)
00612 {
00613 FILE * dataFileId = bbobOpenFile(dataFile);
00614
00615 fprintf(dataFileId, "%% function evaluation | noise-free fitness - Fopt (%13.12e) | best noise-free fitness - Fopt | measured fitness | best measured fitness | x1 | x2...\n", Fopt);
00616 fclose(dataFileId);
00617 }
00618
00619
00620
00621
00622
00623 void writeNewIndexEntry(ParamStruct PARAMS)
00624 {
00625 FILE * indexFileId;
00626 int newline = 1;
00627 if ( !existFile(PARAMS.indexFile) )
00628 newline = 0;
00629
00630 indexFileId = fopen(PARAMS.indexFile,"a");
00631 if (indexFileId == NULL)
00632 ERROR("Could not open %s", PARAMS.indexFile);
00633
00634 if (newline == 1)
00635 fprintf(indexFileId,"\n");
00636
00637 fprintf(indexFileId, "funcId = %d, DIM = %d, Precision = %.3e, algId = '%s'\n", PARAMS.funcId, PARAMS.DIM, PARAMS.precision, PARAMS.algName);
00638 fprintf(indexFileId,"%% %s\n%s, %d", PARAMS.comments, PARAMS.hdataFileNameOnly, PARAMS.instanceId);
00639 fclose(indexFileId);
00640 }
00641
00642
00643
00644
00645 void addIndexEntry(ParamStruct PARAMS)
00646 {
00647 FILE * indexFileId;
00648
00649 if ( !existFile(PARAMS.indexFile) )
00650 ERROR("Could not find %s", PARAMS.indexFile);
00651
00652 indexFileId = fopen(PARAMS.indexFile,"a");
00653 if (indexFileId == NULL)
00654 ERROR("Could not open %s", PARAMS.indexFile);
00655
00656 fprintf(indexFileId,", %d", PARAMS.instanceId);
00657 fclose(indexFileId);
00658 }
00659
00660
00661
00662
00663 void addDatIndexEntry(ParamStruct PARAMS)
00664 {
00665 FILE * indexFileId;
00666
00667 if ( !existFile(PARAMS.indexFile) )
00668 ERROR("Could not find %s", PARAMS.indexFile);
00669
00670 indexFileId = fopen(PARAMS.indexFile,"a");
00671 if (indexFileId == NULL)
00672 ERROR("Could not open %s", PARAMS.indexFile);
00673
00674 fprintf(indexFileId,", %s, %d", PARAMS.hdataFileNameOnly, PARAMS.instanceId);
00675 fclose(indexFileId);
00676 }
00677
00678
00679
00680
00681 void writeFinalData(ParamStruct PARAMS, LastEvalStruct BestFEval, double lastWriteEval, LastEvalStruct LastEval, double Fopt)
00682 {
00683 FILE * dataFileId;
00684 FILE * indexFileId;
00685
00686 dataFileId = bbobOpenFile(PARAMS.dataFile);
00687
00688 if ( ! BestFEval.isWritten )
00689 {
00690 if (BestFEval.num > lastWriteEval)
00691 {
00692 lastWriteEval = BestFEval.num;
00693 sprintData(dataFileId, BestFEval.num,BestFEval.F, BestFEval.F, BestFEval.Fnoisy, BestFEval.bestFnoisy, LastEval.x, Fopt);
00694 }
00695 else
00696 {
00697 fclose(dataFileId);
00698 writeBestF(PARAMS.dataFile, BestFEval.num, Fopt);
00699 dataFileId = bbobOpenFile(PARAMS.dataFile);
00700 }
00701 }
00702 if (LastEval.num > lastWriteEval)
00703 sprintData(dataFileId, LastEval.num, LastEval.F, BestFEval.F, LastEval.Fnoisy, LastEval.bestFnoisy, LastEval.x, Fopt);
00704
00705 fclose(dataFileId);
00706
00707
00708 indexFileId = bbobOpenFile(PARAMS.indexFile);
00709 fprintf(indexFileId, ":%.0f|%.1e", LastEval.num, BestFEval.F - Fopt - PARAMS.precision);
00710 fclose(indexFileId);
00711 }
00712
00713
00714
00715
00716 void writeBestF(char * dataFile, double BestFEval, double Fopt)
00717 {
00718 printf("Calling writeBestF with %s, %.0f, %g\n", dataFile, BestFEval, Fopt);
00719 }
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778 void sprintData(FILE* fout, double evals, double F, double bestF, double Fnoisy, double bestFnoisy, double * x, double Fopt)
00779 {
00780 int i;
00781 fprintf(fout, "%.0f", evals);
00782 fprintf(fout, " %+10.9e %+10.9e %+10.9e %+10.9e", F-Fopt, bestF-Fopt, Fnoisy, bestFnoisy);
00783 if (DIM < 22)
00784 for (i=0; i<DIM; i++)
00785 fprintf(fout, " %+5.4e",x[i]);
00786 fprintf(fout, "\n");
00787 }
00788
00789
00790
00791 ParamStruct setNextDataFile(ParamStruct PARAMS, unsigned int isAllParamsMatching)
00792 {
00793
00794 if (PARAMS.dataFileSuffix == 0)
00795 {
00796 sprintf(PARAMS.dataFile, "%s_f%d_DIM%d.tdat", PARAMS.dataFilePrefix,
00797 PARAMS.funcId, PARAMS.DIM);
00798 sprintf(PARAMS.dataFileNameOnly, "%s_f%d_DIM%d.tdat", PARAMS.dataFilePrefixNameOnly,
00799 PARAMS.funcId, PARAMS.DIM);
00800 sprintf(PARAMS.hdataFile, "%s_f%d_DIM%d.dat", PARAMS.dataFilePrefix,
00801 PARAMS.funcId, PARAMS.DIM);
00802 sprintf(PARAMS.hdataFileNameOnly, "%s_f%d_DIM%d.dat", PARAMS.dataFilePrefixNameOnly,
00803 PARAMS.funcId, PARAMS.DIM);
00804 sprintf(PARAMS.rdataFile, "%s_f%d_DIM%d.rdat", PARAMS.dataFilePrefix,
00805 PARAMS.funcId, PARAMS.DIM);
00806 sprintf(PARAMS.rdataFileNameOnly, "%s_f%d_DIM%d.rdat", PARAMS.dataFilePrefixNameOnly,
00807 PARAMS.funcId, PARAMS.DIM);
00808 }
00809 else
00810 {
00811 sprintf(PARAMS.dataFile, "%s-%02d_f%d_DIM%d.tdat", PARAMS.dataFilePrefix,
00812 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00813 sprintf(PARAMS.dataFileNameOnly, "%s-%02d_f%d_DIM%d.tdat", PARAMS.dataFilePrefixNameOnly,
00814 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00815 sprintf(PARAMS.hdataFile, "%s-%02d_f%d_DIM%d.dat", PARAMS.dataFilePrefix,
00816 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00817 sprintf(PARAMS.hdataFileNameOnly, "%s-%02d_f%d_DIM%d.dat", PARAMS.dataFilePrefixNameOnly,
00818 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00819 sprintf(PARAMS.rdataFile, "%s-%02d_f%d_DIM%d.rdat", PARAMS.dataFilePrefix,
00820 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00821 sprintf(PARAMS.rdataFileNameOnly, "%s-%02d_f%d_DIM%d.rdat", PARAMS.dataFilePrefixNameOnly,
00822 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00823 }
00824
00825 if (!isAllParamsMatching)
00826 {
00827 PARAMS.dataFileSuffix = 0;
00828 while (existFile(PARAMS.dataFile) || existFile(PARAMS.hdataFile))
00829 {
00830 PARAMS.dataFileSuffix ++;
00831 sprintf(PARAMS.dataFile, "%s-%02d_f%d_DIM%d.tdat", PARAMS.dataFilePrefix,
00832 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00833 sprintf(PARAMS.dataFileNameOnly, "%s-%02d_f%d_DIM%d.tdat", PARAMS.dataFilePrefixNameOnly,
00834 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00835 sprintf(PARAMS.hdataFile, "%s-%02d_f%d_DIM%d.dat", PARAMS.dataFilePrefix,
00836 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00837 sprintf(PARAMS.hdataFileNameOnly, "%s-%02d_f%d_DIM%d.dat", PARAMS.dataFilePrefixNameOnly,
00838 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00839 sprintf(PARAMS.rdataFile, "%s-%02d_f%d_DIM%d.rdat", PARAMS.dataFilePrefix,
00840 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00841 sprintf(PARAMS.rdataFileNameOnly, "%s-%02d_f%d_DIM%d.rdat", PARAMS.dataFilePrefixNameOnly,
00842 PARAMS.dataFileSuffix, PARAMS.funcId, PARAMS.DIM);
00843 }
00844 }
00845 return PARAMS;
00846 }
00847