用模拟退火算法求x^2+1的最小值的代码
时间: 2023-03-31 13:01:10 浏览: 123
基于matlab实现模拟退火算法求函数 f(x)的最小值点,.rar
以下是用模拟退火算法求x^2 + 1的最小值的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MAX_STEP 100000
#define T 100
#define T_MIN 1e-8
#define DELTA .99
double f(double x) {
return x * x + 1;
}
double sa() {
double x = , t = T, ans = f(x);
while (t > T_MIN) {
for (int i = ; i < MAX_STEP; i++) {
double nx = x + (rand() * 2 - RAND_MAX) * t;
double nf = f(nx);
double de = nf - ans;
if (de < || exp(-de / t) * RAND_MAX > rand()) {
x = nx;
ans = nf;
}
}
t *= DELTA;
}
return ans;
}
int main() {
srand(time(NULL));
printf("%.6lf\n", sa());
return ;
}
```
注意:以上代码仅供参考,实际应用中需要根据具体问题进行调整。
阅读全文