我正在研究模拟退火,试图解决背包问题,我必须最大化适应度(包中物品的价值)。
float weight[5]={2, 3, 5, 4, 3}; // weight
float value[5]={10, 20, 15, 25, 5}; // value of corresponding item
float bagSize = 11.0;
通过硬计算,我们知道最好的解决方案是{1,1,0.4,1,0}。但是我没有得到这个解决方案。
我将用伪代码解释我的 c++ 代码,以避免这里的所有长代码。
While (temperate > 1){
1) Generate random values between (0,1) to fill the 5 sized array for each item
2) Perform random swapping of values in the 5D array above.
3) Calculate the fitness and new weight
4) Save the best solution.
}
基本上这是我的代码。我的问题
- 在执行交换的第 2 步中,目前我正在交换数组的元素。这是对的吗?还是我应该跟踪以前的解决方案并将当前元素 (i) 与以前的解决方案元素交换?(这只是一个想法)。
- 当在数组中使用实际值时,我如何在执行期间告诉系统先前的解决方案接近最大边界,因为在我当前的实现中,我在第一步中连续生成随机值,该随机值重复直到系统冷却。
最后,也许我的实现中有一些巨大的错误,如果我能在这个问题上得到帮助,我真的很感激