/*-------------------------------------------------------------------------------- P||Cmax 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 #include typedef struct{ int id; long pt; long st; long et; }T_JOB; int main(int argc, char* argv[]) { int M, N, i, j, m, temp; T_JOB* job; int* r; //rendezett LPT int** l; //hozzarendeles es sorrend int * db; //gepek terhelese long * C; //a gepek felszabadulasanak idopontja int Mmax = 0; clrscr(); printf("\n Egszeru pelda P utemezesi modellre Szum(Ci) celfuggveny eseten"); printf("\n Kerem a munkak szamat:"); scanf("%d", &N); printf("\n Kerem a gepek szamat:"); scanf("%d", &M); job = (T_JOB*) calloc(N, sizeof(T_JOB)); r = (int*) calloc(N, sizeof(int)); //memter fogl. load-nak l = (int**) calloc(M, sizeof(int*)); for (m=0; m job[r[j]].pt ) { temp=r[i]; r[i]=r[j]; r[j]=temp; } //2. lepes: szetosztas for (i=0; i C[m] ) Mmin = m; //terheles db[Mmin]++; l[Mmin][db[Mmin]] = r[i]; C[Mmin]+= job[ r[i] ].pt; } // //szimulacio for (m=0; m