#include #include "sbtools.h" #include "sbd.h" #include "read.h" /* * READ_DATA(): input the data and create the Job's lists * */ READ_DATA( 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 , j ; long processi ; long machini , m1 , finis ; long om_lb , M2 , M3 , M5 , M6 , M8 ; long best_ub ; long actrel ; long acti ; long bell ; /* flag for generation of the deadlines */ double total_times ; 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) ; printf("Jobs: %ld Machines: %ld\n",*my_jobs,*m) ; for (i=1;i<=*my_jobs;i++) fscanf(input_file,"%ld",&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) ; printf("Deadlines = %ld \n",deadlines) ; total_times = 0.0 ; 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] ; if (!deadlines) { fscanf(input_file,"%ld %ld",&machini,&processi) ; } else { fscanf(input_file,"%ld %ld %ld %ld",&machini,&processi,&actrel,&acti) ; } if (acti!=0) rndi = 0 ; // if (acti==0) acti= ((long) RAND_MAXI) ; if (deadlines) { actrelease[*oper] = actrel ; actdeadline[*oper] = acti ; } else { actrelease[*oper] = 0 ; actdeadline[*oper] = ((long) RAND_MAXI) ; } which_machine[*oper] = machini ; which_job[*oper] = i ; which_jobg[*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] ; } if (actdeadline[*oper] <= best_ub) total_times = total_times+1.0 ; } actdeadline[*finishing] = ((long) RAND_MAXI ); *realtasks = *oper ; printf("Start reading setup \n") ; for (i=0;i< *finishing;i++) { for (j=0;j< *finishing;j++) { fscanf(input_file,"%ld",&setup_oper[i][j]) ; /*printf(" %d \n",setup_oper[i][j]) ; */ } } for (i=0;i<*finishing;i++) setup_oper[i][*finishing] = 0 ; if (test_strategy == 29 ) { /* read a starting solution */ for (i=1;i<=*m;i++) { machine_sched[i] = 1 ; for (j=1;j<=machine_total[i];j++) { fscanf(input_file,"%ld",&(machine_operations[i][j])) ; } } m1 = *m ; finis = *finishing ; SEQUENCE_FIXED_MACHINES(machine_sched, machine_total, position, m1, finis, macpred, macsucc) ; } /* printf("Percentage = %f \n ",((total_times/((double) *my_jobs))*100.0)) ; */ }