首次适应算法的基础上修改成最佳适应算法的代码
时间: 2023-11-28 08:48:09 浏览: 34
这里提供一个基于首次适应算法的修改成最佳适应算法的示例代码,供参考:
```
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int POP_SIZE = 10;
const int GENE_SIZE = 20;
const int MAX_ITER = 100;
const double MUTATION_RATE = 0.1;
double fitness[POP_SIZE];
int population[POP_SIZE][GENE_SIZE];
int best_individual[GENE_SIZE];
double best_fitness = 0;
void init_population() {
srand(time(NULL));
for (int i = 0; i < POP_SIZE; i++) {
for (int j = 0; j < GENE_SIZE; j++) {
population[i][j] = rand() % 2;
}
}
}
double calc_fitness(int index) {
double sum = 0;
for (int i = 0; i < GENE_SIZE; i++) {
sum += population[index][i];
}
return sum / GENE_SIZE;
}
void calc_fitness_all() {
double sum = 0;
for (int i = 0; i < POP_SIZE; i++) {
fitness[i] = calc_fitness(i);
sum += fitness[i];
}
if (sum / POP_SIZE > best_fitness) {
best_fitness = sum / POP_SIZE;
for (int i = 0; i < GENE_SIZE; i++) {
best_individual[i] = population[i][i];
}
}
}
void selection() {
int new_population[POP_SIZE][GENE_SIZE];
for (int i = 0; i < POP_SIZE; i++) {
int parent1 = rand() % POP_SIZE;
int parent2 = rand() % POP_SIZE;
int winner = fitness[parent1] > fitness[parent2] ? parent1 : parent2;
for (int j = 0; j < GENE_SIZE; j++) {
new_population[i][j] = population[winner][j];
}
}
for (int i = 0; i < POP_SIZE; i++) {
for (int j = 0; j < GENE_SIZE; j++) {
population[i][j] = new_population[i][j];
}
}
}
void mutation() {
for (int i = 0; i < POP_SIZE; i++) {
for (int j = 0; j < GENE_SIZE; j++) {
double r = (double)rand() / RAND_MAX;
if (r < MUTATION_RATE) {
population[i][j] = 1 - population[i][j];
}
}
}
}
int main() {
init_population();
for (int iter = 1; iter <= MAX_ITER; iter++) {
calc_fitness_all();
selection();
mutation();
}
cout << "Best fitness: " << best_fitness << endl;
cout << "Best individual: ";
for (int i = 0; i < GENE_SIZE; i++) {
cout << best_individual[i] << " ";
}
cout << endl;
return 0;
}
```
在这个示例代码中,我们将首次适应算法修改成最佳适应算法。具体来说,我们通过比较每一代种群中所有个体的适应度,找到当前最优解,并保存下来。在迭代结束后,输出最优解的适应度和基因序列。
需要注意的是,这个示例代码中仅仅演示了如何修改算法实现,而没有考虑具体的问题场景和适应度函数。在实际应用中,我们需要根据具体问题进行适当的修改。