/*------------------------------------------------------------------------------- F|perm|max(Ci) Ütemezési fedadat szimulációja. Egyutas többoperációs termelésütemezési feladat. F2|perm|max(Ci) Ütemezési fedadat megoldása Johnson-algoritmussal. Az algoritmus optimális megoldást eredményez. (Táblára felírt módszer: F3|perm|max(Ci) feladatra a Johnson-algoritmus kiterjeszthető!) -------------------------------------------------------------------------------*/ #include #include #include #include typedef struct { int id; long int* SetT, /*beallitasi idok, setup times*/ * ProcT, /*muveleti idok, processing times*/ * OpT, /*operaciok teljes ideje, operation times*/ * StartT,/*kezdesi idopontok, starting times*/ * EndT; /*befejezesi idopontok, ending times */ long D, /*hatarido*/ L; /*keses*/ }T_JOB; typedef struct { int id; int l; /*gephez rendelt munkak szama, load*/ long int C; /*a gep utolso munkajanak befejezesi idopontja, completion time*/ }T_MACHINE; typedef struct { long Cmax, /*utolso munka bef. idopontja*/ Csum; /*bef. idok osszege*/ double MUav; /*atlagos gepkihasznaltsag*/ }T_OBJF; /*celfuggvenyek*/ long simulation_FS(T_JOB* job, int* sch, int NJ, int NM, long t); void print_objf(T_OBJF* objf); void Johnson_alg(T_JOB* job, int* sch, int NJ, int x, int y); void print_Gantt(T_JOB* job, int* sch, int NJ, int NM); int main(int argc, char* argv[]) { long Cmax; int NJ; /* munkak szama*/ int NM; /* gepek szama*/ T_MACHINE * mach; int i, j; T_JOB* job; /* strukturavektorra mutato*/ int* sch; /* utemterv */ T_OBJF objf; /* modellepites, utemezes, szimulacio, ertekeles*/ /*modellepites*/ printf("\n Kerem a munkak aktualis szamat:"); scanf("%d", &NJ); printf("\n Kerem a gepek aktualis szamat:"); scanf("%d", &NM); job = (T_JOB*) calloc(NJ, sizeof(T_JOB)); randomize(); for (i=0; iCsum); printf("\n Cmax= %ld", objf->Cmax); } void Johnson_alg(T_JOB* job, int* sch, int NJ, int x, int y) { int* r; int i, j, temp; int e, v; r = (int*) calloc(NJ, sizeof(int)); for(i=0; i min( job[r[j]].OpT[x], job[r[j]].OpT[y] ) ) { /*csere*/ temp = r[i]; r[i] = r[j]; r[j] = temp; } e=0; v=NJ-1; for(i=0; i