/*------------------------------------------------------------------------------- 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 01 Egy eroforrást tartalmazó gyártócella működésének szimulációja. 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 Egygépes utemezési feladat modellezése, határidős munkák figyelembe vételével. 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 typedef struct { int id; long ProcT; long StartT; long EndT; long d; //hatarido long L; //keses } T_JOB; void generate_data( T_JOB* job, int NJ ); void create_schedule(int* s, int NJ); void simulation( T_JOB* job, int NJ, int* s, long t0); void print_execution_data( T_JOB* job, int NJ, int* s); void Evaluate( 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); int main(int argc, char* argv[]) { //int NM; //number of machines //egyetlen gep dolgoyik int NJ; //number of jobs T_JOB* job; //strukturara mutato pointer int i; int* s; //utemtervre mutato pointer double obj_f[4]; //celfuggvenyek tombje printf("\n Demo program egygepes gyartocella szimulaciojara"); printf("\n Munkak szama = "); scanf("%d", &NJ); //mem. foglalas job = (T_JOB*) calloc(NJ, sizeof(T_JOB) ); //dinamikus tomb s = (int*) calloc(NJ, sizeof(int) ); //dinamikus tomb //adatok generalasa generate_data( job, NJ ); //utemezes printf("\n Ad-hoc rendezes:"); create_schedule(s, NJ); //simulacio simulation( job, NJ, s, 0); //nulla ref. ido //evaluate(); Evaluate( job, NJ, obj_f ); //vegrehajtasi eredmeny print_execution_data( job, NJ, s); //celfuggvenyek megjelenitese print_obj_f( obj_f ); //SPT optimalis eredmenyt ad printf("\n SPT rendezes:"); SPT_rule( job, NJ, s); simulation( job, NJ, s, 0); //nulla ref. ido Evaluate( job, NJ, obj_f ); print_execution_data( job, NJ, s); print_obj_f( obj_f ); //EDD optimalis eredmenyt ad a hatarido tullepes minimalizalasakor printf("\n EDD rendezes:"); EDD_rule( job, NJ, s); simulation( job, NJ, s, 0); //nulla ref. ido Evaluate( job, NJ, obj_f ); print_execution_data( job, NJ, s); print_obj_f( obj_f ); free( job ); //mem. felszabaditas free( s ); printf("\n Kesz! Bill. lenyomasra kilep"); getch(); return 0; } //--------------------------------------------------------------------------- void generate_data( T_JOB* job, int NJ ) { //Valos kornyezetben adatbazisbol lekerdezheto int i; for ( i=0; i job[ s[j] ].ProcT ) index = j; if ( index != i ) { //csere temp = s[index]; s[index] = s[i]; s[i] = temp; } } } void EDD_rule( T_JOB* job, int NJ, int* s) { int i, j, index, temp; for ( i=0; i job[ s[j] ].d ) //hatarido szerint nemcsokkeno sorrend index = j; if ( index != i ) { //csere temp = s[index]; s[index] = s[i]; s[i] = temp; } } }