假设物体的重量 Weight、物体的收益 Profit 和背包的容量 Contain 分别为:
Weight = { 80,82,85,70,72,70,66,50,55,25,
50,55,40,48,50,32,22,60,30,32,
40,38,35,32,25,28,30,22,50,30 ,
45,30,60,50,20,65,20,25,30,10 ,
20,25,15,10,10,10,4,4,2,1 }
Profit = { 220,208,198,192,180,180,165,162,160,158,
155,130,125,122,120,118,115,110,105,101,
100,100,98,96,95,90,88,82,80,77,
75,73,72,70,69,66,65,63,60,58,
56,50,30,20,15,10,8,5,3,1 }
Contain = 1000;
如何选择哪些物品装入该背包可使得在背包的容量约束限制之内所装物品的总
价值最大?
本例中,选择算子:赌盘选择(与适应值成比例选择)
交叉算子:混合单点交叉
变异算子:混合点变异
进化参数:{种群规模,最大进化代数,交叉概率,变异概率}={200,
1000,0.618,0.03}
源代码如下:
#include "stdafx.h"
#include <AfxWin.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
// 重要常量参数
#define popsize 200 //种群的规模
#define pc 0.618 //交叉概率
#define pm 0.03 //变异概率
#define lchrom 50 //染色体长度
#define maxgen 1000 //最大进化代数
struct population
{
unsigned int chrom[lchrom]; //染色体
double weight; //背包重量
double fitness; //适应度
unsigned int parent1,parent2,cross; //双亲、交叉点
};
评论0