在学习遗传算法解决背包问题时,发现需要先用穷举法求出最优解。
在求解背包问题时,穷举法需要列出所有可能的选择,再将选择出的重量与背包最大承重量进行比较,选择出不超过最大承重量且背包金额最大的排列。
1)生成0/1矩阵
由于我设置的背包初始物品数有7个,所以有种选择方式。去掉没有意义的全零数组,共需循环次。
首先将十进制数转换成二进制数,再将转换成的二进制字符串转成1×7的列向量。
for i=1:2^7-1 %生成2的7次幂个1×7的0/1矩阵,将此矩阵和weight'相乘,计算背包重量,可以将十进制数转化成二进制数
D=i;
binStr=dec2bin(D,7);
b=str2num(binStr(:));
2)判断是否成立
if weight1<=totalweight
totalvalue=value*b;
if totalvalue>maximumvalue
maximumvalue=totalvalue;
maximumweight=weight2;
end
else
totalvalue=0;
end