/*------------------------------------------------------------------------------ 1||Szum(Ci) Utemezesi fedadat megoldasa SPT ütemezési szabály alkalmazásával. Egygépes termelésiütemezési feladat. Az ütemezés célja a befejezési idők összegének minimalizálása, ezáltal az átlagos készletszint minimalizálása. SPT Shortest Processing Time (műveleti idő szerint nemcsökkenő munkasorrend) A megoldás optimális ütemtervet eredményez. Bővítés: 1|di|Lmax Egygépes termelésiütemezési feladat. 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; //azonsito long ProcT; //muveleti ido long StartT; //kezdesi ido long EndT; //befejezesi ido long d; //hatarido long L; //keses }T_JOB; //Munka (Job) typedef struct{ long Csum; //befejezesi idopontok osszege double ASL; //atlagos keszletszint long Lmax; //legnagyobb keses }T_OBJF; //celfuggveny, objective function void Simulation(T_JOB* job, int* sch, int NJ, int t_ref); void Evaluate(T_JOB* job, int* sch, int NJ, T_OBJF* obj); void Print_Job_Gantt(T_JOB* job, int* sch, int NJ); //idotabla megjelenitese void SPT_rule(T_JOB* job, int* sch, int NJ); void EDD_rule(T_JOB* job, int* sch, int NJ); int main(int argc, char* argv[]) { int i; //futoindex a munkakhoz int NJ; //munkak szama T_JOB* job; //strukturavektorra mutato pointer int* sch; //utemterv vektorara mutato pointer long t_ref = 0; //referencia idopont T_OBJF obj; printf("\n Egygepes gyartorendszer utemezese."); printf("\n Munkak szama:"); scanf("%d", &NJ); //betoltes bill.-rol //memoriafoglalas job = (T_JOB*) calloc( NJ, sizeof(T_JOB) ); sch = (int*) calloc( NJ, sizeof(int) ); //input adatok generalasa for (i=0; iCsum = Csum; obj->ASL = (double) Csum / job[ sch[NJ-1] ].EndT; obj->Lmax = Lmax; } void Print_Job_Gantt(T_JOB* job, int* sch, int NJ) { int i; printf("\n Sorszam \t Munka \t Indit \t Befejez \t Hatarido \t Keses"); for (i=0; i job[ sch[j] ].ProcT ) { //csere temp = sch[i]; sch[i] = sch[j]; sch[j] = temp; } } void EDD_rule(T_JOB* job, int* sch, int NJ) { //EDD szerinti rendezes int i, j; int temp; for ( i=0; i < NJ-1; i++) for ( j=i+1; j <= NJ-1; j++ ) if ( job[ sch[i] ].d > job[ sch[j] ].d ) { //csere temp = sch[i]; sch[i] = sch[j]; sch[j] = temp; } }