/*------------------------------------------------------------------------------- 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 07 F2|perm|Cmax utemezesi feladat megoldasa Johnson-algoritmussal. Az algoritmus optimális megoldást eredményez (két gép esetén). TIA gyakorlat 08 Oktatási szünet 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ó! TIA gyakorlat 10 Fm|perm|Cmax ütemezési feladat megoldása Palmer-algoritmus Dannenbring-algoritmus ------------------------------------------------------------------------------- */ #include #include #include typedef struct { int id; //munka azonosito long* ProcT; //muveleti idok pointere long* StartT; //inditasi idok long* EndT; //befejezesi idok } 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 generate_job_data( T_JOB* job, int NJ, int NR); void creat_adhoc_schedule(int* s, int NJ); void Simulation_FS( T_JOB* job, int NJ, int NR, int* s, long* t0); void Johnson_alg(T_JOB* job, int NJ, int r, int* s); 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); long Evaluate_FS(T_JOB* job, int NJ, int NR, int* s); int F3_Johnson_alg_ext(T_JOB* job, int NJ, int r, int* s); void Fm_Palmer_alg(T_JOB* job, int NJ, int NR, int* s); void Fm_Dannenbring_alg(T_JOB* job, int NJ, int NR, int* s); int main(int argc, char* argv[]) { int i; //munka indexe int NJ; //munkak szama int r; //eroforrasok indexe int NR; //eroforrasok (munkahelyek) szama T_JOB* job; //munkakra mutato pointer int* s; //utemezesi vektor long Cmax; int r_value; printf("\n Flow Shop modell"); printf("\n Munkak szama = "); scanf("%d", &NJ); printf("\n Munkahelyek szama = "); scanf("%d", &NR); //feltelezzuk, hogy a munkahelyek azonositoja //a technologiai sorrend szerint van kiosztva job = (T_JOB*) calloc(NJ, sizeof(T_JOB) ); for( i=0; i job[i].ProcT[0] ) min_pi0 = job[i].ProcT[0]; if ( min_pi2 > job[i].ProcT[2] ) min_pi2 = job[i].ProcT[2]; if ( max_pi1 < job[i].ProcT[1] ) max_pi1 = job[i].ProcT[1]; } if ( min_pi0 >= max_pi1 || min_pi2 >= max_pi1 ) return 1; //optimalis a megoldas else return 0; //nem garantalhato az optimum elerese } void Fm_Palmer_alg(T_JOB* job, int NJ, int NR, int* s) { int i,k; //munka index int j; //operacio (egyben a gep) index int index; //rendezes segedvaltozoja int temp; //csere segedvaltozoja double* I; //Pa;mer-index //mkem. foglalas I = (double*) calloc(NJ, sizeof(double) ); //tomb //1. fazis: Pa;mer-indexek szamitasa for (i=0; i