文/腾讯soso 林世飞
优化算法通常用来处理问题最优解的求解--这个问题有多个变量共同决定的,举一个例子比如有这样一张 人员关系表,需要绘制一张SOSO华尔兹(一种socialnetwork,http://tag.soso.com/),比如:
绘制方法有很多种,我们希望能够最终展现给用户的绘制是比较好阅读的,比如交叉线比较少,每个人的点排的比较开等等。
我们利用以下一个数据格式来描述最终的一个解,即一个向量包含每个人的坐标,假设:通常我们用一个 向量来表示解x, x =[a1,a2,….]
这个矩阵也很多值,那这个绘制方法可能很多,优化算法就是用来寻找和评估其中比较好的一种绘制的结果的解。那这里就要回答一个很关键的问题,什么样的解是好的解,这就需要一个方法来评估一个解的好坏程度,也就是优化算法当中要 定义的 成本函数(Cost Function),在这个案例中就是有一个函数输入是 每个人的坐标,输出是评价这种画法或者说分布质量如何。
常用有4种优化算法:
1 随机搜索
2 爬山法
3 退火法
4 遗传算法
下面该给出各种算法的实现说明,通过程序解释各种求解实现和思想,为了便于理解,先介绍下 数据储存格式:
Python code:
people=['刘翔','姚明','陈道明','郭晶晶','霍启刚','纪伟','罗伯斯','孙海平','史冬鹏','叶莉']
links=[('刘翔', '姚明'),
('刘翔', '陈道明'),
('刘翔', '郭晶晶'),
('刘翔', '纪伟'),
('刘翔', '罗伯斯'),
('刘翔', '孙海平'),
('刘翔', '史冬鹏'),
('姚明', '叶莉'),
('陈道明', '霍启刚'),
('郭晶晶', '霍启刚'),
('纪伟', '罗伯斯'),
('孙海平', '史冬鹏'),
('罗伯斯', '孙海平')]
1 随机搜索:主要 依赖于随机函数,每一次求解,都是不确定的变化趋势(更好还是更坏)
#domain 表示解空间,domain[i][0] 表示向量x第i个维的最小值&