#include #include #include #include #include #define STOP 1 #define NO_STOP 0 #define YES 1 #define NO 0 #define BOOLEAN char // maximum numbers #define MAX_INT 32767 #define MAX_LONG 2147483647 // minimun numbers #define MIN_INT -MAX_INT #define MIN_LONG -MAX_LONG // types of matrices #define MAT_DOUBLE double ** #define MAT_FLOAT float ** #define MAT_INT int ** #define MAT_LONG long int** // types of vectors #define VECTOR_DOUBLE double * #define VECTOR_FLOAT float * #define VECTOR_INT int * #define VECTOR_LONG long int * // types of matrices definitions #define DIM_MAT_DOUBLE(x,y) (double **) dyn_mat(x,y,sizeof(double)) #define DIM_MAT_FLOAT(x,y) (float **) dyn_mat(x,y,sizeof(float)) #define DIM_MAT_INT(x,y) (int **) dyn_mat(x,y,sizeof(int)) #define DIM_MAT_LONG(x,y) (long int **) dyn_mat(x,y,sizeof(long int)) #define FREE_MAT_DOUBLE(x,y) free_mat_double(x,y) #define FREE_MAT_FLOAT(x,y) free_mat_float(x,y) #define FREE_MAT_INT(x,y) free_mat_int(x,y) #define FREE_MAT_LONG(x,y) free_mat_long(x,y) // types of vectors definitions #define DIM_VECTOR_DOUBLE(x) newDVector(x) #define DIM_VECTOR_FLOAT(x) newFVector(x) #define DIM_VECTOR_INT(x) newIVector(x) #define DIM_VECTOR_LONG(x) newLVector(x) // types of variable matrices definitions #define DIM_VMAT_DOUBLE(x,y) (double **) dyn_var_mat(x,y,sizeof(double)) #define DIM_VMAT_FLOAT(x,y) (float **) dyn_var_mat(x,y,sizeof(float)) #define DIM_VMAT_INT(x,y) (int **) dyn_var_mat(x,y,sizeof(int)) #define DIM_VMAT_LONG(x,y) (long int **) dyn_var_mat(x,y,sizeof(long int)) // DEFINITION OF GENERIC FUNCTIONS FOR MAT TYPES #define free_matrix(mat, rows) _Generic( (mat), MAT_DOUBLE: free_mat_double, MAT_FLOAT: free_mat_float, MAT_INT: free_mat_int, MAT_LONG: free_mat_long) (mat, rows) #define print_matrix(mat, rows, cols) _Generic( (mat), MAT_INT: print_int_matrix, MAT_LONG: print_long_matrix )(mat, rows, cols) #define setval_matrix(mat, rows, cols, value) _Generic( (mat), MAT_DOUBLE: setval_Dmatrix, MAT_FLOAT: setval_Fmatrix, MAT_INT: setval_Imatrix, MAT_LONG: setval_Lmatrix) (mat, rows, cols, value) // DEFINITION OF GENERIC FUNCTIONS FOR VECTOR TYPES // for compatibility until the different extract types are defined #define extract_vector(vec, length, pos) extractIVector(vec, length, pos) #define free_vector(vector) free(vector); #define insert_vector(vector,length, val, pos) _Generic((vector), int*: insertIVector, double*: insertDVector, VECTOR_FLOAT: insertFVector, long int*: insertLVector)(vector,length, val, pos) #define print_vector(vector,length) _Generic((vector), int*: print_int_vector, double*: print_double_vector, VECTOR_FLOAT: print_float_vector, long int*: print_long_vector)(vector,length) /** \brief search_vector() \details Search a value in a vector of any type. \param vector A vector of any type \param rows No. of rows of the vector. \param value Value that is searched. \return The position of \b vector where \b value is found (starting with zero). If \b value is not found, it returns -1. */ #define search_vector(vector,length, val) _Generic((vector), int*: searchInIVector, double*: searchInDVector, VECTOR_FLOAT: searchInFVector, long int*: searchInLVector)(vector,length, val) /** \brief sort_vector() \details Sort a vector of any type according to a given criterion. \param vector A vector of any type \param index Index of \a vector (type VECTOR_INT) \param rows No. of rows of the vector. \param criterion Sorting criterion:'A' ascending (non-descending), 'D' descending (non-ascending) Both the \b vector and the \b index have to be dimensioned, and \b vector must have some content (to make some sense). \return In \b vector, it returns the vector sorted according to the criterion specified in \b criterion In \b index, it returns the order of the original vector sorted according to the criterion specified in \b criterion \warning Important! The order of \b vector is modified, so it is advisable to make a copy first if the original content has to be kept. \code being vector={50,76,18,62,81}, sort_vector(vector,order, 5,'A') returns vector={18,50,62,76,81} and index={2,0,3,1,4} being vector={50,76,18,62,81}, sort_Vector(vector,order, 5,'D') returns vector={81,76,62,50,18} and index={4,1,3,0,2} \endcode */ #define sort_vector(vector, index, length, criterion) _Generic((vector), VECTOR_DOUBLE: sortDVector, VECTOR_FLOAT: sortFVector, VECTOR_INT: sortIVector, VECTOR_LONG: sortLVector)(vector, index, length, criterion) #define setval_vector(vector, length, value) _Generic( (vector), VECTOR_DOUBLE: setval_Dvector, VECTOR_FLOAT: setval_Fvector, VECTOR_INT: setval_Ivector, VECTOR_LONG: setval_Lvector) (vector, length, value) #define copy_vector(vector_origen, vector_destino, length) _Generic( (vector_origen), VECTOR_DOUBLE: copyDVector, VECTOR_FLOAT: copyFVector, VECTOR_INT: copyIVector, VECTOR_LONG: copyLVector) (vector_origen, vector_destino, length) // DEFINITION OF GENERIC MAX AND MIN #define Max(a,b) _Generic((a), double: dMax, float: fMax, int: iMax, long: lMax)(a,b) #define Min(a,b) _Generic((a), double: dMin, float: fMin, int: iMin, long: lMin)(a,b) // DEFINITION OF GENERIC OBJECTIVE FUNCTIONS // makespan generic function #define Cmax(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Cmax, PARALLEL_MACHINES: Pm_Rj_Cmax, RELATED_MACHINES: Qm_Rj_Cmax, SINGLE_MACHINE: S1_Rj_Cmax, UNRELATED_MACHINES: Rm_Rj_Cmax )(b, a) // max of weighted completion time #define max_WjCj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_Cmax, PARALLEL_MACHINES: Pm_Rj_Wj_Cmax, RELATED_MACHINES: Qm_Rj_Wj_Cmax, SINGLE_MACHINE: S1_Rj_Wj_Cmax, UNRELATED_MACHINES: Rm_Rj_Wj_Cmax )(b, a) // sum of completion time generic function #define SumCj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_SumCj, PARALLEL_MACHINES: Pm_Rj_SumCj, RELATED_MACHINES: Qm_Rj_SumCj, SINGLE_MACHINE: S1_Rj_SumCj, UNRELATED_MACHINES: Rm_Rj_SumCj )(b, a) // sum of weighted completion time generic function #define SumWjCj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_SumCj, PARALLEL_MACHINES: Pm_Rj_Wj_SumCj, RELATED_MACHINES: Qm_Rj_Wj_SumCj, SINGLE_MACHINE: S1_Rj_Wj_SumCj, UNRELATED_MACHINES: Rm_Rj_Wj_SumCj )(b, a) // max of flowtime #define Fmax(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Fmax, PARALLEL_MACHINES: Pm_Rj_Fmax, RELATED_MACHINES: Qm_Rj_Fmax, SINGLE_MACHINE: S1_Rj_Fmax, UNRELATED_MACHINES: Rm_Rj_Fmax )(b, a) // max of weighted flowtime #define max_WjFj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_Fmax, PARALLEL_MACHINES: Pm_Rj_Wj_Fmax, RELATED_MACHINES: Qm_Rj_Wj_Fmax, SINGLE_MACHINE: S1_Rj_Wj_Fmax, UNRELATED_MACHINES: Rm_Rj_Wj_Fmax)(b, a) // sum of flowtime time generic function #define SumFj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_SumFj, PARALLEL_MACHINES: Pm_Rj_SumFj, RELATED_MACHINES: Qm_Rj_SumFj, SINGLE_MACHINE: S1_Rj_SumFj, UNRELATED_MACHINES: Rm_Rj_SumFj )(b, a) // sum of weighted flowtime generic function #define SumWjFj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_SumFj, PARALLEL_MACHINES: Pm_Rj_Wj_SumFj, RELATED_MACHINES: Qm_Rj_Wj_SumFj, SINGLE_MACHINE: S1_Rj_Wj_SumFj, UNRELATED_MACHINES: Rm_Rj_Wj_SumFj)(b, a) // maximum earliness #define Emax(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Emax, PARALLEL_MACHINES: Pm_Rj_Emax, RELATED_MACHINES: Qm_Rj_Emax, SINGLE_MACHINE: S1_Rj_Emax, UNRELATED_MACHINES: Rm_Rj_Emax )(b, a) // maximum weighted earliness #define max_WjEj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_Emax, PARALLEL_MACHINES: Pm_Rj_Wj_Emax, RELATED_MACHINES: Qm_Rj_Wj_Emax, SINGLE_MACHINE: S1_Rj_Wj_Emax, UNRELATED_MACHINES: Rm_Rj_Wj_Emax )(b, a) // sum of earliness generic function #define SumEj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_SumEj, PARALLEL_MACHINES: Pm_Rj_SumEj, RELATED_MACHINES: Qm_Rj_SumEj, SINGLE_MACHINE: S1_Rj_SumEj, UNRELATED_MACHINES: Rm_Rj_SumEj )(b, a) // sum of weighted earliness generic function #define SumWjEj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_SumEj, PARALLEL_MACHINES: Pm_Rj_Wj_SumEj, RELATED_MACHINES: Qm_Rj_Wj_SumEj, SINGLE_MACHINE: S1_Rj_Wj_SumEj, UNRELATED_MACHINES: Rm_Rj_Wj_SumEj )(b, a) // max of lateness #define Lmax(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Lmax, PARALLEL_MACHINES: Pm_Rj_Lmax, RELATED_MACHINES: Qm_Rj_Lmax, SINGLE_MACHINE: S1_Rj_Lmax, UNRELATED_MACHINES: Rm_Rj_Lmax )(b, a) // max of weighted lateness #define max_WjLj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_Lmax, PARALLEL_MACHINES: Pm_Rj_Wj_Lmax, RELATED_MACHINES: Qm_Rj_Wj_Lmax, SINGLE_MACHINE: S1_Rj_Wj_Lmax, UNRELATED_MACHINES: Rm_Rj_Wj_Lmax )(b, a) // sum of lateness generic function #define SumLj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_SumLj, PARALLEL_MACHINES: Pm_Rj_SumLj, RELATED_MACHINES: Qm_Rj_SumLj, SINGLE_MACHINE: S1_Rj_SumLj, UNRELATED_MACHINES: Rm_Rj_SumLj )(b, a) // sum of weighted lateness generic function #define SumWjLj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_SumLj, PARALLEL_MACHINES: Pm_Rj_Wj_SumLj, RELATED_MACHINES: Qm_Rj_Wj_SumLj, SINGLE_MACHINE: S1_Rj_Wj_SumLj, UNRELATED_MACHINES: Rm_Rj_Wj_SumLj )(b, a) // maximum tardiness #define Tmax(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Tmax, PARALLEL_MACHINES: Pm_Rj_Tmax, RELATED_MACHINES: Qm_Rj_Tmax, SINGLE_MACHINE: S1_Rj_Tmax, UNRELATED_MACHINES: Rm_Rj_Tmax )(b, a) // max of weighted tardiness #define max_WjTj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_Tmax, PARALLEL_MACHINES: Pm_Rj_Wj_Tmax, RELATED_MACHINES: Qm_Rj_Wj_Tmax, SINGLE_MACHINE: S1_Rj_Wj_Tmax, UNRELATED_MACHINES: Rm_Rj_Wj_Tmax )(b, a) // sum of tardiness generic function #define SumTj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_SumTj, PARALLEL_MACHINES: Pm_Rj_SumTj, RELATED_MACHINES: Qm_Rj_SumTj, SINGLE_MACHINE: S1_Rj_SumTj, UNRELATED_MACHINES: Rm_Rj_SumTj )(b, a) // sum of weighted tardiness generic function #define SumWjTj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_SumTj, PARALLEL_MACHINES: Pm_Rj_Wj_SumTj, RELATED_MACHINES: Qm_Rj_Wj_SumTj, SINGLE_MACHINE: S1_Rj_Wj_SumTj, UNRELATED_MACHINES: Rm_Rj_Wj_SumTj )(b, a) // sum of number of tardy jobs generic function #define SumUj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_SumUj, PARALLEL_MACHINES: Pm_Rj_SumUj, RELATED_MACHINES: Qm_Rj_SumUj, SINGLE_MACHINE: S1_Rj_SumUj, UNRELATED_MACHINES: Rm_Rj_SumUj )(b, a) // sum of weighted number of tardy jobs generic function #define SumWjUj(a,b) _Generic((a), FLOWSHOP: Fm_Prmu_Rj_Wj_SumUj, PARALLEL_MACHINES: Pm_Rj_Wj_SumUj, RELATED_MACHINES: Qm_Rj_Wj_SumUj, SINGLE_MACHINE: S1_Rj_Wj_SumUj, UNRELATED_MACHINES: Rm_Rj_Wj_SumUj )(b, a) // STRUCTS FOR LAYOUTS typedef struct FLOWSHOP { int jobs; int machines; MAT_INT pt; VECTOR_LONG dd; VECTOR_DOUBLE w; VECTOR_INT r; } FLOWSHOP; typedef struct PARALLEL_MACHINES { int jobs; int machines; VECTOR_INT pt; VECTOR_LONG dd; VECTOR_DOUBLE w; VECTOR_INT r; } PARALLEL_MACHINES; typedef struct RELATED_MACHINES { int jobs; int machines; VECTOR_INT pt; VECTOR_INT v; // Velocity of each machine (type #VECTOR_INT), e.g. v[i] is the (relative) velocity of machine i. //The processing time of job j on machine i is given by p[j]/v[i]. If this quotient is not an integer, it will be rounded to the closest integer. VECTOR_LONG dd; VECTOR_DOUBLE w; VECTOR_INT r; } RELATED_MACHINES; typedef struct SINGLE_MACHINE { int jobs; int machines; // for compatibility to use the generic functions we will set it to 1. MAT_INT pt; // for compatibility, so the functions for flowshop can be used. VECTOR_LONG dd; VECTOR_DOUBLE w; VECTOR_INT r; } SINGLE_MACHINE; typedef struct UNRELATED_MACHINES { int jobs; int machines; MAT_INT pt; VECTOR_LONG dd; VECTOR_DOUBLE w; VECTOR_INT r; } UNRELATED_MACHINES; void API(int *original, int *neighbor, int len); void brqsortDVectorA(double *vector, int *index, int left, int right); void brqsortFVectorA(float *vector, int *index, int left, int right); void brqsortIVectorA(int *vector, int *index, int left, int right); void brqsortLVectorA(long int *vector, int *index, int left, int right); void brqsortDVectorD(double *vector, int *index, int left, int right); void brqsortFVectorD(float *vector, int *index, int left, int right); void brqsortIVectorD(int *vector, int *index, int left, int right); void brqsortLVectorD(long int *vector, int *index, int left, int right); void copyDVector(VECTOR_DOUBLE origen, VECTOR_DOUBLE destino, int length); void copyFVector(float *origen, float *destino, int numero); void copyIVector(int *src, int *destination, int length); void copyLVector(long int *src, long int *destination, int length); void copyrowDmatrix(MAT_DOUBLE matrix, VECTOR_DOUBLE vector, int row, int cols); void copyrowFmatrix(MAT_FLOAT matrix, VECTOR_FLOAT vector, int row, int cols); void copyrowImatrix(MAT_INT matrix, VECTOR_INT vector, int row, int cols); void copyrowLmatrix(MAT_LONG matrix, VECTOR_LONG vector, int row, int cols); int count_chars(const char* string, char ch); void error(int code_error, int stop, char *add_info); int extractIVector(VECTOR_INT vector, int len, int pos); void extractIMatrix(MAT_INT mat, int n_rows, int n_col, int pos_row, int pos_col); void ** dyn_mat(int rows,int cols,int type); void ** dyn_var_mat(int rows,VECTOR_INT vcol,int size); double dMax(double a, double b); double dMin(double a, double b); float fMax(float a, float b); float fMin(float a, float b); int findFirstDiff(int *vector, int length, int number); long int Fm_Prmu_Cmax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt); long int Fm_Prmu_Emax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Fm_Prmu_Lmax(VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Fm_Prmu_Rj_Cmax( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_Emax( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_Fmax( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_Lmax( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_SumCj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_SumEj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_SumFj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_SumLj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_SumTj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_SumUj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_Rj_Tmax( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_SumCj( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_SumFj( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_SumEj( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_SumLj( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_SumTj( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_Tmax( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_Lmax( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_Cmax( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_Fmax( VECTOR_INT seq, FLOWSHOP instance); double Fm_Prmu_Rj_Wj_Emax( VECTOR_INT seq,FLOWSHOP instance); double Fm_Prmu_Rj_Wj_SumUj( VECTOR_INT seq, FLOWSHOP instance); long int Fm_Prmu_SumCj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt); long int Fm_Prmu_SumEj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Fm_Prmu_SumLj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Fm_Prmu_SumTj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Fm_Prmu_SumUj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Fm_Prmu_Tmax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); void free_mat_double(double **m, int rows); void free_mat_float(float **m, int rows); void free_mat_int(int **m, int rows); void free_mat_long(long int **m, int rows); void GPI(int *original, int *neighbor, int len); int iMax(int a, int b); int iMin(int a, int b); void insertDVector(double *vector, int length, double value, int pos); void insertFVector(float *vector, int length, float value, int pos); void insertIVector(int *vector, int length, int value, int pos); void insertLVector(long int *vector, int length, long int value, int pos); long int lMax(long int a, long int b); long int lMin(long int a, long int b); FLOWSHOP load_FLOWSHOP(char *filename); PARALLEL_MACHINES load_PARALLEL_MACHINES(char *filename); RELATED_MACHINES load_RELATED_MACHINES(char *filename); SINGLE_MACHINE load_SINGLE_MACHINE(char *filename); UNRELATED_MACHINES load_UNRELATED_MACHINES(char *filename); void loadJSData(char *filename,int *jobs,int *machs,MAT_INT *pt, MAT_INT *rm,int print_flag); void loadJS_DD_Data(char *filename, int descr, int *jobs, int *machs, MAT_INT *pt, MAT_INT *rm, VECTOR_LONG *dd, int print_flag); void loadJS_DD_Data_Ruiz(char *filename, int descr, int *jobs, int *machs, MAT_INT *pt, MAT_INT *rm, VECTOR_LONG *dd, int print_flag); void loadJS_MM_Data(char *filename,int *jobs,int *machs,MAT_INT *pt,MAT_INT *rm,VECTOR_INT *am,int print_flag); MAT_INT loadPTimes_mrows(char *filename,int *jobs, int *machs, int print_flag); MAT_INT loadPTimes_mrowsDD(char *filename, int *jobs, int *machs, VECTOR_LONG *dd, int print_flag); MAT_INT loadPTimes_nrows(char *filename,int *jobs, int *machs, int print_flag); MAT_INT loadPTimes_nrowsDD(char *filename, int *jobs, int *machs, VECTOR_LONG *dd, int print_flag); long int lround(double number); double *newDVector(int len); float *newFVector(int len); int *newIVector(int len); long int *newLVector(int len); void pasterowImatrix(MAT_INT matrix, VECTOR_INT vector, int row, int cols); long int Pm_Cmax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt); long int Pm_Emax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); long int Pm_Lmax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); long int Pm_Rj_Cmax( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_Emax( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_Fmax( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_Lmax( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_SumCj(VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_SumEj( VECTOR_INT seq,PARALLEL_MACHINES instance); long int Pm_Rj_SumFj( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_SumLj( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_SumTj( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_SumUj(VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_Rj_Tmax( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_Cmax( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_Emax( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_Fmax( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_Lmax( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_SumCj(VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_SumEj( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_SumFj( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_SumLj( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_SumTj( VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_SumUj(VECTOR_INT seq, PARALLEL_MACHINES instance); double Pm_Rj_Wj_Tmax( VECTOR_INT seq, PARALLEL_MACHINES instance); long int Pm_SumCj(VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt); long int Pm_SumEj(VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); long int Pm_SumLj(VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); long int Pm_SumTj(VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); long int Pm_SumUj(VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); long int Pm_Tmax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_LONG dd); void print_double_matrix(MAT_DOUBLE matrix, int rows, int cols); void print_double_vector(VECTOR_DOUBLE vector, int len); void print_int_matrix(MAT_INT matrix, int rows, int cols); void print_int_vector(VECTOR_INT vector, int len); void print_float_matrix(MAT_FLOAT matrix, int rows, int cols); void print_float_vector(VECTOR_FLOAT vector, int len); void print_long_matrix(MAT_LONG matrix, int rows, int cols); void print_long_vector(VECTOR_LONG vector, int len); long int Qm_Cmax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v); long int Qm_Emax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); long int Qm_Lmax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); long int Qm_Rj_Cmax( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_Emax( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_Fmax( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_Lmax( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_SumCj(VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_SumEj( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_SumFj( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_SumLj( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_SumUj(VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_SumTj( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_Rj_Tmax( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_Cmax( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_Emax( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_Fmax( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_Lmax( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_SumCj(VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_SumEj( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_SumFj( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_SumLj( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_SumTj( VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_SumUj(VECTOR_INT seq, RELATED_MACHINES instance); double Qm_Rj_Wj_Tmax( VECTOR_INT seq, RELATED_MACHINES instance); long int Qm_SumCj( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v); long int Qm_SumEj( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); long int Qm_SumLj( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); long int Qm_SumTj( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); long int Qm_SumUj( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); long int Qm_Tmax( VECTOR_INT seq, int jobs, int machs, VECTOR_INT pt, VECTOR_INT v, VECTOR_LONG dd); void randSequence(VECTOR_INT vector, int jobs); int read_parfile_int(char *filename, int row); long int Rm_Cmax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt); long int Rm_Emax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Rm_Lmax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Rm_Rj_Cmax( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_Emax( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_Fmax( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_Lmax( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_SumCj(VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_SumEj( VECTOR_INT seq,UNRELATED_MACHINES instance); long int Rm_Rj_SumFj( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_SumLj( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_SumTj( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_SumUj(VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_Rj_Tmax( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_SumTj( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_SumLj( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_Tmax( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_Lmax( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_SumEj( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_SumUj(VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_Emax( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_Fmax( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_Cmax( VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_SumCj(VECTOR_INT seq, UNRELATED_MACHINES instance); double Rm_Rj_Wj_SumFj( VECTOR_INT seq, UNRELATED_MACHINES instance); long int Rm_SumCj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt); long int Rm_SumEj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Rm_SumLj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Rm_SumTj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Rm_SumUj( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int Rm_Tmax( VECTOR_INT seq, int jobs, int machs, MAT_INT pt, VECTOR_LONG dd); long int S1_Cmax( VECTOR_INT seq, int jobs, VECTOR_INT pt); long int S1_Emax( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); long int S1_Lmax( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); long int S1_Rj_Cmax( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_Emax( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_Fmax( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_Lmax( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_SumCj( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_SumEj( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_SumFj( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_SumLj( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_SumTj( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_SumUj( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_Rj_Tmax( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_Cmax( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_Emax( VECTOR_INT seq,SINGLE_MACHINE instance); double S1_Rj_Wj_Fmax( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_Lmax( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_SumCj( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_SumEj( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_SumFj( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_SumLj( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_SumTj( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_SumUj( VECTOR_INT seq, SINGLE_MACHINE instance); double S1_Rj_Wj_Tmax( VECTOR_INT seq, SINGLE_MACHINE instance); long int S1_SumCj( VECTOR_INT seq, int jobs, VECTOR_INT pt); long int S1_SumEj( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); long int S1_SumLj( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); long int S1_SumTj( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); long int S1_SumUj( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); long int S1_Tmax( VECTOR_INT seq, int jobs, VECTOR_INT pt, VECTOR_LONG dd); int search_colImatrix(MAT_INT matrix, int no_col, int rows, int val); int searchInDVector(double *vector, int longitud, double numero); int searchInFVector(float *vector, int longitud, float numero); int searchInIVector(int *vector, int rows, int number); int searchInLVector(long int *vector, int rows, int number); int searchOInIVector(int *vector, int rows, int number, int starting); void setval_Dmatrix(MAT_DOUBLE matrix, int rows, int cols, double val); void setval_Dvector(VECTOR_DOUBLE vector, int len, double val); void setval_Fmatrix(MAT_FLOAT matrix, int rows, int cols, float val); void setval_Fvector(VECTOR_FLOAT vector, int len, float val); void setval_Ivector(VECTOR_INT vector, int len, int val); void setval_Imatrix(MAT_INT matrix, int rows, int cols, int val); void setval_Lvector(VECTOR_LONG vector, int len, long int val); void setval_Lmatrix(MAT_LONG matrix, int rows, int cols, long int val); int sign(int number); void sortDVector(double *vector, int *order, int longitud, char criterio); void sortFVector(float *vector, int *order, int longitud, char criterio); void sortIVector(int *vector, int *order, int rows, char criterion); void sortIVector_noOrder(int *vector, int rows, char criterion); void sortLVector(long int *vector, int *order, int longitud, char criterio); VECTOR_INT sortPT(int jobs, int machs, MAT_INT pt, char crit);