/*-------------------------------------------------------------------------------- F|prmut|Cmax Utemezesi fedadat megoldasa CDS-algoritmus alkalmazásával. Többgépes egyutas előzés nélküli 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. CDS-algoritmus: A Campbell-Dudek-Smith algoritmus a többgépes feladatot kétgépes problémákra vezeti vissza. Az algoritmus az eredeti m gépes feladatból m-1 darab mesterséges kétgépes problémát generál úgy, hogy az egymást követő gépek lesznek a kétgépes feladat gépei. A kétgépes feladatok egyenként megoldhatók a Johnson-algoritmussal. Kiválasztva közülük a teljes feladatra vonatkozó átfutási idő szempontjából a legjobbat, az lesz az m-gépes probléma megoldása. A megoldás nem optimális mert a feladat NP-hard, de jó közelítő ütemtervet eredményez. --------------------------------------------------------------------------------*/ #include #include #include typedef struct{ int jobid; //azonosito long * pt; //muveleti ido, processing time long * st; //kezdesi idopont, start time long * et; //befejezesi idopont, end time } T_JOB; //elozes nelkuli egyutas modell (permutacios flow shop) //NJ jobok szama, NM gepek szama, s utemterv=jobok sorrendje, job idoadatok int FS_simulation(int NJ, int NM, int* s, T_JOB* job); //Johnson algoritmus 2 gepre A-->B sorrendben //x az "A" gep, y a "B" gep sorszama, NJ jobok szama, NM gepek szama, s utemterv=jobok sorrendje, job idoadatok void Johnson_algorithm( int x, int y, int NJ, int NM, int *s, T_JOB* job ); int main(int argc, char* argv[]) { T_JOB * job; int NJ = 4; int NM = 5; int* s; //utemterv int* s_best; //lejobb utemterv int i,m,k; long Cmax, Cbest; s = (int*) calloc(NJ, sizeof(int)); s_best = (int*) calloc(NJ, sizeof(int)); clrscr(); printf("\n Demo program a CDS Campbell-Dudek-Scmith algoritmus bemutattasara"); printf("\n amely jo kozelito megoldas ad az egyutas elozes nelkuli utemezesi feladatra"); //strukturavektor az idoatatok tarolasara job = (T_JOB*) calloc(NJ, sizeof(T_JOB)); for (i=0; i Cmax ) { Cbest = Cmax; for (i=0; i min( job[r[j]].pt[x], job[r[j]].pt[y]) ) { temp = r[i]; r[i] = r[j]; r[j] = temp; } } e = 0; v = NJ-1; for(i=0; i