/* A termelésinformatikai alapjai c. tantrárgy GEIAK150-B Miskolci Egyetem, Alkalmazott Informatikai Intézeti Tanszék Dr. Kulcsár Gyula, egyetemi docens TIA gyakorlat 06 Flow Shop modell Sorba kapcsolódó munkahelyek szimulációja. Egyutas előzésnélküli többoperációs ütemezési feladat. 1. rész: Modellépítés és szimuláció. A Simulation_FS függvény 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 gyakorlat 08 F2|perm|Cmax ütemezési feladat megoldása Johnson-algoritmussal. Az algoritmus optimális megoldást eredményez (két gép esetén). TIA gyakorlat 09 F3|perm|Cmax ütemezési feladat 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ó! ------------------------------------------------------------------------------- */ #include #include //--------------------------------------------------------------------------- typedef struct { int id; //azonosito long* ProcT; //muveleti idok listajara mutato pointer long* StartT; //inditasi idopont --||-- long* EndT; //befejezesi idopont --||-- }T_JOB; long max_l(long a, long b) { return a>=b ? a : b; } long min_l(long a, long b) { return a<=b ? a : b; } void Simulation_FS( T_JOB* job, int NJ, int NR, int* s, long t0); void print_Res_Gantt( T_JOB* job, int NJ, int NR, int* s); void print_Job_Gantt( T_JOB* job, int NJ, int NR, int* s); void Johnson_alg(T_JOB* job, int NJ, int r, int* s); long Evaluate(T_JOB* job, int NJ, int NR, int* s); int F3_Johnson_alg_ext(T_JOB* job, int NJ, int r, int* s); int main(int argc, char* argv[]) { int NJ; //munkak szama int i; //munka indexe int NR; //munkahelyek (eroforrasok) szama int r; //munkahely indexe T_JOB* job; int* s; //kozos utemterv minden gepre, mert a munkak nem elozheti meg egymast int r_value; printf(" \n Flow shop modell"); printf("\n Munkak szama="); scanf("%d", &NJ); printf("\n Munkahelyek szama="); scanf("%d", &NR); s = (int*) calloc(NJ, sizeof(int) ); //utemterv job = (T_JOB*) calloc(NJ, sizeof(T_JOB) ); for( i=0; i job[i].ProcT[0] ) min_pi0 = job[i].ProcT[0]; if ( max_pi1 < job[i].ProcT[1] ) max_pi1 = job[i].ProcT[1]; if ( min_pi2 > job[i].ProcT[2] ) min_pi2 = job[i].ProcT[2]; } //mem. felszabaditas for( i=0; i