/* F|perm|Cmax ütemezési feladat heurisztikus megoldasa. Egyutas előzésnélküli, többoperációs termelésütemezési feladat. Szimuláció. A Simulation_FS 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. Speciális eset: F2|perm|Cmax Ütemezési fedadat megoldása Johnson-algoritmussal. A Johnson_alg fv optimális megoldást eredményez (két gép esetében). */ #include #include #define NObjF 1 typedef struct { int id; //azonosito long* ProcT; //muveleti idok long* StartT; //muvelet inditas long* EndT; //muvelet befejezese } T_JOB; //type of job void Simulation_FS(T_JOB* job, int NJ, int NM, int* s, long t_ref); void Print_Job_Gantt(T_JOB* job, int NJ, int NM, int* s); void Evaluation(T_JOB* job, int NJ, int NM, int* s, double* ObjF); void Print_ObjF(double* ObjF); void Johnson_alg(T_JOB* job, int NJ, int NM, int* s, int m1, int m2); int main(int argc, char* argv[]) { int NJ; //number of jobs, munkak szama int NM; //number of machine, gepek szama int i, m; //futoindex T_JOB* job; //munkak adatai int* sch; //schedule, utemterv long t_ref; //folyamat inditasanak idopontja double* ObjF; //objective function, celfuggveny ObjF = (double*) calloc(NObjF, sizeof(double) ); //vektor printf("\n F|perm|Cmax utemezesi feladat demo!"); printf("\n Munkak szama:"); scanf("%d", &NJ); printf("\n Gepek szama:"); scanf("%d", &NM); printf("\n Inditas idopontja: (pl. 5)"); scanf("%ld", &t_ref); //Modellepeites job = (T_JOB*) calloc(NJ, sizeof(T_JOB) ); //strukturavektor for( i=0; i= 2 ) { printf("\n Johnson sorrend a 0. es 1. gepre alapozva:"); Johnson_alg(job, NJ, NM, sch, 0, 1); Simulation_FS(job, NJ, NM, sch, t_ref); //Print_Job_Gantt(job, NJ, NM, sch); Evaluation(job, NJ, NM, sch, ObjF); Print_ObjF(ObjF); } getch(); //memoria felszabaditas for( i=0; i min( job[ r[j] ].ProcT[m1], job[ r[j] ].ProcT[m2] ) ) { //csere temp = r[i]; r[i] = r[j]; r[j] = temp; } //utemezes first = 0; last = NJ-1; for( i=0; i