#include #include #include double f(double y) { return y * y + 5.0 * y + 6.0; } int main(void) { double s0 = -5.0; int n = 1; // number of variables int p = n * 20; // máximo de iterações local (perturbações da solução atual) int l = n * 10; // Número máximo de sucessos por iteração double alfa = 0.98; double T0 = 5.0; double deltay = 5.0; double s = s0; double T = T0; int j = 1; // contador global int k = 1; // contador de soluções aceitas int c = 1; // crystallization factor srand(time(NULL)); // loop principal while (k != 0) { int i = 1; // contador local k = 0; while (k < l && i < p) { //slinha=s+(2*rand-1); double d = 0.0; for (int kk = 0 ; kk < c ; kk ++) { d += 2.0 * rand()/(double)RAND_MAX - 1.0; } d /= (double)c * deltay; double delta = f(s + d) - f(s); if (delta < 0 || exp(-delta/T) > rand()/(double)RAND_MAX) { s += d; k ++; if (c > 1) c --; } else if (c < 80) c ++; i ++; cout << "*"; } cout << endl; T *= alfa; } cout << "Result = " << s << endl; return 0; }