本篇文章给大家谈谈c语言遗传算法,以及c语言遗传算法tsp问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言 遗传算法求f(x,y)=(1-x)^2+100(y-x^2)^2 的最小值 x,y都属于【0,2】2、c语言遗传算法编码多个变量怎么编码3、c语言实现*/遗传算法改进BP神经网络原理和算法实现怎么弄
C语言 遗传算法求f(x,y)=(1-x)^2+100(y-x^2)^2 的最小值 x,y都属于【0,2】
#include “stdio.h”
#include “math.h”
#define NUM (64)
#define BITS (20)
typedef unsigned int uint;
typedef struct {
uint d;
double v;
double x;
double y;
}One;
typedef struct {
One pop[NUM];
}Gen;
Gen group;
#define Rand_pop() (rand() ((1 BITS) -1))
double range[2][2] = {{0.0, 2.0}, {0.0, 2.0}};
//min as best
double get_value(double x, double y) {
return pow(1.0-x, 2) + 100.0*pow(y-x*x, 2);
}
void get_xy(uint v, double* xx, double *yy) {
uint mx = (1 (BITS/2));
uint x = v (mx – 1);
uint y = v (BITS/2);
*xx = range[0][0] + x*range[0][1]/mx;
*yy = range[1][0] + y*range[1][1]/mx;
}
void set_one(One* one, uint d)
{
one-d = d;
get_xy(d, one-x, one-y);
one-v = get_value(one-x, one-y);
}
void half_range(double *range, double x){
double hf = range[1]*0.3;
if (x – hf range[0]) {
range[0] = x – hf;
}
range[1] = hf*2;
}
void scale_range()
{
One* one = group.pop[0];
int i;
uint hf = BITS/2;
uint mx = (1 hf);
half_range(range[0], one-x);
half_range(range[1], one-y);
for (i = 0; i NUM; i++) {
if (one[i].x range[0][0]
one[i].x range[0][0] + range[0][1]
one[i].y range[1][0]
one[i].y range[1][0] + range[1][1]) {
one[i].d = (uint) ((one[i].x – range[0][0])/range[0][1]*mx) +
((uint)((one[i].y – range[1][0])/range[1][1]*mx) hf);
}
else {
set_one(one[i], one[i].d);
}
}
printf(“\n”);
}
int init_pop() {
int i;
One* one = group.pop[0];
for (i = 0; i NUM; i++) {
uint d = Rand_pop();
set_one(one, d);
one++;
}
return 0;
}
int sort_pop()
{
int i,j;
One* one = group.pop[0];
for (i = 0; i NUM – 1; i++) {
for (j = i + 1; j NUM; j++) {
if (one[i].v one[j].v) {
One tmp;
tmp = one[i];
one[i] = one[j];
one[j] = tmp;
}
}
}
}
void best_pop(int loop)
{
One* one = group.pop[0];
printf(“loop %d: x[%lf %lf] y[%lf %lf]\n”, loop, range[0][0], range[0][1], range[1][0], range[1][1]);
printf(” x:%lf y:%lf value:%lf\n\n”, one-x, one-y, one-v);
}
uint Rand_bits(uint* pos) {
uint l, p;
uint r = rand();
p = r % BITS;
l = (r 5) % 3;
if (l + p = BITS) l = 1;
if (pos) *pos = p;
return ((1 l) – 1) p;
}
uint Rand_sel() {
uint r = rand();
uint c = r % 100;
uint l = NUM / 4;
uint v = (r 7) % l;
if (c 65) {
return v;
}
if (c 35) {
return l + v;
}
if (c 10) {
return (l * 2) + v;
}
return l * 3 + v;
}
#define SWAP(m, n, type) {type _tmp; _tmp = m; m = n; n = _tmp;}
void sel_pop2(One* a, One* b, One* ga, One* gb)
{
if (a-v b-v) SWAP(a, b, One*);
if (ga-v gb-v) SWAP(ga, gb, One*);
if (ga-v a-v) *a = *ga;
if (gb-v b-v) *b = *gb;
}
void cross_pop(One* a, One* b) {
uint bit;
One ga, gb, *g1 = ga, *g2 = gb;
bit = Rand_bits(NULL);
set_one(ga, (a-d bit) | (b-d ~bit));
set_one(gb, (b-d bit) | (a-d ~bit));
sel_pop2(a, b, ga, gb);
}
void chg_pop() {
uint bit, d, pos;
One* one, ga;
uint s = Rand_sel();
uint raw;
one = group.pop[s];
bit = Rand_bits(pos);
raw = (~one-d) bit;
d = raw | ((~bit) one-d);
set_one(ga, d);
if (ga.v one-v) {
*one = ga;
}
}
void iter_pop()
{
int i;
One* one = group.pop[0];
sort_pop();
for (i = 0; i NUM; i++) {
uint a, b;
chg_pop();
a = Rand_sel();
do {
b = Rand_sel();
}while (a == b);
cross_pop(one[a], one[b]);
}
}
#define MAX_LOOP (100)
int main() {
int i;
srand(time(NULL));
init_pop();
for (i = 0; i MAX_LOOP; i++) {
iter_pop();
best_pop(i);
if (i i % 5 == 0)scale_range();
}
return 0;
}
c语言遗传算法编码多个变量怎么编码
采用位域表示方法,可以节省存储,又能方便访问和操作。
struct bs {
unsigned v0:3;
unsigned v1:3;
unsigned v2:3;
……
unsigned v31:3;
}data;
每个变量只需要三个bit,32个变量需要:32*3/8=12个字节,效率非常高。这里v0~v31也可以取更有意义的名字。
c语言实现*/遗传算法改进BP神经网络原理和算法实现怎么弄
遗传算法有相当大的引用。遗传算法在游戏中应用的现状在遗传编码时, 一般将瓦片的坐标作为基因进行实数编码, 染色体的第一个基因为起点坐标, 最后一个基因为终点坐标, 中间的基因为路径经过的每一个瓦片的坐标。在生成染色体时, 由起点出发, 随机选择当前结点的邻居节点中的可通过节点, 将其坐标加入染色体, 依此循环, 直到找到目标点为止, 生成了一条染色体。重复上述操作, 直到达到指定的种群规模。遗传算法的优点:1、遗传算法是以决策变量的编码作为运算对象,可以直接对集合、序列、矩阵、树、图等结构对象进行操作。这样的方式一方面有助于模拟生物的基因、染色体和遗传进化的过程,方便遗传操作算子的运用。另一方面也使得遗传算法具有广泛的应用领域,如函数优化、生产调度、自动控制、图像处理、机器学习、数据挖掘等领域。2、遗传算法直接以目标函数值作为搜索信息。它仅仅使用适应度函数值来度量个体的优良程度,不涉及目标函数值求导求微分的过程。因为在现实中很多目标函数是很难求导的,甚至是不存在导数的,所以这一点也使得遗传算法显示出高度的优越性。3、遗传算法具有群体搜索的特性。它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,一方面可以有效地避免搜索一些不必搜索的点。另一方面由于传统的单点搜索方法在对多峰分布的搜索空间进行搜索时很容易陷入局部某个单峰的极值点,而遗传算法的群体搜索特性却可以避免这样的问题,因而可以体现出遗传算法的并行化和较好的全局搜索性。4、遗传算法基于概率规则,而不是确定性规则。这使得搜索更为灵活,参数对其搜索效果的影响也尽可能的小。5、遗传算法具有可扩展性,易于与其他技术混合使用。以上几点便是遗传算法作为优化算法所具备的优点。遗传算法的缺点:遗传算法在进行编码时容易出现不规范不准确的问题。
关于c语言遗传算法和c语言遗传算法tsp问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。