/* 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 02 Egy eroforrást tartalmazó gyártócella ütemezése. Az ütemezés célja a befejezési idők összegének minimalizálása, ezáltal az átlagos készletszint minimalizálása. Az SPT (Shortest Processing Time) műveleti idő szerint nemcsökkenő munkasorrend optimális ütemtervet eredményez. TIA gyakorlat 03 TIA 4. gyakorlat ovábbfejlesztés: Határidős munkák utemezése a legnagyobb késés minimalizálása érdekében. Egygépes termelésiütemezési feladat. Minden munkának saját határideje van. Az ütemezés célja a legnagyobb késés minimalizálása. EDD Earliest Due Date (határidő szerint nemcsökkenő munkasorrend) A megoldás optimális ütemtervet eredményez. ------------------------------------------------------------------------------- */ #include #include //--------------------------------------------------------------------------- #define N_of_ObjF 4 //celfuggvenyek szama typedef struct { int id; //azonosito long ProcT; //muveleti ido long StartT; //inditasi idopont long EndT; //befejezesi idopont long L; //keses long d; //hatarido }T_JOB; void Simulation( T_JOB* job, int NJ, int* s, long t0); void Evalute( T_JOB* job, int NJ, double* obj_f ); void print_obj_f( double* obj_f ); void SPT_rule( T_JOB* job, int NJ, int* s); void EDD_rule( T_JOB* job, int NJ, int* s); void print_execution_details( T_JOB* job, int NJ, int* s); int main(int argc, char* argv[]) { int NJ; //munkak szama, number of jobs T_JOB* job; //munkak dinamikusan letrehozott tombje int* s; //utemterv int i; //munka indexe double obj_f[ N_of_ObjF ]; //N_of_ObjF darab celfuggveny printf("\n SPT utemezesi szabaly demo"); printf("\n Munkak szam = "); scanf("%d", &NJ); //ellenorzes nincs //mem. foglalas job = (T_JOB*) calloc( NJ, sizeof( T_JOB ) ); //strukturatomb s = (int*) calloc( NJ, sizeof( int ) ); //int tomb //termelesinformatikai rendszer //veletlenszeru adatokkal helyettesitjuk for ( i=0; i job[ s[j] ].ProcT ) index = j; } if ( index != i ) { //i pozicioban levo elem es az index pozicioban levo elem csereje temp = s[ index ]; s[ index ] = s[ i ]; s[ i ] = temp; } } } void EDD_rule( T_JOB* job, int NJ, int* s) { //rendezes d (hatarido) alapjan nemcsokkeno sorrendbe int i, j, index, temp; for ( i=0; i job[ s[j] ].d ) index = j; } if ( index != i ) { //i pozicioban levo elem es az index pozicioban levo elem csereje temp = s[ index ]; s[ index ] = s[ i ]; s[ i ] = temp; } } } void print_execution_details( T_JOB* job, int NJ, int* s) { //vegrahajtas adatainak megjelenitese int i; printf("\n\n Muveletek vegrahajtasa"); printf("\n \t # \t munka \t indul \t muv. \t bef. \t hatar \t keses"); for ( i=0; i