资源简介
遗传算法解决背包问题(C++版本)【源代码+实验报告+可执行文件】
人工智能实验,绝对可以运行,理由详细的注释,方便新手学习。

代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
//定义问题的最大规模
#define max 100
//为题规模,即共有多少个包
int packageNum;
//每个包的重量
int packageWeight[max] = {53111579136814};
//每个包的价值
int packageValue[max] ={100520100604090405080};
//约束,背包的最大容量
int limitWeight;
//群体的规模
int colonySize;
//colonyState[i][k] 表示一个染色体
//colonyState[1...conlonySize][0|1] 表示一个群体
int colonyState[max][2][max];
// currAge 表示当前代的编号
// (currAge+1)%2 表示下一代的编号
int currAge = 0;
// 个体评价信息表
typedef struct tagIndivdualMsg
{
int index;
int value;
}IndivdualMsg;
IndivdualMsg indivdualMsg[max];
/////////////////////////////////////////////////////////////
//函数声明
void printColonyState(int nextAge);
/////////////////////////////////////////////////////////////
//初始化群体
void colonyInit()
{
int i j;
int w;
for(i=0; i {
//保证找到一个符合约束的染色体
w = limitWeight +1;
while(w > limitWeight)
{
w = 0;
for(j=0; j {
colonyState[i][currAge][j] = rand()%2;
w += packageWeight[j] * colonyState[i][currAge][j];
}
}
}
}
//对个体进行评价
int cmp(const void *a const void *b)
{
IndivdualMsg *x = (IndivdualMsg *)a;
IndivdualMsg *y = (IndivdualMsg *)b;
return y->value - x->value;
}
//适应度函数
void indivdualEstimate()
{
int i j;
for(i=0; i {
indivdualMsg[i].index = i;
indivdualMsg[i].value = 0;
for(j=0; j indivdualMsg[i].value += packageValue[j]*colonyState[i][currAge][j];
}
qsort(indivdualMsg colonySize sizeof(IndivdualMsg) cmp);
}
//终止循环的条件
bool stopFlag()
{
//进行n代进行后停止
static int n = 50;
if(n-- <= 0)
return false;
else
return true;
}
//赌轮选择
int gambleChoose()
{
int wheel[max] = {0};
int i = colonySize-1;
int choose;
wheel[i] = indivdualMsg[i].value;
for(i--; i>=0; i--)
wheel[i] = (indivdualMsg[i].value + wheel[i+1]) + colonySize*(colonySize-i);
int seed = abs(wheel[0]-(rand()%(2*wheel[0]+1)));
choose = colonySize-1;
while(seed > wheel[choose])
choose--;
return choose;
}
//交叉
void across(int male int female int index)
{
int nextAge = (currAge+1) %2;
int i j t;
int acrossBit = rand() % (packageNum-1) + 1;
for(j=0; j {
colonyState[index][nextAge][j] = colonyState[indivdualMsg[male].index][currAge][j];
colonyState[index+1][nextAge][j] = colonyState[indivdualMsg[female].index][currAge][j];
}
for(i=0; i {
t = colonyState[index][nextAge][i];
colonyState[index][nextAge][i] = colonyState[index+1][nextAge][i];
colonyState[index+1][nextAge][j] = t;
}
}
//变异
void aberrance(int index)
{
int seed nextAge;
nextAge = (currAge+1) %2;
//只有1/3的概率发生异变
seed = rand() %(packageNum*3);
if(seed < packageNum)
colonyState[index][nextAge][seed] = (colonyState[index][nextAge][seed] + 1) %2;
}
//处理死亡个体
void dealDeath()
{
int
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-06-02 20:46 遗传算法解决背包问题\
文件 615424 2013-05-22 16:58 遗传算法解决背包问题\bag.exe
目录 0 2013-06-02 20:45 遗传算法解决背包问题\bag_code\
目录 0 2013-06-02 20:45 遗传算法解决背包问题\bag_code\Debug\
文件 6786 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\BuildLog.htm
文件 615424 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\bag.exe
文件 406 2013-05-22 16:58 遗传算法解决背包问题\bag_code\Debug\bag.exe.em
文件 472 2013-05-22 16:58 遗传算法解决背包问题\bag_code\Debug\bag.exe.em
文件 381 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\bag.exe.intermediate.manifest
文件 1470088 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\bag.ilk
文件 273583 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\bag.obj
文件 3107840 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\bag.pdb
文件 67 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\mt.dep
文件 74752 2010-04-05 19:15 遗传算法解决背包问题\bag_code\Debug\vc60.idb
文件 110592 2010-04-05 19:15 遗传算法解决背包问题\bag_code\Debug\vc60.pdb
文件 248832 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\vc90.idb
文件 184320 2013-05-22 21:47 遗传算法解决背包问题\bag_code\Debug\vc90.pdb
文件 18944 2013-05-22 13:34 遗传算法解决背包问题\bag_code\Project1.exe
文件 262144 2013-05-22 13:34 遗传算法解决背包问题\bag_code\Project1.tds
文件 6930 2013-05-22 21:47 遗传算法解决背包问题\bag_code\bag.cpp
文件 4248 2010-04-05 16:46 遗传算法解决背包问题\bag_code\bag.dsp
文件 531 2010-04-05 13:21 遗传算法解决背包问题\bag_code\bag.dsw
文件 1231872 2013-05-26 21:12 遗传算法解决背包问题\bag_code\bag.ncb
文件 118175 2013-05-22 13:34 遗传算法解决背包问题\bag_code\bag.obj
文件 53760 2010-04-06 00:19 遗传算法解决背包问题\bag_code\bag.opt
文件 1248 2010-04-05 19:15 遗传算法解决背包问题\bag_code\bag.plg
文件 876 2013-05-26 21:12 遗传算法解决背包问题\bag_code\bag.sln
文件 14848 2013-05-26 21:12 遗传算法解决背包问题\bag_code\bag.suo
文件 5129 2013-05-22 15:11 遗传算法解决背包问题\bag_code\bag.vcproj
文件 1413 2013-05-26 21:12 遗传算法解决背包问题\bag_code\bag.vcproj.saniu-PC.saniu.user
文件 0 2003-07-23 17:52 遗传算法解决背包问题\bag_code\bagItem.cpp
............此处省略1个文件信息
- 上一篇:MFC 绘图工具 绘制简单 图形文档和代码
- 下一篇:用C++实现远程控制
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论