目录
前言
遗传算法 (GA )的C语言实现
模拟退火算法分析
分支限界(BranchandBound)算法
龙格-库塔(Runge-Kutta)方法数学原理及实现
层次分析法(AnalyticHierarchyProcess)
一般线性最小二乘法
无约束最优化方法
数理统计
数理统计中的点估计
数理统计中的区间估计
单纯形法--求解线性规划
数值积分方法
神经网络学习之M-P模型
神经网络学习之BP神经网络
决策树学习之概念与构造算法
现代优化算法之模拟退火
现代优化算法之遗传算法
现代优化算法之禁忌搜索算法
本文档使用看云构建 -2-
前言
前言
原文出处 :计算机数学模型
作者 :u013007900
本系列文章经作者授权在看云整理发布 ,未经作者允许 ,请勿转载 !
计算机数学模型
里面收集部分工业界常用算法与数学证明 ,以及部分数学建模问题的求解。
本文档使用看云构建 -3-
遗传算法 (GA )的C语言实现
遗传算法 (GA )的C语言实现
问题 :
在下面的程序中将要运用遗传算法对一个多项式求最小值
要求在(-8,8)间寻找使表达式达到最小的x ,误差为0.001
问题分析 :
编码 :采用常规码 ,即二进制码编码。构造简单 ,交叉、变异的实现非常容易 ,同时解的表达也很简洁、
直观。可以每0.001取一个点 ,这样理论误差讲小于0.0005 ,可以满足题目中的误差要求。此事总的求解
空间为 :
N=(8-(-8))*1000=160000
可以用n=14位二进制来表示。
群体规模m :
群体规模m可以选择n~2n的一个确定的数 ,这里选择m=20
初始种群的选取 :
在这里初始种群将在值域范围内随机选取
终止规则 :
①最优解在连续的20次循环中改变量小于0.01 ,此事认为这个最优解为满足题目要求的最优解 ,求解成
功 ,退出程序
②总的循环次数大于1200次时 ,循环也将结束 ,这种情况按照求解失败处理
交叉规则 :
采用最常用的双亲双子法
选择 :
在进行交叉、变异后 ,种群中的个体个数达到2m个 ,将这2m个染色体按其适应度进行排序 ,保留最优的
m个淘汰其他的 ,使种群在整体上得到进化
#include
#include
#include
#include
本文档使用看云构建 -4-
遗传算法 (GA )的C语言实现
#defineSUM20//总共的染色体数量
#defineMAXloop1200//最大循环次数
#defineerror0.01//若两次最优值之差小于此数则认为结果没有改变
#definecrossp0.7//交叉概率
#definemp0.04//变异概率
//用于求解函数y x^6-10x^5-26x^4+344x^3+193x^2-1846x-1680在 (-8,8)之间的最小值
structgen//定义染色体结构
{
intinfo; //染色体结构,用一整型数的后14位作为染色体编码
floatsuitability; //次染色体所对应的适应度函数值,在本题中为表达式的值
};
structgengen_group[SUM];//定义一个含有20个染色体的组
structgengen_new[SUM];
struct