/*------------------------------------------------------------------------------- P||max(Ci) Utemezesi fedadat megoldasa LPT+LIST ütemezési szabály alkalmazásával. Párhuzamos gépes termelésiütemezési feladat. Az ütemezés célja a legkésőbbi befejezési időpont minimalizálása, ezáltal a teljes rendeléscsoport átfutási idejének minimalizálása. LPT+LIST Alkalmazzuk az LPT szabályt a munkák sorbarendezésére (műveleti idők alapján nemnövekvő sorrendbe), ezután az így kapott sorrendben vesszük a munkákat és mindig a legkorábban felszabaduló gépre ütemezzük a már beütemezettek mögé, ha több gép egyidejűleg szabadul fel, akkor a legkisebb azonosítójút terheljük. A megoldás nem optimális mert a feladat NP-hard, de jó közelítő ütemtervet eredményez. -------------------------------------------------------------------------------*/ #include #include #include typedef struct{ long id, SetT, ProcT, OptT, StartT, EndT; }T_JOB; int SPT(int* r, T_JOB* job, int n); long simulation(int* Sch, T_JOB* job, int n, long ref_T); int LPT(int* r, T_JOB* job, int n); int main(int argc, char* argv[]) { T_JOB* job; int n; //jobok darabszama int m; //gepek szama int i; //job futoindex int j; //gepek futoindex int ** Sch; //utemterv int *r; //rendezes SPT alapjan int *l; //jobok szama gepenkent (terheles load) int x; //fiktiv munkak szama int gep; //kivalasztott gep int munka; //kivalasztott munka long sum_EndT; //ket uj valt long max_EndT; long *C; //bef. ido //virtualis adatbazis lekerdeze randomize(); printf("\n Kerem a jobok szamat:"); scanf("%d", &n); //n erteket kap bill-rol job = (T_JOB*) calloc(n, sizeof(T_JOB) ); for (i=0; i C[j] ) gep = j; //terheles az r[i] munkat a gep azon. gep l[gep] poziciojaba Sch[gep][ l[gep] ]=r[i]; l[gep]++; //terhelesek szama //fontos C[gep]+=job[r[i]].OptT; } //utemterv kesz!!! //finomprogram generalas szimulacioval //szimulacio gepenkent egymastol fuggetlenul sum_EndT = 0; for (j=0; j max_EndT ) max_EndT = C[j]; } //munkak Gantt diagramja printf("\n Fine Sch: \n "); for (i=0; i job[ r[j] ].OptT) { //nem csokkeno OptT ertek szerint temp = r[i]; r[i] = r[j]; r[j] = temp; } return 1; } int LPT(int* r, T_JOB* job, int n) { int i, j, temp; for (i=0; i