Ejemplo n.º 1
0
/**
 * pip_solve_osl function :
 * A pip_solve with osl_relation_p instead of PipMatrix
 */
PipQuast* pip_solve_osl(osl_relation_p inequnk, osl_relation_p ineqpar,
                        int Bg, PipOptions *options) {
  PipMatrix *pip_unk  = pip_relation2matrix(inequnk);
  PipMatrix *pip_par  = pip_relation2matrix(ineqpar);
  PipQuast  *solution = pip_solve(pip_unk, pip_par, Bg, options);
  if (pip_unk) pip_matrix_free(pip_unk);
  if (pip_par) pip_matrix_free(pip_par);
  return solution;
}
Ejemplo n.º 2
0
int main(int argc, const char **argv)
{ int bignum ;
  PipMatrix  * domain, * context  ;
  PipQuast   * solution ;
  PipOptions * options ;
  int verbose = 0;

  while (argc > 1) {
    if (strncmp(argv[1], "-v", 2) == 0) {
      const char *v = argv[1]+2;
      ++verbose;
      while (*v++ == 'v')
	++verbose;
    } else
      break;
    ++argv;
    --argc;
  }
  
  printf("[PIP2-like future input] Please enter:\n- the context matrix,\n") ;
  context = pip_matrix_read(stdin) ;
  pip_matrix_print(stdout,context) ;

  printf("- the bignum column (start at 0, -1 if no bignum),\n") ;
  fscanf(stdin," %d",&bignum) ;
  printf("%d\n",bignum) ;

  printf("- the constraint matrix.\n") ;
  domain = pip_matrix_read(stdin) ;
  pip_matrix_print(stdout,domain) ;
  printf("\n") ;
  
  if (isatty(0))
    printf("- options (EOF to stop).\n") ;
  options = options_read(stdin);
  options->Verbose = verbose;
  if (isatty(0))
    pip_options_print(stdout, options);

  /* The bignum in PIP1 is fixed on the constraint matrix, here is
   * the translation.
   */
  if (bignum > 0)
  bignum += domain->NbColumns - context->NbColumns ;
  
  solution = pip_solve(domain,context,bignum,options) ;

  pip_options_free(options) ;
  pip_matrix_free(domain) ;
  pip_matrix_free(context) ;

  pip_quast_print(stdout,solution,0) ;

  pip_quast_free(solution) ;
  return 0 ;
}
Ejemplo n.º 3
0
enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize,
				      isl_int *f, isl_int denom, isl_int *opt,
				      isl_int *opt_denom,
				      struct isl_vec **vec)
{
	enum isl_lp_result res = isl_lp_ok;
	PipMatrix	*domain = NULL;
	PipOptions	*options;
	PipQuast   	*sol;
	unsigned	 total;

	total = isl_basic_map_total_dim(bmap);
	domain = isl_basic_map_to_pip(bmap, 0, 1, 0);
	if (!domain)
		goto error;
	entier_set_si(domain->p[0][1], -1);
	isl_int_set(domain->p[0][domain->NbColumns - 1], f[0]);
	isl_seq_cpy_to_pip(domain->p[0]+2, f+1, total);

	options = pip_options_init();
	if (!options)
		goto error;
	options->Urs_unknowns = -1;
	options->Maximize = maximize;
	options->Nq = 0;
	sol = pip_solve(domain, NULL, -1, options);
	pip_options_free(options);
	if (!sol)
		goto error;

	if (vec) {
		isl_ctx *ctx = isl_basic_map_get_ctx(bmap);
		*vec = isl_vec_alloc(ctx, 1 + total);
	}
	if (vec && !*vec)
		res = isl_lp_error;
	else if (!sol->list)
		res = isl_lp_empty;
	else if (entier_zero_p(sol->list->vector->the_deno[0]))
		res = isl_lp_unbounded;
	else
		copy_solution(*vec, maximize, opt, opt_denom, sol);
	pip_matrix_free(domain);
	pip_quast_free(sol);
	return res;
error:
	if (domain)
		pip_matrix_free(domain);
	return isl_lp_error;
}