/*------------------------------------------------------------------------------- F|permut|max(Ci) Utemezesi fedadat megoldasa véletlenszerűen kereső algoritmus alkalmazásával. Többgépes egyutas előzés nélküli termelésiütemezési feladat. Az ütemezés célja a legkésőbbi befejezési időpont minimalizálása, ezáltal a teljes rendeléscsoport átfutási idejének minimalizálása. Összehasonlítás a CDS-algoritmussal. A keresési módszer lassabb de jobb közelítést ad. -------------------------------------------------------------------------------*/ #include #include #include typedef struct{ long id, * SetT, * ProcT, * OptT, * StartT, * EndT; }T_JOB; long simulation(int* S, T_JOB* job, int n, int m, long ref_T); void job_print(int* Sch, T_JOB* job, int n, int m); void sim_data_print(int* Sch, T_JOB* job, int n, int m); void Johnson_ald(int* Sch, T_JOB* job, int n, int x, int y ); void copy(int* s, int* d, int n); void neigbour( int* S_inic, int* S, int n); void random_search(int* S, T_JOB* job, int n, int m, int STEP, int LOOP); int main(int argc, char* argv[]) { T_JOB* job; int n; //jobok darabszama int m; //gepek szama int i; //job futoindex int j; //gepek futoindex int * Sch; //utemterv int *r; //rendezes Johnson alg. elott int x, y; //elso masodik Johnson long Cmax; //maximalis befejezesi ido long Cbest; //kereses soran legjobb celfv ertek int *Sch_best; //kereses soran talalt legjobb megoldas //virtualis adatbazis lekerdeze randomize(); printf("\n Kerem a jobok szamat:"); scanf("%d", &n); //n erteket kap bill-rol printf("\n Kerem a gepek szamat:"); scanf("%d", &m); //m erteket kap bill-rol job = (T_JOB*) calloc(n, sizeof(T_JOB) ); randomize(); for (i=0; i Cmax ) { Cbest = Cmax; for(i=0; i g ) { g_n_best = g; copy(S, S_n_best, n); } }//loop copy( S_n_best, S_inic, n); if (g_best > g_n_best) { g_best = g_n_best; copy( S_n_best, S_best, n); } } //step copy(S_best, S, n); free( S_best); free( S_n_best); free( S_inic); } void neigbour( int* S_inic, int* S, int n) { int d; int temp; copy(S_inic, S, n); d = random(n); if ( d==0 ) { temp = S[n-1]; S[n-1] = S[d]; S[d] = temp; } else { temp = S[d-1]; S[d-1] = S[d]; S[d] = temp; } } void copy(int* s, int* d, int n) { int i; for (i=0; i tj) { temp = r[i]; r[i] = r[j]; r[j] = temp; } } b=0; l=n-1; //korrekcio!!!! for(i=0; i