优化技术特别擅长用于处理:受多种变量的影响,存在许多可能解的问题,以及结果因这些变量的组合而产生很大变化的问题。
优化算法的典型应用场景,存在大量可能的题解以至于我们无法对它们进行一一尝试的情况。
既然无法一一尝试,怎么做?
- 成本函数(The Cost Function)
量化解的优劣,要求是函数返回的值越大,表示该方案越差。 - 随机搜索(Random Searching)
很简单(tubie)的,随机选择解法计算代价成本,在这些随机选择结果中返回代价最小的解即可。
缺点:低效,可能搜索不到最优解
#######random searching#####
def randomoptimize(domain,constf):
best=999999999
bestr=None
for i in range(5):
r=[random.randint(domain[i][0],domain[i][1]) for i in range(len(domain))]
cost=constf(r)
if cost<best:
best=cost
bestr=r
return r
- 爬山法(Hill Climbing)
爬山法基于贪心思想,以一个随机解开始,在其临近的解集中寻找更好的题解(具有更低的成本),类似于从斜坡上向下走,寻找陡峭下降的路。
理解:得到的解也不一定是最优解,可能是局部的最优解,但和随机搜索相比高效得多。
python代码如下:
#####hillclimb################
def hillclimb(domain,constf):
sol=[random.randint(domain[i][0],domain[i][1]) for i in range(len(domain))]
while 1:
neigh