Hrvatski matematički elektronski časopis math.e | |
http://www.math.hr/~mathe/ |
Heuristički algoritmi za 0-1 problem naprtnjače
Anamari Nakić
array annealing_algorithm (int cmax, real T0, real a, array p,array w, int n, real M) { array X, Y; real CurW, T; int j, c; c = 0; T = T0; X = [0,...,0] ; // = [x0, ..., xn-1] CurW = 0; Xbest = X; while ( c <= c_max ) { j = random_int(0, n-1); Y = X; Y[j] = 1 - X[j]; if (Y[j] == 1) && (CurW + w[j] > M) Y = Fail; // Y nije dopustivo rjesenje if ( Y != Fail ) { if (Y[j] == 1) { X = Y; CurW = CurW + w[j]; if ( P(X) > P(Xbest) ) Xbest = X; } else { r = random_real(0,1); if ( r < e(-p[j]/T) ) { X = Y; CurW = CurW - w[j]; } } } c = c + 1; T = a*T; } return Tbest; } |