/*------------------------------------------------------------------------------ 1||Szum(Ci) Utemezesi fedadat megoldasa SPT ütemezési szabály alkalmazásával. Egygépes termelésiütemezési feladat. Az ütemezés célja a befejezési idők összegének minimalizálása, ezáltal az átlagos készletszint minimalizálása. SPT Shortest Processing Time (műveleti idő szerint nemcsökkenő munkasorrend) A megoldás optimális ütemtervet eredményez. -------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ 1||Tmax Utemezesi fedadat megoldasa EDD ütemezési szabály alkalmazásával. Egygépes termelésiütemezési feladat. Az ütemezés célja a legnagyobb csúszás minimalizálása. EDD Earliest Due Date (határidő szerint nemcsökkenő munkasorrend) A megoldás optimális ütemtervet eredményez. ------------------------------------------------------------------------------*/ #include #include #include #include typedef struct { int id; long ProcT, StartT, EndT, T, /*Tardiness, csuszas*/ d; /*Due Date, hatarido*/ } T_JOB; typedef struct { long Csum, Tmax; } T_OBJ; void Simulation(T_JOB* job, int N, int* sch, long t); void Evaluation(T_JOB* job, int N, T_OBJ* obj); void SPT_rule(T_JOB* job, int N, int* sch); void EDD_rule(T_JOB* job, int N, int* sch); void Print_Gantt(T_JOB* job, int N, int* sch); int main(int argc, char* argv[]) { T_JOB* job; T_OBJ obj; int* sch; int N; //job-ok szama int i; long Csum; printf("Kerem a munkak szamat:"); scanf("%d", &N); sch = (int*) calloc(N, sizeof(int)); job = (T_JOB*) calloc(N, sizeof(T_JOB)); randomize(); for (i=0; iCsum = 0; obj->Tmax = 0; for (i=0; iCsum += job[i].EndT; job[i].T = max( 0, job[i].EndT - job[i].d); if ( i==0 ) obj->Tmax = job[i].T; else if ( obj->Tmax < job[i].T ) obj->Tmax = job[i].T; } } void SPT_rule(T_JOB* job, int N, int* sch) { int i, j; int temp; /* Shortest Processing Time */ for (i=0; i job[ sch[j] ].ProcT ) { temp = sch[i]; sch[i] = sch[j]; sch[j] = temp; } } void EDD_rule(T_JOB* job, int N, int* sch) { int i, j; int temp; /* Earliaes Due Date */ for (i=0; i job[ sch[j] ].d ) { temp = sch[i]; sch[i] = sch[j]; sch[j] = temp; } } void Print_Gantt(T_JOB* job, int N, int* sch) { int i; printf("\n sorsz \t job \t ST \t PT \t ET \t d \t T"); for (i=0; i