void ProblemReader::parse_parameters(int argc,char *argv[]){ int i,tmp; assignmentManager->M_MPE = false; assignmentManager->optimalLogMPEValue = DOUBLE_BIG; network_filename[0] = '\0'; sls_filename[0] = '\0'; for (i=1;i < argc;i++){ if (strcmp(argv[i],"-i") == 0 || strcmp(argv[i],"--input") == 0){ i++; strncpy( network_filename, argv[i], strlen( argv[i] ) ); } else if (strcmp(argv[i],"-o") == 0 || strcmp(argv[i],"--output") == 0){ i++; strncpy( sls_filename, argv[i], strlen( argv[i] ) ); } else if (strcmp(argv[i],"--inputType") == 0) scanone(argc,argv,++i,&inputType); else if (strcmp(argv[i],"-x") == 0 || strcmp(argv[i],"--maxRuns") == 0) scanone(argc,argv,++i,&maxRuns); else if (strcmp(argv[i],"-s") == 0 || strcmp(argv[i],"--seed")==0) scanlongint(argc,argv,++i,&seed); else if (strcmp(argv[i],"-t") == 0 || strcmp(argv[i],"--maxTime") == 0) scandouble(argc,argv,++i,&maxTime); else if (strcmp(argv[i],"-z") == 0 || strcmp(argv[i],"--maxSteps") == 0) scanlongint(argc,argv,++i,&maxSteps); else if (strcmp(argv[i],"-it") == 0 || strcmp(argv[i],"--maxIterations") == 0) scanone(argc,argv,++i,&maxIterations); else if (strcmp(argv[i],"-a") == 0 || strcmp(argv[i],"--algo") == 0) scanone(argc,argv,++i,&algo); else if (strcmp(argv[i],"-c") == 0 || strcmp(argv[i],"--caching") == 0) scanone(argc,argv,++i,&caching); else if (strcmp(argv[i],"-b") == 0 || strcmp(argv[i],"--init") == 0) scanone(argc,argv,++i,&init_algo); else if (strcmp(argv[i],"-pert") == 0) scanone(argc,argv,++i,&pertubationType); else if (strcmp(argv[i],"-tmult") == 0) scandouble(argc,argv,++i,&tmult); else if (strcmp(argv[i],"-tdiv") == 0) scandouble(argc,argv,++i,&tdiv); else if (strcmp(argv[i],"-tmin") == 0) scandouble(argc,argv,++i,&tmin); else if (strcmp(argv[i],"-tbase") == 0) scandouble(argc,argv,++i,&tbase); else if (strcmp(argv[i],"-T") == 0) scandouble(argc,argv,++i,&T); else if (strcmp(argv[i],"-mmpe") == 0){ assignmentManager->M_MPE = true; scanone(argc,argv,++i,&assignmentManager->M); } else if (strcmp(argv[i],"-onlyConvertToBNT") == 0){ onlyConvertToBNT = true; sscanf(argv[++i],"%s", bntFileAndFunctionName); } else if (strcmp(argv[i],"-nvns") == 0) scanone(argc,argv,++i,&num_vns_pertubation_strength); else if (strcmp(argv[i],"-mbp") == 0){ scanone(argc,argv,++i,&mbPertubation ); } else if (strcmp(argv[i],"-vns") == 0){ scanone(argc,argv,++i,&tmp); vns = (tmp!=0); } else if (strcmp(argv[i],"-rf") == 0) scanone(argc,argv,++i,&restartNumFactor); else if (strcmp(argv[i],"-pfix") == 0){ scanone(argc,argv,++i,&tmp); pertubationFixVars = (tmp!=0); } else if (strcmp(argv[i],"-pspb") == 0) scandouble(argc,argv,++i,&psp_base); else if (strcmp(argv[i],"-psab") == 0) scandouble(argc,argv,++i,&psa_base); else if (strcmp(argv[i],"-p") == 0 || strcmp(argv[i],"--pertubationStrength") == 0) { scanone(argc,argv,++i,&pertubation_strength); } else if (strcmp(argv[i],"-tl") == 0) scanone(argc,argv,++i,&tl); else if (strcmp(argv[i],"-prel") == 0 || strcmp(argv[i],"--pertubationStrengthRelative") == 0){ scanone(argc,argv,++i,&tmp); pertubation_rel = (tmp!=0); } //=== Acceptance criterion. else if (strcmp(argv[i],"-acc") == 0 || strcmp(argv[i],"--acceptCrit") == 0) scanone(argc,argv,++i,&accCriterion); // else if (strcmp(argv[i],"-rint") == 0 || strcmp(argv[i],"--restartInterval") == 0) // scanone(argc,argv,++i,&restartInterval); else if (strcmp(argv[i],"-wint") == 0 || strcmp(argv[i],"--worseningInterval") == 0) scandouble(argc,argv,++i,&worseningInterval); else if (strcmp(argv[i],"-an") == 0 || strcmp(argv[i],"--acceptNoise") == 0) scandouble(argc,argv,++i,&accNoise); else if (strcmp(argv[i],"-pB") == 0 || strcmp(argv[i],"--prepBound") == 0) scandouble(argc,argv,++i,&preprocessingSizeBound); else if (strcmp(argv[i],"-mw") == 0 || strcmp(argv[i],"--maxMBWeight") == 0) scandouble(argc,argv,++i,&maxMBWeight); else if (strcmp(argv[i],"-glsInc") == 0) scandouble(argc,argv,++i,&glsPenaltyIncrement); else if (strcmp(argv[i],"-glsSmooth") == 0) scandouble(argc,argv,++i,&glsSmooth); else if (strcmp(argv[i],"-glsInterval") == 0) scanone(argc,argv,++i,&glsInterval); else if (strcmp(argv[i],"-glsPenMult") == 0) scandouble(argc,argv,++i,&glsPenaltyMultFactor); else if (strcmp(argv[i],"-glsReal") == 0) scanone(argc,argv,++i,&glsReal); else if (strcmp(argv[i],"-glsAspiration") == 0) scanone(argc,argv,++i,&glsAspiration); else if (strcmp(argv[i],"-noout") == 0) noout = 1; else if (strcmp(argv[i],"-res") == 0){ output_res = TRUE; i++; strncpy( res_filename, argv[i], strlen( argv[i] ) ); } else if (strcmp(argv[i],"-opt") == 0 || strcmp(argv[i],"--optimalLogMPE") == 0) scandouble(argc,argv,++i,&assignmentManager->optimalLogMPEValue); else if (strcmp(argv[i],"-n") == 0 || strcmp(argv[i],"--noise") == 0) scanone(argc,argv,++i,&noise); else if (strcmp(argv[i],"-cf") == 0 || strcmp(argv[i],"--cutoff") == 0) scandouble(argc,argv,++i,&cutoff); else if (strcmp(argv[i],"-stdout") == 0) output_to_stdout=1; else if (strcmp(argv[i],"-lm") == 0){ output_lm = TRUE; maxRuns = 20; } else if (strcmp(argv[i],"-stats") == 0) justStats = true; else if (strcmp(argv[i],"-traj") == 0){ output_trajectory = 1; // maxRuns = 1; } else if (strcmp(argv[i],"-runstats") == 0){ output_runstats = 1; maxIterations = 100; } else if (strcmp(argv[i],"-params") == 0){ print_tunable_parameters(); exit(0); } else if (strcmp(argv[i],"--help")==0 || strcmp(argv[i],"-h")==0 ){ print_help(); exit(0); } else{ if(i==argc-1 && strcmp(argv[i],"&") == 0) continue; fprintf(stderr, "=========================\nBad argument %s\n", argv[i]); fprintf(stderr, "USAGE:\n\n"); print_help(); exit(-1); } } if(argc <= 1){ fprintf(stderr, "USAGE:\n\n"); print_help(); exit(-1); } if(network_filename[0] == '\0') { fprintf(stderr, "You must specifiy a BN input file in .simple format using -i <network_filename>\n"); exit(-1); } int j,k; for(j=strlen( network_filename )-1; network_filename[j] != '.'; j--); // find last . in network_filename if(sls_filename[0] == '\0') { for(i=0; i<=j; i++){ sls_filename[i] = network_filename[i]; } k=j; sls_filename[++k] = 's'; sls_filename[++k] = 'l'; sls_filename[++k] = 's'; sls_filename[++k] = '\0'; outfile = stdout; } else { outfile = fopen(sls_filename, "w"); } for(j=strlen( sls_filename )-1; sls_filename[j] != '.'; j--); // find last . in network_filename for(i=0; i<=j; i++){ traj_it_filename[i] = sls_filename[i]; traj_fl_filename[i] = sls_filename[i]; } k=j; traj_it_filename[++k] = 't'; traj_it_filename[++k] = 'r'; traj_it_filename[++k] = 'a'; traj_it_filename[++k] = 'j'; traj_it_filename[++k] = 'i'; traj_it_filename[++k] = 't'; traj_it_filename[++k] = '\0'; k=j; traj_fl_filename[++k] = 't'; traj_fl_filename[++k] = 'r'; traj_fl_filename[++k] = 'a'; traj_fl_filename[++k] = 'j'; traj_fl_filename[++k] = 'f'; traj_fl_filename[++k] = 'l'; traj_fl_filename[++k] = '\0'; if( output_trajectory ) traj_it_file = fopen(traj_it_filename, "w"); if( output_trajectory ) traj_fl_file = fopen(traj_fl_filename, "w"); if( output_res ) resfile = fopen(res_filename, "w"); /* if(algo == ALGO_GLS && (caching == CACHING_GOOD_VARS || caching == CACHING_SCORE)){ printf("caching scheme %d not supported for GLS. Too complicated. Using scheme 2\n", caching); //exit(-1); caching = CACHING_INDICES; }*/ if(algo == ALGO_TABU && caching == CACHING_GOOD_VARS){ printf("Cannot use caching scheme CACHING_GOOD_VARS with tabu search.\n"); printf("There, we also need to take worsening steps.\n"); exit(-1); } }
void WalksatAlgorithm::parse_parameters(int argc,char *argv[]) { int i; int temp; for (i=1;i < argc;i++) { if (strcmp(argv[i],"-seed") == 0){ scanone(argc,argv,++i,&temp); seed = (unsigned int)temp; } else if (strcmp(argv[i],"-out") == 0 && i<argc-1) strcpy(outfile, argv[++i]); else if (strcmp(argv[i],"-hist") == 0) printhist = TRUE; else if (strcmp(argv[i],"-status") == 0) status_flag = 1; else if (strcmp(argv[i],"-cutoff") == 0) scanonell(argc,argv,++i,&cutoff); else if (strcmp(argv[i],"-random") == 0) heuristic = RANDOM; else if (strcmp(argv[i],"-novelty") == 0){ heuristic = NOVELTY; makeflag = TRUE; } else if (strcmp(argv[i],"-rnovelty") == 0){ heuristic = RNOVELTY; makeflag = TRUE; } else if (strcmp(argv[i],"-novelty+") == 0){ heuristic = NOVELTY_PLUS; makeflag = TRUE; } else if (strcmp(argv[i],"-rnovelty+") == 0){ heuristic = RNOVELTY_PLUS; makeflag = TRUE; } else if (strcmp(argv[i],"-best") == 0) heuristic = BEST; else if (strcmp(argv[i],"-noise") == 0){ scanone(argc,argv,++i,&numerator); if (i < argc-1 && sscanf(argv[i+1],"%i",&temp)==1){ denominator = temp; i++; } } else if (strcmp(argv[i],"-wp") == 0){ scanone(argc,argv,++i,&wp_numerator); if (i < argc-1 && sscanf(argv[i+1],"%i",&temp)==1){ wp_denominator = temp; i++; } } else if (strcmp(argv[i],"-init") == 0 && i < argc-1) sscanf(argv[++i], " %s", initfile); else if (strcmp(argv[i],"-hamming") == 0 && i < argc-3){ sscanf(argv[++i], " %s", hamming_target_file); sscanf(argv[++i], " %s", hamming_data_file); sscanf(argv[++i], " %i", &hamming_sample_freq); hamming_flag = TRUE; numrun = 1; } else if (strcmp(argv[i],"-partial") == 0) initoptions = INIT_PARTIAL; else if (strcmp(argv[i],"-super") == 0) superlinear = TRUE; else if (strcmp(argv[i],"-tries") == 0 || strcmp(argv[i],"-restart") == 0) scanone(argc,argv,++i,&numrun); else if (strcmp(argv[i],"-target") == 0) scanone(argc,argv,++i,&target); else if (strcmp(argv[i],"-tail") == 0) scanone(argc,argv,++i,&tail); else if (strcmp(argv[i],"-sample") == 0) scanone(argc,argv,++i,&samplefreq); else if (strcmp(argv[i],"-tabu") == 0) { scanone(argc,argv,++i,&tabu_length); heuristic = TABU; } else if (strcmp(argv[i],"-low") == 0) printlow = TRUE; else if (strcmp(argv[i],"-sol") == 0) { printonlysol = TRUE; printlow = TRUE; } else if (strcmp(argv[i],"-solcnf") == 0) { printsolcnf = TRUE; if (numsol == NOVALUE) numsol = 1; } else if (strcmp(argv[i],"-bad") == 0) printfalse = TRUE; else if (strcmp(argv[i],"-numsol") == 0) scanone(argc,argv,++i,&numsol); else if (strcmp(argv[i],"-trace") == 0) scanone(argc,argv,++i,&printtrace); else if (strcmp(argv[i],"-assign") == 0){ scanone(argc,argv,++i,&printtrace); trace_assign = TRUE; } else { fprintf(stderr, "General parameters:\n"); fprintf(stderr, " -seed N -cutoff N -restart N\n"); fprintf(stderr, " -numsol N = stop after finding N solutions\n"); fprintf(stderr, " -super = use the Luby series for the cutoff values\n"); fprintf(stderr, " -init FILE = set vars not included in FILE to false\n"); fprintf(stderr, " -partial FILE = set vars not included in FILE randomly\n"); fprintf(stderr, " -status = return fail status if solution not found\n"); fprintf(stderr, " -target N = succeed if N or fewer clauses unsatisfied\n"); fprintf(stderr, "Heuristics:\n"); fprintf(stderr, " -random -best -tabu N -novelty -rnovelty\n"); fprintf(stderr, " -noise N or -noise N M (default M = 100)\n"); fprintf(stderr, " -novelty+ -rnovelty+\n"); fprintf(stderr, " -wp N or -wp N M (default M = 100) = cycle breaking for (r)novelty+\n"); fprintf(stderr, "Printing:\n"); fprintf(stderr, " -out FILE = print solution as a list of literals to FILE\n"); fprintf(stderr, " -trace N = print statistics every N flips\n"); fprintf(stderr, " -assign N = print assignments at flip N, 2N, ...\n"); fprintf(stderr, " -sol = print satisfying assignments to stdout\n"); fprintf(stderr, " -solcnf = print sat assign to stdout in DIMACS format, and exit\n"); fprintf(stderr, " -low = print lowest assignment each try\n"); fprintf(stderr, " -bad = print unsat clauses each try\n"); fprintf(stderr, " -hist = print histogram of tail\n"); fprintf(stderr, " -tail N = assume tail begins at nvars*N\n"); fprintf(stderr, " -sample N = sample noise level every N flips\n"); fprintf(stderr, " -hamming TARGET_FILE DATA_FILE SAMPLE_FREQUENCY\n"); exit(-1); } } base_cutoff = cutoff; if (numsol==NOVALUE || numsol>numrun) numsol = numrun; if (numerator==NOVALUE){ switch(heuristic) { case BEST: case NOVELTY: case RNOVELTY: case NOVELTY_PLUS: case RNOVELTY_PLUS: numerator = 50; break; default: numerator = 0; break; } } if (wp_numerator==NOVALUE){ switch(heuristic) { case NOVELTY_PLUS: case RNOVELTY_PLUS: wp_numerator = 1; break; default: wp_numerator = 0; break; } } }
int main(int argc,char *argv[]) { int i; /* loop counter */ int j; /* another loop counter */ int k; /* yet another loop counter */ char initfile[100] = { 0 }; int numrun = 10; int cutoff = 100000; int base_cutoff = 100000; int printonlysol = FALSE; int printsolcnf = FALSE; int printfalse = FALSE; int printlow = FALSE; int initoptions = FALSE; int superlinear = FALSE; int printtrace = FALSE; long int totalflip = 0; /* total number of flips in all tries so far */ long int totalsuccessflip = 0; /* total number of flips in all tries which succeeded so far */ int numtry = 0; /* total attempts at solutions */ int numsuccesstry = 0; /* total found solutions */ int numsol = 1; /* stop after this many tries succeeds */ int tochange; int seed; /* seed for random */ struct timeval tv; struct timezone tzp; double expertime; long flips_this_solution; long int lowbad; /* lowest number of bad clauses during try */ long int lowcost; /* lowest cost of bad clauses during try */ int targetcost = 0; /* the cost at which the program terminates*/ long x; long integer_sum_x = 0; double sum_x = 0.0; double sum_x_squared = 0.0; double mean_x; double second_moment_x; double variance_x; double std_dev_x; double std_error_mean_x; double seconds_per_flip; int r; int sum_r = 0; double sum_r_squared = 0.0; double mean_r; double variance_r; double std_dev_r; double std_error_mean_r; int worst_cost, computed_cost; gettimeofday(&tv,&tzp); seed = (( tv.tv_sec & 0177 ) * 1000000) + tv.tv_usec; heuristic = BEST; numerator = NOVALUE; denominator = 100; for (i=1;i < argc;i++) { if (strcmp(argv[i],"-withcost") == 0) costexpected = TRUE; else if (strcmp(argv[i],"-seed") == 0) scanone(argc,argv,++i,&seed); else if (strcmp(argv[i],"-targetcost") == 0) scanone(argc,argv,++i,&targetcost); else if (strcmp(argv[i],"-cutoff") == 0) scanone(argc,argv,++i,&cutoff); else if (strcmp(argv[i],"-random") == 0) heuristic = RANDOM; else if (strcmp(argv[i],"-productsum") == 0) heuristic = PRODUCTSUM; else if (strcmp(argv[i],"-reciprocal") == 0) heuristic = RECIPROCAL; else if (strcmp(argv[i],"-additive") == 0) heuristic = ADDITIVE; else if (strcmp(argv[i],"-exponential") == 0) heuristic = EXPONENTIAL; else if (strcmp(argv[i],"-best") == 0) heuristic = BEST; else if (strcmp(argv[i],"-noise") == 0) { scanone(argc,argv,++i,&numerator); scanone(argc,argv,++i,&denominator); } else if (strcmp(argv[i],"-init") == 0 && i < argc-1) sscanf(argv[++i], " %s", initfile); else if (strcmp(argv[i],"-partial") == 0) initoptions = INIT_PARTIAL; else if (strcmp(argv[i],"-super") == 0) superlinear = TRUE; else if (strcmp(argv[i],"-tries") == 0) scanone(argc,argv,++i,&numrun); else if (strcmp(argv[i],"-tabu") == 0) { scanone(argc,argv,++i,&tabu_length); heuristic = TABU; } else if (strcmp(argv[i],"-low") == 0) printlow = TRUE; else if (strcmp(argv[i],"-sol") == 0) { printonlysol = TRUE; printlow = TRUE; } else if (strcmp(argv[i],"-bad") == 0) printfalse = TRUE; else if (strcmp(argv[i],"-hard") == 0) hard = TRUE; else if (strcmp(argv[i],"-numsol") == 0) scanone(argc,argv,++i,&numsol); else if (strcmp(argv[i],"-trace") == 0) scanone(argc,argv,++i,&printtrace); else { fprintf(stderr, "Bad argument %s\n", argv[i]); fprintf(stderr, "General parameters:\n"); fprintf(stderr, " -seed N -cutoff N -tries N\n"); fprintf(stderr, " -numsol N = stop after finding N solutions\n"); fprintf(stderr, " -init FILE = set vars not included in FILE to false\n"); fprintf(stderr, " -partial FILE = set vars not included in FILE randomly\n"); fprintf(stderr, " -withcost = input is a set of weighted clauses\n"); fprintf(stderr, " -targetcost N = find assignments of cost <= N (MAXSAT)\n"); fprintf(stderr, " -hard = never break a highest-cost clause\n"); fprintf(stderr, "Heuristics:\n"); fprintf(stderr, " -noise N M -best -super -tabu N\n"); fprintf(stderr, " -productsum -reciprocal -additive -exponential\n"); fprintf(stderr, "Printing:\n"); fprintf(stderr, " -trace N = print statistics every N flips\n"); fprintf(stderr, " -sol = print assignments where cost < target\n"); fprintf(stderr, " -low = print lowest assignment each try\n"); fprintf(stderr, " -bad = print unsat clauses each try\n"); fprintf(stderr, " -solcnf = print sat assign in cnf format, and exit\n"); exit(-1); } } base_cutoff = cutoff; if (numerator==NOVALUE){ if (heuristic==BEST) numerator = 50; else numerator = 0; } srandom(seed); #ifdef Huge printf("maxwalksat version 20 (Huge)\n"); #else printf("maxwalksat version 20\n"); #endif printf("seed = %i\n",seed); printf("cutoff = %i\n",cutoff); printf("tries = %i\n",numrun); printf("numsol = %i\n",numsol); printf("targetcost = %i\n",targetcost); printf("heuristic = "); switch(heuristic) { case RANDOM: printf("random"); break; case PRODUCTSUM: printf("productsum"); break; case RECIPROCAL: printf("reciprocal"); break; case ADDITIVE: printf("additive"); break; case BEST: printf("best"); break; case EXPONENTIAL: printf("exponential"); break; case TABU: printf("tabu %d", tabu_length); break; } if (numerator>0){ printf(", noise %d / %d", numerator, denominator); } if (superlinear) printf(", super"); if (printtrace) printf(", trace %d", printtrace); if (initfile[0]){ printf(", init %s", initfile); if (initoptions == INIT_PARTIAL) printf(", partial"); } printf("\n"); initprob(); if (costexpected) printf("clauses contain explicit costs\n"); else printf("clauses all assigned default cost of 1\n"); printf("numatom = %i, numclause = %i, numliterals = %i\n",numatom,numclause,numliterals); printf("wff read in\n"); printf(" average average mean standard\n"); printf(" lowest worst number when over flips error\n"); printf(" cost clause #unsat #flips model success all until std of\n"); printf(" this try this try this try this try found rate tries assign dev mean\n"); signal(SIGINT, (void *) handle_interrupt); abort_flag = FALSE; numnullflip = 0; (void) elapsed_seconds(); x = 0; r = 0; lowcost = BIG; for(k = 0;k < numrun;k++) { init(initfile, initoptions); lowbad = numfalse; lowcost = costofnumfalse; save_low_assign(); numflip = 0; if (superlinear) cutoff = base_cutoff * super(r+1); while((numflip < cutoff) && (costofnumfalse > targetcost)) { if (printtrace && (numflip % printtrace == 0)){ printf("%10i %10i%10li\n", costofnumfalse,numfalse,numflip); fflush(stdout); } numflip++; if ((eqhighest) && (highestcost!=1)) {/* fprintf(stderr, "number of highest %i\n", numhighest);*/ fix(selecthigh(1+random()%numhighest)); } else fix(false[random()%numfalse]); if (costofnumfalse < lowcost) { lowcost = costofnumfalse; lowbad = numfalse; save_low_assign(); } } numtry++; totalflip += numflip; x += numflip; r ++; if(costofnumfalse<=targetcost) { numsuccesstry++; totalsuccessflip += numflip; integer_sum_x += x; sum_x = (double) integer_sum_x; sum_x_squared += ((double)x)*((double)x); mean_x = sum_x / numsuccesstry; if (numsuccesstry > 1){ second_moment_x = sum_x_squared / numsuccesstry; variance_x = second_moment_x - (mean_x * mean_x); /* Adjustment for small small sample size */ variance_x = (variance_x * numsuccesstry)/(numsuccesstry - 1); std_dev_x = sqrt(variance_x); std_error_mean_x = std_dev_x / sqrt((double)numsuccesstry); } sum_r += r; mean_r = ((double)sum_r)/numsuccesstry; sum_r_squared += ((double)r)*((double)r); x = 0; r = 0; } countlowunsatcost(&computed_cost, &worst_cost); if(lowcost != computed_cost) { fprintf(stderr, "Program error, verification of assignment cost fails!\n"); exit(-1); } if(numsuccesstry == 0) printf("%10i%10i%10i%10li * 0 * * * *\n", lowcost,worst_cost,lowbad,numflip); else if (numsuccesstry == 1) printf("%10i%10i%10i%10li%10li%10i%10li %10.1f * *\n", lowcost,worst_cost,lowbad,numflip,totalsuccessflip/numsuccesstry, (numsuccesstry*100)/numtry,totalflip/numsuccesstry, mean_x); else printf("%10i%10i%10i%10li%10li%10i%10li %10.1f %10.1f %10.1f\n", lowcost,worst_cost,lowbad,numflip,totalsuccessflip/numsuccesstry, (numsuccesstry*100)/numtry,totalflip/numsuccesstry, mean_x, std_dev_x, std_error_mean_x); if (numfalse>0 && printfalse) print_false_clauses_cost(lowbad); if (printlow && (!printonlysol || costofnumfalse<=targetcost)) print_low_assign(lowcost); if (numsuccesstry >= numsol) break; if (abort_flag) break; fflush(stdout); } expertime = elapsed_seconds(); seconds_per_flip = expertime / totalflip; printf("\ntotal elapsed seconds = %f\n", expertime); printf("average flips per second = %d\n", (long)(totalflip/expertime)); if (heuristic == TABU) printf("proportion null flips = %f\n", ((double)numnullflip)/totalflip); printf("number of solutions found = %d\n", numsuccesstry); if (numsuccesstry > 0) { printf("mean flips until assign = %f\n", mean_x); if (numsuccesstry>1){ printf(" variance = %f\n", variance_x); printf(" standard deviation = %f\n", std_dev_x); printf(" standard error of mean = %f\n", std_error_mean_x); } printf("mean seconds until assign = %f\n", mean_x * seconds_per_flip); if (numsuccesstry>1){ printf(" variance = %f\n", variance_x * seconds_per_flip * seconds_per_flip); printf(" standard deviation = %f\n", std_dev_x * seconds_per_flip); printf(" standard error of mean = %f\n", std_error_mean_x * seconds_per_flip); } printf("mean restarts until assign = %f\n", mean_r); if (numsuccesstry>1){ variance_r = (sum_r_squared / numsuccesstry) - (mean_r * mean_r); variance_r = (variance_r * numsuccesstry)/(numsuccesstry - 1); std_dev_r = sqrt(variance_r); std_error_mean_r = std_dev_r / sqrt((double)numsuccesstry); printf(" variance = %f\n", variance_r); printf(" standard deviation = %f\n", std_dev_r); printf(" standard error of mean = %f\n", std_error_mean_r); } } if (numsuccesstry > 0) { printf("ASSIGNMENT ACHIEVING TARGET %i FOUND\n", targetcost); if(printsolcnf == TRUE) for(i = 1;i < numatom+1;i++) printf("v %i\n", atom[i] == 1 ? i : -i); } else printf("ASSIGNMENT NOT FOUND\n"); return 0; }