资源简介
本程序使用遗传算法来解决背包问题,0-1背包问题,使用C语言编写,带测试数据
代码片段和文件信息
#include
#include
#include
#include
#include
#define ROUND 1500
#define INIT 100 //初始染色体数目
#define TotalGoods 50//30 //货物总数
#define Load 300//550 //背包总容量
int Weights[TotalGoods]; //存储每件货物重量数组
int Values[TotalGoods]; //存储每件货物价值数组
int TotalWeights[INIT]; //存储每个组合的总重量
int TotalValues[INIT]; //存储每个组合的总价值
double Fitness[INIT]; //适应度
char ParentChromosome[INIT][TotalGoods+1];//存储父代基因组合,即染色体
char ChildChromosome[INIT][TotalGoods+1]; //存储子代基因组合,即染色体
double Prob[INIT]; //每个组合的选择概率,用于轮盘赌选择
int count = 0;
/*******************************************************/
//读取配置文件
//Line1: 货物重量
//Line2: 货物价值
//Line3……:备选初始组合,因为初始组合是随机产生的,不能保证满足“重量和<背包容量”,须在本程序中进行判断
/******************************************************/
void ReadConfFIle(char *filename)
{
int i j;
int sum=0;
char *fname = filename;
FILE *fid = fopen(fname “r“);
for (i=0; i< TotalGoods; i++)
{
fscanf(fid “%d“&Weights[i]);
}
for (i=0; i< TotalGoods; i++)
{
fscanf(fid “%d“ &Values[i]);
}
//从文件中读取满足约束条件的组合作为初始组合
for (i=0; i< INIT; i++)
{
fscanf(fid “%s“ &ParentChromosome[i]);
sum=0;
for (j=0; j< TotalGoods; j++)
{
sum += (int)(ParentChromosome[i][j]-48) * Weights[j];
}
if(sum >= Load)
{
i--;
}
}
fclose(fid);
}
/*******************************************/
//计算所有个体的适应度
//得到适应度数组
//输入:
// char Chromosome[][]: 父辈基因的组合
//输出:
// double *fitness : 所有基因组合的适应度
/******************************************/
void CalculateFitness(char Chromosome[][TotalGoods+1], double *fitness )
{
int ij;
for (i=0; i< INIT; i++)
{
TotalValues[i] = 0;
TotalWeights[i]=0;
for (j=0; j< TotalGoods; j++)
{
TotalWeights[i]+=Weights[j]*(int)(Chromosome[i][j]-48);
TotalValues[i] +=Values[j] *(int)(Chromosome[i][j]-48);
}
fitness[i]=(double)TotalValues[i];
}
}
/********************************************************/
//通过轮盘赌来选择确定选择交叉的父染色体
//parent中存储了两个选择的父染色体的下标
//输入:
// double *fitness: 适应度,即每一个组合的价值
// double *prob : 每个组合的选择概率
//输出:
// int *parent : 选择出来的两个父染色体的标号
/*******************************************************/
void RoundRobinSelection(double *fitness double *prob int *parent)
{
double FintnessSum = 0;
int i j;
double r1 r2 r;
double ProbSum=0;
int parent1 parent2;
for (i=0; i< INIT; i++)
{
FintnessSum += fitness[i];
}
for (i=0; i< INIT; i++)
{
prob[i] = (float)fitness[i] / FintnessSum;
}
r1 = rand() /(double) (RAND_MAX);
r2 = rand()/(double) (RAND_MAX);
if(r1>r2)
{
r= r1;
r1 = r2;
r2 = r;
}
for (i=0; i< INIT-1; i++)
{
if (ProbSum < r1 && ProbSum + prob[i] >= r1)
{
parent[0] = i;
break;
}
ProbSum += prob[i];
}
f
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 531968 2015-03-06 16:13 GA_Knapsack\0-1背包问题测试数据(提供参考).xls
文件 31232 2015-03-06 20:15 GA_Knapsack\Debug\GA_Knapsack.exe
文件 404552 2015-03-06 20:15 GA_Knapsack\Debug\GA_Knapsack.ilk
文件 429056 2015-03-06 20:15 GA_Knapsack\Debug\GA_Knapsack.pdb
文件 11734 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug\BuildLog.htm
文件 19488 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug\GA.obj
文件 663 2015-03-06 11:40 GA_Knapsack\GA_Knapsack\Debug\GA_Knapsack.exe.em
文件 728 2015-03-06 11:40 GA_Knapsack\GA_Knapsack\Debug\GA_Knapsack.exe.em
文件 621 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug\GA_Knapsack.exe.intermediate.manifest
文件 65 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug\mt.dep
文件 60416 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug\vc90.idb
文件 69632 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug\vc90.pdb
文件 6754 2015-03-06 20:39 GA_Knapsack\GA_Knapsack\GA.cpp
文件 3980 2015-03-06 11:38 GA_Knapsack\GA_Knapsack\GA_Knapsack.vcproj
文件 1421 2015-03-06 20:39 GA_Knapsack\GA_Knapsack\GA_Knapsack.vcproj.STAP1ZWWA147.Administrator.user
文件 3554 2015-03-06 13:05 GA_Knapsack\GA_Knapsack\input.txt
文件 983 2015-03-06 20:47 GA_Knapsack\GA_Knapsack\ReadMe.txt
文件 133246 2015-03-06 20:17 GA_Knapsack\GA_Knapsack\result.txt
文件 15993 2015-03-06 19:24 GA_Knapsack\GA_Knapsack\test.txt
文件 0 2015-03-06 19:59 GA_Knapsack\GA_Knapsack\test2.txt
文件 584704 2015-03-06 20:39 GA_Knapsack\GA_Knapsack.ncb
文件 899 2015-03-06 11:07 GA_Knapsack\GA_Knapsack.sln
..A..H. 17408 2015-03-06 20:39 GA_Knapsack\GA_Knapsack.suo
目录 0 2015-03-06 20:15 GA_Knapsack\GA_Knapsack\Debug
目录 0 2015-03-06 16:22 GA_Knapsack\Debug
目录 0 2015-03-06 20:39 GA_Knapsack\GA_Knapsack
目录 0 2015-03-06 20:47 GA_Knapsack
----------- --------- ---------- ----- ----
2329097 27
............此处省略0个文件信息
相关资源
- 贪心算法网友博客改进版
- 遗传算法求解混合流水车间调度问题
- 遗传算法实现Rosenbrock函数的求解过程
- 0-1背包问题-递归算法 c语言实现
- 遗传算法解决TSP问题 旅行商问题 程序
- 基于遗传算法的人工生命模拟 AL_GA.
- N皇后C++源代码---回溯法、遗传算法、
- 遗传算法求解Rosenbrock最小值
- 四变量遗传算法求最小值程序C++
- 基于遗传算法的随机规划matlab
- 0-1背包问题C语言源码
- NSGA多目标遗传算法
- 背包问题之贪婪算法求解C语言源代码
- 基于遗传算法的最短路径的程序的开
- c++版遗传算法基本算法
- 算法部分背包问题的求解
- 贪心法解决背包问题c语言代码
- C#遗传算法程序可视化版
- 贪心算法编写的01背包问题c/c++
- 遗传算法.cpp
- 基于遗传算法的带容量限制的P-media
- 遗传、禁忌、模拟退火解背包问题
- 用回溯法、蛮力法解决01背包问题
- 背包问题C语言实现, 动态规划
- C语言-遗传算法的排课源码
- 用回溯法解决01背包问题C语言实现
- 遗传算法求解TSP旅行商问题C语言源代
- 遗传算法、免疫算法源码C
- 遗传算法求解10城市的旅行商问题的
- 利用遗传算法解决TSP问题c++
评论
共有 条评论