Я работаю над имитацией отжига, пытаясь решить проблему рюкзака, в результате чего я должен максимизировать приспособленность (ценность предмета в сумке).
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}. Однако я не понимаю этого решения.
Я объясню свой код на С++ в псевдокоде, чтобы избежать длинных кодов.
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) на предыдущий элемент решения? (Это всего лишь идея).
- При использовании реальных значений в массиве, как я могу сообщить системе во время выполнения, что предыдущее решение было близко к максимальной границе, потому что в моей текущей реализации я непрерывно генерирую случайные значения на первом этапе, который повторяется до тех пор, пока система не остынет.
Наконец, возможно, в моей реализации есть какая-то огромная ошибка, я очень признателен, если мне помогут в этой проблеме.