/*------------------------------------------------------------------------------ TIA 2. gyakorlat Egygépes termelésütemezési feladat modellezése és megoldása. 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. Tová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 #include #define N_OBJF 4 typedef struct { int id; long ProcT; //muveleti ido long StartT; //inditasi idopont long EndT; //befejezesi idopont long d; //hatarido long L; //keses } T_JOB; void Simulate( T_JOB* job, int NJ, int* s, long t_ref); void Evalute( T_JOB* job, int NJ, double* objf); void Print_objf(double* objf); void SPT_rule( T_JOB* job, int NJ, int* s); void EDD_rule( T_JOB* job, int NJ, int* s); int main() { int NJ; //munkak szama T_JOB* job; //munkak adatait int i; int* s; //utemterv double objf[N_OBJF]; time_t t; srand( time(&t) ); //veletlenszam generator inic. printf("\n Kerem a munkak szamat:"); scanf("%d", &NJ); //vedelem nincs job = (T_JOB*) calloc(NJ, sizeof(T_JOB) ); //strukturavektor s = (int*) calloc(NJ, sizeof(int)); //input adatok generalasa //valos rendszbol ezek lekerdezhetok for ( i=0; i Lmax ) Lmax = job[i].L; Csum += job[i].EndT; if ( Cmax < job[i].EndT ) Cmax = job[i].EndT; } WIP = Csum / Cmax; objf[0] = Cmax; objf[1] = Csum; objf[2] = WIP; objf[3] = Lmax; } void Print_objf(double* objf) { printf("\n Cmax = %lf", objf[0]); printf("\n Csum = %lf", objf[1]); printf("\n WIP = %lf", objf[2]); printf("\n Lmax = %lf", objf[3]); } void SPT_rule( T_JOB* job, int NJ, int* s) { int i, j, temp, index; for( i=0; i