猴子算法是一种模拟退火算法,通过在随机搜索中引入猴子来提高搜索效率。猴子算法可以用于求解最优化问题,例如最大化目标函数值、最小化损失函数等。
以下是C++代码示例:
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
const int N = 1000; // 猴子个数
const int T = 10000; // 迭代次数
const double delta = 0.98; // 温度衰减因子
const double L = 100.0; // 搜索空间范围
const double eps = 1e-6; // 停止条件
double f(double x) {
// 目标函数
return sin(x) + cos(x);
}
int main() {
srand(time(NULL));
double t = L; // 初始温度
double x = rand() * 2 * L / RAND_MAX - L; // 初始解
double fx = f(x);
double x_best = x;
double fx_best = fx;
for (int i = 0; i < T; i++) {
for (int j = 0; j < N; j++) {
double x_new = x + (rand() * 2 - RAND_MAX) * t; // 猴子跳跃
if (x_new < -L || x_new > L) {
continue;
}
double fx_new = f(x_new);
if (fx_new - fx > eps) {
x = x_new;
fx = fx_new;
if (fx_new - fx_best > eps) {
x_best = x_new;
fx_best = fx_new;
}
} else if (exp((fx_new - fx) / t) * RAND_MAX < rand()) {
x = x_new;
fx = fx_new;
}
}
t *= delta; // 温度衰减
}
printf("Best solution: x = %lf, f(x) = %lf\n", x_best, fx_best);
return 0;
}
以上代码模拟了猴子算法的运行。