/*------------------------------------------------------------------------------ TIA 8. gyakorlat F|perm|Cmax ütemezési feladat modellezése. Egyutas előzésnélküli többoperációs ütemezési feladat. Cél: A befejezési időpont minimalizálása. 1. rész: Modellépítés és szimuláció. A Simulation_F adott műveleti idők és adott indítási sorrend esetében kiszámítja az operációk indítási és befejezési időpontjait. TIA 9. gyakorlat F2|perm|Cmax ütemezési fedadat megoldása Johnson-algoritmussal. Az algoritmus optimális megoldást eredményez (két gép esetén). TIA 10. gyakorlat F3|perm|Cmax ütemezési fedadat megoldása kiterjesztett Johnson-algoritmussal. A három gépes feladatot két virtuális gépre vezetjük vissza úgy. hogy minden munka esetében az első és a második operáció műveleti idejét összeadjuk, és a második és harmadik operáció műveleti idejét szintén összeadjuk. Az így előállított virtuális kétgépes feladatra alkalmazzuk a Johnson-algoritmust. Ha az első gép legkisebb időadata nagyobb mint a középső gép legnagyobb időadata, vagy a harmadik gép legkisebb időadata nagyobb mint a középső gép legnagyobb időadata akkor a megoldás optimális, egyébként az optimalitás nem garantálható! Továbbfejlesztett modell: F|perm|Cmax Dannenbring-módszer lényege az, hogy a tetszőleges számú sorba kapcsolódó gépeket egy virtuális kétgépes modellre vezetjük vissza egy alkalmasan megválasztott súlyozási szisztéma segítségével. Az így előállított virtuális kétgépes feladatra alkalmazzuk a Johnson-algoritmust. ======== DTFSZTIR 2. gyakorlat F|perm|Cmax Utemezesi fedadat megoldasa CDS algoritmus Továbbfejlesztett modell: F|perm|Cmax 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 munkacsoport á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 NR gépes feladatból NR-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 NR-gépes probléma megoldása. A megodás nem optimális mert a feladat NP-hard, de jó közelítő ütemtervet eredményez. Kereső algoritmus Lokális szomszédsági kereső algoritmus implementálása (egy továbbfejleszthető alap kereső algoritmsu váz). Futási eredmények: A keresési módszer lassabban működik, de jobb eredményt ad mint a korábban vizsgált heurisztikus algoritmusok. DTFSZTIR 5. gyakorlat Munkasorrend-függő gépátállítások figyelembe vétele Gépek közötti anyagmozgatási idők modellezése -------------------------------------------------------------------------------*/ #include #include typedef struct { int id; long* ProcT; //pointer: muveleti idok vektorara mutat long* StartT; //pointer: inditasi idopontok vektorara mutat long* EndT; //pointer: befejezesi idopontok vektorara mutat }T_JOB; //munka typedef struct { int id; long** SetupT; //atallitasi idok matrixa long* TransT; //anyagmozgatasi idok vektora }T_RES; //eroforras long max_l( long a, long b) { return a>b ? a : b; } long min_l( long a, long b) { return a sel_value ) { //megjegyzem index = j; value = sel_value; } } if ( index != i ) { //csere temp = v[ index ]; v[ index ] = v[ i ]; v[ i ] = temp; } } //beutemezes first = 0; last = NJ-1; for( i=0; i job[i].ProcT[r] ) pi0_min = job[i].ProcT[r]; if ( pi1_max < job[i].ProcT[r+1] ) pi1_max = job[i].ProcT[r+1]; if ( pi2_min > job[i].ProcT[r+2] ) pi2_min = job[i].ProcT[r+2]; } for( i=0; i= pi1_max || pi2_min >= pi1_max ) return 1; else return 0; } void Dannenbring_F( T_JOB* job, int NJ, int NR, int* s) { //Dannenbring-algoritmus alkalmazasa int i; //munka indexe int r; //gep indexe T_JOB* job_V2; //virtualis ketgepes eset idoadataihoz szukseges //transzformacio ket gepres esetre job_V2 = (T_JOB*) calloc( NJ, sizeof(T_JOB) ); //strukturavektor for ( i=0; i