遗传算法C++简短代码
时间: 2024-09-24 08:01:09 浏览: 30
遗传算法是一种模拟自然选择过程的优化技术,常用于解决复杂的优化问题。以下是C++实现遗传算法的一个非常简化的基本版本,它包括个体(solution)、种群(population)、交叉(crossover)、变异(mutation)和选择(selection)等关键步骤:
```cpp
#include <iostream>
#include <vector>
#include <random>
// 假设我们有一个简单的解空间表示为整数数组
struct Individual {
std::vector<int> genes;
};
// 比较适应度函数
bool compareFitness(const Individual& a, const Individual& b) {
return a.getFitness() > b.getFitness();
}
class GeneticAlgorithm {
private:
std::vector<Individual> population; // 种群
int popSize, numGenerations; // 种群大小和代数
public:
GeneticAlgorithm(int size, int generations) : popSize(size), numGenerations(generations) {}
void initializePopulation() {
for (int i = 0; i < popSize; ++i) {
population.push_back(Individual()); // 生成随机初始个体
}
}
// 选择操作
Individual selection() {
std::vector<Individual> parents(popSize);
// 使用轮盘赌选择法或其他策略
for (size_t i = 0; i < popSize; ++i) {
double r = static_cast<double>(std::rand()) / RAND_MAX;
int cumProb = 0;
for (const auto& individual : population) {
cumProb += individual.getFitness();
if (r <= cumProb) {
parents[i] = individual;
break;
}
}
}
return parents[0]; // 返回一个父母个体
}
// 交叉操作
Individual crossover(const Individual& parent1, const Individual& parent2) {
// 这里简单地用单点交叉
Individual offspring = parent1;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, offspring.genes.size() - 1);
int crossoverPoint = dis(gen);
offspring.genes[crossoverPoint] = parent2.genes[crossoverPoint];
return offspring;
}
// 变异操作
Individual mutate(Individual& individual) {
for (auto& gene : individual.genes) {
gene += rand() % 10; // 一个简单的变异操作
}
return individual;
}
void run() {
initializePopulation();
for (int generation = 0; generation < numGenerations; ++generation) {
// 更新代
population.clear();
for (size_t i = 0; i < popSize; ++i) {
Individual parent1 = selection();
Individual parent2 = selection();
Individual child = crossover(parent1, parent2);
child = mutate(child);
population.push_back(child);
}
// 打印当前最佳解
std::cout << "Generation " << generation + 1 << ": Best fitness = " << population[0].getFitness() << std::endl;
}
}
};
int main() {
GeneticAlgorithm ga(50, 100); // 创建一个包含50个体的遗传算法,运行100代
ga.run();
return 0;
}
```
这只是一个基础示例,实际应用中可能会更复杂,包括更多的进化算子、适应度函数和控制参数等。
阅读全文