資源簡介
本程序使用遺傳算法來解決背包問題,0-1背包問題,使用C語言編寫,帶測試數(shù)據(jù)

代碼片段和文件信息
#include
#include
#include?
#include?
#include?
#define?ROUND?1500
#define?INIT?100????????????????//初始染色體數(shù)目
#define?TotalGoods?50//30??????????//貨物總數(shù)
#define?Load???????300//550?????????//背包總?cè)萘???
int?Weights[TotalGoods];??????????????????//存儲每件貨物重量數(shù)組????
int?Values[TotalGoods];???????????????????//存儲每件貨物價值數(shù)組
int?TotalWeights[INIT];?????????????//存儲每個組合的總重量
int?TotalValues[INIT];??????????????//存儲每個組合的總價值
double?Fitness[INIT];????????????????????????//適應(yīng)度
char?ParentChromosome[INIT][TotalGoods+1];//存儲父代基因組合,即染色體
char?ChildChromosome[INIT][TotalGoods+1];?//存儲子代基因組合,即染色體
double?Prob[INIT];???????????????????//每個組合的選擇概率,用于輪盤賭選擇
int?count?=?0;
/*******************************************************/
//讀取配置文件?????????????
//Line1:????貨物重量
//Line2:????貨物價值
//Line3……:備選初始組合,因為初始組合是隨機(jī)產(chǎn)生的,不能保證滿足“重量和<背包容量”,須在本程序中進(jìn)行判斷
/******************************************************/
void?ReadConfFIle(char?*filename)
{
int?i?j;
int?sum=0;
char?*fname?=?filename;
FILE?*fid?=?fopen(fname?“r“);
for?(i=0;?i {
fscanf(fid?“%d“&Weights[i]);
}
for?(i=0;?i {
fscanf(fid?“%d“?&Values[i]);
}
//從文件中讀取滿足約束條件的組合作為初始組合
for?(i=0;?i {
fscanf(fid?“%s“?&ParentChromosome[i]);
sum=0;
for?(j=0;?j {
sum?+=?(int)(ParentChromosome[i][j]-48)?*?Weights[j];
}
if(sum?>=?Load)
{
i--;
}
}
fclose(fid);
}
/*******************************************/
//計算所有個體的適應(yīng)度
//得到適應(yīng)度數(shù)組
//輸入:
// ??char?Chromosome[][]:?父輩基因的組合
//輸出:
//????double?*fitness????:?所有基因組合的適應(yīng)度
/******************************************/
void?CalculateFitness(char??Chromosome[][TotalGoods+1],?double?*fitness?)
{
int?ij;
for?(i=0;?i {
TotalValues[i]?=?0;
TotalWeights[i]=0;
for?(j=0;?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中存儲了兩個選擇的父染色體的下標(biāo)
//輸入:
//?????double?*fitness:?適應(yīng)度,即每一個組合的價值
//?????double?*prob???:?每個組合的選擇概率
//輸出:
//?????int?*parent????:?選擇出來的兩個父染色體的標(biāo)號
/*******************************************************/
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 {
FintnessSum?+=?fitness[i];
}
for?(i=0;?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 {
if?(ProbSum?=?r1)
{
parent[0]?=?i;
break;
}
ProbSum?+=?prob[i];
}
f
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????531968??2015-03-06?16:13??GA_Knapsack\0-1背包問題測試數(shù)據(jù)(提供參考).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個文件信息
評論
共有 條評論