paccs.h 1.7 KB
/* Types */

typedef void *fd_int;
typedef void *fd_constraint;

/* Constants */

#define FD_OK 0
#define FD_NOSOLUTION 1

/* Functions */

void fd_init(int *argc, char **argv[]);
void fd_end(void);
int fd_solve(void);

fd_int fd_new(int min, int max);

void fd_label(fd_int vars[], int nvars);
int fd_var_single(fd_int var, int *val);
int fd_var_value(fd_int var);
void fd_print(fd_int var);
void fd_println(fd_int var);

/* Constraints */

/* Arithmetic constraints */

fd_constraint fd_eq(fd_int x, fd_int y);
fd_constraint fd_ne(fd_int x, fd_int y);
fd_constraint fd_lt(fd_int x, fd_int y);
fd_constraint fd_le(fd_int x, fd_int y);
fd_constraint fd_gt(fd_int x, fd_int y);
fd_constraint fd_ge(fd_int x, fd_int y);
fd_constraint fd_minus_eq(fd_int x, fd_int y, int k);
fd_constraint fd_minus_ne(fd_int x, fd_int y, int k);
fd_constraint fd_var_eq_minus(fd_int x, fd_int y, fd_int z);
fd_constraint fd_var_eq_times(fd_int x, fd_int y, fd_int z);

/* Global constraints */

fd_constraint fd_all_different(fd_int X[], int n);

fd_constraint fd_element(fd_int X[], int n, fd_int y, int k);
fd_constraint fd_element_var(fd_int X[], int n, fd_int y, fd_int z);

fd_constraint fd_sum(fd_int X[], int n, int k);
fd_constraint fd_sum2(fd_int X[], int n, fd_int y);

fd_constraint fd_sum_prod(fd_int X[], fd_int Y[], int n, int k);

fd_constraint fd_poly_eq(int C[], fd_int Y[], int n, fd_int z);
fd_constraint fd_knapsack2(fd_int X[], fd_int Y[], int n, fd_int z);

fd_constraint fd_exactly(fd_int X[], int n, int c, int k);
fd_constraint fd_exactly_var(fd_int X[], int n, fd_int y, int k);
fd_constraint fd_exactly_vars(fd_int X[], int n, fd_int y, fd_int z);

/* Optimisation */

fd_constraint fd_min(fd_int x);
fd_constraint fd_max(fd_int x);