C语言遗传算法求f(x) = 1/(x1^2+x2^2+x3^2+x4^2),x在[-5,5]内最小值

本文介绍如何使用C语言实现遗传算法求解f(x) = 1/(x1^2+x2^2+x3^2+x4^2)在[-5,5]内的最小值。通过二进制编码随机数进行初始化、编码、解码,并在迭代过程中执行选择、交配和变异操作。尽管课程教学质量不高,但作者理解了遗传算法的核心原理,交配对应大调,变异对应微调。代码适用于各类遗传算法求最值问题,适应度函数和best更新需根据具体问题调整。" 125410538,11041825,深度学习在工业品组件缺陷检测中的应用——数据预处理技术,"['深度学习', '人工智能', '图像处理', '神经网络', '边缘检测']
摘要由CSDN通过智能技术生成

遗传算法基本步骤:初始化、迭代(选择、交配、变异、评价)
因为C语言的随机性不是很好,故采用 二进制编码随机数,再解码就可以得到很好的任意的随机数。所以就变成了初始化、编码、解码、迭代(选择、交配、变异、评价)。
在这里插入图片描述

我们老师上课特别水,但是我觉得我听懂了他反复强调的、反复比喻的遗传算法,他说交配是大调,变异是微调

我觉得注释已经写得够清楚了,如果有不太明白的地方可以留言呀。凡是遗传算法求最值的都可以用这个代码,只不过适应度函数和best更新要改。

//遗传算法 编译环境 vs 2019 
#include <iostream>
using namespace std;
#include <stdio.h> 
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define SIZE 10			//种群初始规模
#define ROW 4           //几元函数ROW就是几
#define GEN 5000		//迭代代数
#define P_COP 0.88		//交叉概率
#define P_VAR 0.1		//变异概率 

//精度是自己设的,这里将精度置为0.0001,则编码长度为17 
int len = log(pow(10, 5)) / log(2);

int bin[SIZE][ROW][20] = {
    0 };		//整型三维数组,存放初始种群的二进制编码
float  deci[SIZE][ROW] = {
    0 };		//浮点型二维数组,存放种群的十进制浮点数
float new_deci[SIZE][ROW] = {
    0 };	//浮点型二维数组,存放下一代种群的十进制浮点数

float fit[SIZE] = {
    0 };			//浮点型数组,存放种群的适应度值 
float prob[SIZE] = {
    0 }; 			//浮点型数组,存放轮盘赌中种群的概率及积概率
float sum = 0;						//存放种群总适应度值,用于计算积概率

float best = 0;						//存放所有种群的最优适应度值
float b_deci[ROW] = {
    0 }; 			//存放最优解空间
int rou[SIZE] = {
    0 };				//存放轮盘赌选中的下标 
float rad;							//[0,1]内的随机小数 

int f_cop[SIZE] = {
    0 };			//存储参加交配的染色体下标

void random_01();					//产生区间为[0,1],精度为0.01的随机小数 
void init();						//种群初始化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值