示例#1
0
double read_double(char *prompt, char *unit, double def,
                   double min, double max) {

  if (min > max) {
    double tmp = min;
    min = max;
    max = tmp;
  }

  if (def < min) def = min;
  if (def > max) def = max;

  double doppio;
  short esito;
  short failed = 0;

  for (int timeout = 0; timeout <= 5; timeout++) {
    fprintf(FPTR, "%s ", prompt);
    if (failed) fprintf(FPTR, "(%.4f::%.4f) ", min, max);
    fprintf(FPTR, "[%.4f%s] > ", def, unit);
    esito = scandouble(&doppio);
    switch (esito) {
      case EASYIO_DEFAULT :
        return (def);
      case EASYIO_OKAY :
        if ((doppio >= min) && (doppio <= max))
          return (doppio);
      case EASYIO_ERROR :
        beep();
        failed = 1;
        break;
    }
  }
  fprintf(FPTR, "\n FATAL ERROR: too many wrong attempts ");
  fprintf(FPTR, "in read_double() \n");
  exit(-1);
  return (false);        // not used: just to be nice with the compiler
}
示例#2
0
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);
	}
}