请问可以写一下遗传算法部分的c语言代码吗
时间: 2023-01-28 18:45:10 浏览: 74
当然可以!遗传算法是一种模拟自然界中生物进化的过程来解决优化问题的算法。它通过迭代地进行“选择”、“交叉”和“变异”来产生新的解决方案,并通过适应度函数来评估每个解决方案的优劣。
下面是一个简单的遗传算法的 C 语言代码示例,它用于解决函数 f(x)=x^2-10x+5 的最小值问题:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define POPULATION_SIZE 100 // 种群大小
#define MAX_GENERATIONS 1000 // 最大迭代次数
#define MUTATION_RATE 0.01 // 变异概率
#define CROSSOVER_RATE 0.7 // 交叉概率
// 适应度函数
double fitness(double x) {
return x * x - 10 * x + 5;
}
// 随机生成一个实数
double rand_double() {
return (double)rand() / RAND_MAX;
}
int main() {
// 初始化种群
double population[POPULATION_SIZE];
for (int i = 0; i < POPULATION_SIZE; i++) {
population[i] = rand_double() * 20 - 10; // 生成 [-10, 10] 之间的随机数
}
// 迭代求解
for (int g = 0; g < MAX_GENERATIONS; g++) {
// 选择
double new_population[POPULATION_SIZE];
for (int i = 0; i < POPULATION_SIZE; i++) {
int idx1 = rand() % POPULATION_SIZE;
int idx2 = rand() % POPULATION_SIZE;
double x1 = population[idx1];
double x2 = population[idx2];
if (fitness(x1) < fitness(x2)) {
new_population[i] = x1;
} else {
new_population[i] = x2;
}
}
// 交叉
for (int i =
阅读全文