Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107708
  • 博文数量: 106
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 1165
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-06 12:51
文章分类

全部博文(106)

文章存档

2012年(106)

我的朋友

分类: C/C++

2012-05-07 16:34:51

局部搜索法:

从搜索空间找一个解并评估其质量,将其定义为当前解;

变换当前解为一个新解并评估它的值;

如果新解优于当前解则替换当前解,否则放弃新解;

重复上述步骤直到找不到新解。

思考:

1.为什么要用局部搜索法?

2.为什么能用局部搜索法?(靠什么得到最优解)

3.应用局部搜索法的关键问题(必要性,可行性)(局部与枚举其实差不多)

答:

1.任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。一般认为,NP完全问题的算法复杂性是指数级的。当问题规模达到一定程度时,要想直接解决一个规模较大的问题,有时是相当困难的。局部搜索算法的基本思想是在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。局部搜索法是一种启发式搜索方法,有优先搜索的目标,期望在此指针下能够更快地找到最优解决方案。

2.

现实问题中,往往有多个局部的极值点。

一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。

考虑归一化问题,使得邻域内所有点被选中的概率和为1。

3.

关键问题是要注意局部陷阱。

还有起始点问题:

一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。

解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。

阅读(498) | 评论(0) | 转发(0) |
0

上一篇:计算智能1补充

下一篇:链表的各种操作

给主人留下些什么吧!~~