话说王二狗家里着火了,现在他要把家里头值钱的东西一次性搬出去。但是他体力有限,最多只能扛得动36千克的东西。现在他家里的物品价值如下14;27;42;18;33;24;55;36;28;46;87;29。其中每件物品对应的重量如下3;6;8;4;7;5;12;8;5;7;17;5。
有的物品很有价值但是太笨重,有的物品很轻但是价值不是那么大。下面问题来了,二狗怎样做才能尽可能多的将自己家的东西抢救出去呢?
这就是经典的01背包问题,下面我们用模拟退火算法优化,得到最优的选择。模拟退火算法来源于固体退火的原理,学过物理的都知道。当一个高温物体温度逐渐降低时。固体内部的粒子由无序状态逐渐变成有序状态。粒子的能量也越来越低。跳动的能力也越来越弱。
下面是优化的效果图
在实际的优化算法中,存在局部最优解和全局最优解,局部最优解不一定是全局最优解,但是搜索算法往往容易陷入局部最优解。
在全局寻优中,我们需要粒子(解)的活动范围尽可能大,而不需要其在某个局部最优解附近精确搜索,避免陷入局部最优。而在到达全局最优解以后,我们需要在这个解附近精确搜索,得到更优的值。这就需要粒子的跳动能力弱,以免跳出全局最优解。
通过模拟退火,可以将这两者精确地结合到一起。
模拟退火的两个核心问题就是目标函数和产生新