#include #include "sbd.h" #include "read_gen.h" #include /* * */ READ_DATA_GENER( long *m , long *my_jobs , long *oper , long *jobpred , long *jobsucc , long *macpred , long *macsucc , long *finishing , long *realtasks , long *which_job , long *machine_sched , long *actrelease , long *actdeadline , long *processing_time , long *operations , long *pdc , long *scs , long *which_machine , long *machine_total , long *position , long deadlines , long *best_lb ) { long i ; long iii ; long j ; long processi ; long machini ; long om_lb , M2 , M3 , M5 , M6 , M8 ; long best_ub ; long bell ; /* flag for generation of the deadlines */ long still ; long kdown ; /* number of downtimes */ long ldown[MAXOPER]; long udown[MAXOPER] ; long in_machine[MAXOPER] ; long r1 , d1 ; double y ; double random_number() ; double expon1 , vdur , vbef , vstart , sumd ; fscanf(input_file,"%ld %ld %ld %ld %ld %ld %ld %ld %ld", my_jobs,&om_lb,&M2,&M3,&M5,&M6,best_lb,&best_ub,&M8) ; fscanf(input_file,"%ld",m) ; best_ub = M5 ; for (i=1;i<=*my_jobs;i++) fscanf(input_file,"%ld",&operations[i]) ; sumd = ((double) best_ub) ; /* maximum time for the last downtime */ kdown = 0 ; for (iii=1;iii<=*m;iii++) { still = 1 ; vbef = 0.0 ; while (still) { y = random_number() ; expon1 = - (lamda1 * log((1.0-y))) ; y = random_number() ; vdur = - ( lamda2 * log((1.0-y))) ; vstart = vbef + expon1 ; if (vstart < sumd) { kdown++; (*my_jobs)++ ; operations[*my_jobs] = 1 ; ldown[kdown] = (long) vstart ; udown[kdown] = ldown[kdown] + ( (long) vdur ) + 1 ; in_machine[kdown] = iii ; vbef = (double) (udown[kdown]) ; if (udown[kdown] >= ((long) sumd)) { still = 0 ; kdown-- ; (*my_jobs)-- ; } } else { still = 0 ; } } } printf("%ld %ld %ld %ld %ld %ld %ld %ld %ld\n", *my_jobs,om_lb,M2,M3,M5,M6,*best_lb,best_ub,M8) ; printf("%ld\n",*m) ; fflush(stdout) ; for (i=1;i<=*my_jobs;i++) printf("%ld\n",operations[i]) ; /*read the operations for each machine */ for (i=1;i<=*m;i++) { machine_total[i] = 0 ; machine_sched[i] = 0 ; } *oper = 0 ; for (i=1;i<=*my_jobs;i++) for (j=1;j<=operations[i];j++) (*oper)++ ; *finishing = *oper + 1 ; for (i=0;i<=*finishing;i++) { actrelease[i] = 0 ; } processing_time[0] = 0 ; processing_time[*finishing] = 0 ; *oper = 0 ; actdeadline[0] = ((long) RAND_MAXI) ; for (i=1;i<=(*my_jobs-kdown);i++) { bell = 0 ; for (j=1;j<=operations[i];j++) { *oper = *oper + 1 ; if (j==1) { jobpred[*oper] = 0 ; } else { jobpred[*oper] = *oper - 1 ; } macpred[*oper] = 0 ; pdc[*oper] = jobpred[*oper] ; if (j==operations[i]) { jobsucc[*oper] = *finishing ; } else { jobsucc[*oper]= *oper + 1 ; } macsucc[*oper] = *finishing ; scs[*oper] = jobsucc[*oper] ; fscanf(input_file,"%ld %ld %ld %ld",&machini,&processi,&r1,&d1) ; /* if (deadlines) { actrel = 0 ; if (!bell) { bell = 1 ; act_percen = PERCEN ; if (PERCEN < 0.0) { act_percen = (-PERCEN) + 0.03 ; y = random_number() ; extra = (long) ( (0.02) * ((double) (best_ub))* y) ; acti = best_ub + extra - ((-PERCEN) * ((double) (best_ub))) ; } else { y = random_number() ; extra = (long) ( (0.02) * ((double) (best_ub)) * y) ; acti = ((long) ( (1.0 + act_percen) * ((double) (best_ub)))) + extra ; } actrelease[*oper] = actrel ; actdeadline[*oper] = acti ; } else { actrelease[*oper] = actrel ; actdeadline[*oper] = acti ; } } else { actrelease[*oper] = 0 ; actdeadline[*oper] = RAND_MAXI ; } */ printf("%ld %ld 0 %ld\n",machini,processi,(5*best_ub)) ; which_machine[*oper] = machini ; which_job[*oper] = i ; processing_time[*oper] = processi; machine_total[machini] = machine_total[machini] + 1 ; job_operations[i][j] = *oper ; machine_operations[machini][machine_total[machini]] = *oper ; position[*oper] = machine_total[machini] ; } } actdeadline[*finishing] = ((long) RAND_MAXI) ; *realtasks = *oper ; for (i=1;i<=kdown;i++) { printf("%ld %ld %ld %ld\n", in_machine[i], (udown[i]-ldown[i]), ldown[i], udown[i]) ; } } READ_DATA_GENER_SETUP( long *m , long *my_jobs , long *oper , long *jobpred , long *jobsucc , long *macpred , long *macsucc , long *finishing , long *realtasks , long *which_job , long *machine_sched , long *actrelease , long *actdeadline , long *processing_time , long *operations , long *pdc , long *scs , long *which_machine , long *machine_total , long *position , long deadlines , long *best_lb ) { long i ; long j ; long processi ; long machini ; long om_lb , M2 , M3 , M5 , M6 , M8 ; long best_ub ; long bell ; /* flag for generation of the deadlines */ double y ; double random_number() ; double sumd ; printf("Setup generation \n") ; fscanf(input_file,"%ld %ld %ld %ld %ld %ld %ld %ld %ld", my_jobs,&om_lb,&M2,&M3,&M5,&M6,best_lb,&best_ub,&M8) ; fscanf(input_file,"%ld",m) ; best_ub = M5 ; for (i=1;i<=*my_jobs;i++) fscanf(input_file,"%ld",&operations[i]) ; sumd = ((double) best_ub) ; /* maximum time for the last downtime */ printf("%ld %ld %ld %ld %ld %ld %ld %ld %ld\n", *my_jobs,om_lb,M2,M3,M5,M6,*best_lb,best_ub,M8) ; printf("%ld\n",*m) ; fflush(stdout) ; for (i=1;i<=*my_jobs;i++) printf("%ld\n",operations[i]) ; /*read the operations for each machine */ for (i=1;i<=*m;i++) { machine_total[i] = 0 ; machine_sched[i] = 0 ; } *oper = 0 ; for (i=1;i<=*my_jobs;i++) for (j=1;j<=operations[i];j++) (*oper)++ ; *finishing = *oper + 1 ; for (i=0;i<=*finishing;i++) { actrelease[i] = 0 ; } processing_time[0] = 0 ; processing_time[*finishing] = 0 ; *oper = 0 ; actdeadline[0] = ((long) RAND_MAXI) ; for (i=1;i<=*my_jobs;i++) { bell = 0 ; for (j=1;j<=operations[i];j++) { *oper = *oper + 1 ; if (j==1) { jobpred[*oper] = 0 ; } else { jobpred[*oper] = *oper - 1 ; } macpred[*oper] = 0 ; pdc[*oper] = jobpred[*oper] ; if (j==operations[i]) { jobsucc[*oper] = *finishing ; } else { jobsucc[*oper]= *oper + 1 ; } macsucc[*oper] = *finishing ; scs[*oper] = jobsucc[*oper] ; fscanf(input_file,"%ld %ld",&machini,&processi) ; /* if (deadlines) { actrel = 0 ; if (!bell) { bell = 1 ; act_percen = PERCEN ; if (PERCEN < 0.0) { act_percen = (-PERCEN) + 0.03 ; y = random_number() ; extra = (long) ( (0.02) * ((double) (best_ub))* y) ; acti = best_ub + extra - ((-PERCEN) * ((double) (best_ub))) ; } else { y = random_number() ; extra = (long) ( (0.02) * ((double) (best_ub)) * y) ; acti = ((long) ( (1.0 + act_percen) * ((double) (best_ub)))) + extra ; } actrelease[*oper] = actrel ; actdeadline[*oper] = acti ; } else { actrelease[*oper] = actrel ; actdeadline[*oper] = acti ; } } else { actrelease[*oper] = 0 ; actdeadline[*oper] = RAND_MAXI ; } */ printf("%ld %ld 0 0\n",machini,processi) ; which_machine[*oper] = machini ; which_job[*oper] = i ; processing_time[*oper] = processi; machine_total[machini] = machine_total[machini] + 1 ; job_operations[i][j] = *oper ; machine_operations[machini][machine_total[machini]] = *oper ; position[*oper] = machine_total[machini] ; } } actdeadline[*finishing] = ((long) RAND_MAXI ); *realtasks = *oper ; for (i= 0;i<=*oper;i++) { for (j=0;j<=*oper;j++) { if (i==0) { if ((i!= j) && (jobpred[j] == 0)){ y= random_number() ; printf("%ld\n",(long) ((y* ((double) SETUPNUMBER)))) ; } else { printf("0\n") ; } } else { if (which_machine[i] == which_machine[j]) { if (j==0) { printf("0\n") ; } if (i==j) { printf("0\n" ) ; } else { y= random_number() ; printf("%ld\n", (long) ((((double) SETUPNUMBER)* y))) ; } } else { printf("0\n") ; } } } } }