python 线性规划全局最优解_介绍一个全局最优化的方法:随机游走算法(Random Walk)...

1. 关于全局最优化求解

全局最优化是一个非常复杂的问题,目前还没有一个通用的办法可以对任意复杂函数求解全局最优值。上一篇文章讲解了一个求解局部极小值的方法——梯度下降法。这种方法对于求解精度不高的情况是实用的,可以用局部极小值近似替代全局最小值点。但是当要求精确求解全局最小值时,梯度下降法就不适用了,需要采用其他的办法求解。常见的求解全局最优的办法有拉格朗日法、线性规划法、以及一些人工智能算法比如遗传算法、粒子群算法、模拟退火算法等(可以参见我之前的博客)。而今天要讲的是一个操作简单但是不易陷入局部极小值的方法:随机游走算法。

2. 随机游走算法操作步骤

设\(f(x)\)是一个含有\(n\)个变量的多元函数,\(x=(x_1,x_2,...,x_n)\)为\(n\)维向量。

给定初始迭代点\(x\),初次行走步长\(\lambda\),控制精度\(\epsilon\)(\(\epsilon\)是一个非常小的正数,用于控制结束算法)。

给定迭代控制次数\(N\),\(k\)为当前迭代次数,置\(k=1\)。

当 \(k

计算函数值,如果 \(f(x_1)

如果连续\(N\)次都找不到更优的值,则认为,最优解就在以当前最优解为中心,当前步长为半径的\(N\)维球内(如果是三维,则刚好是空间中的球体)。此时,如果\(\lambda < \epsilon\),则结束算法;否则,令\(\lambda = \frac{\lambda}{2}\),回到第1步,开始新一轮游走。

3. 随机游走的代码实现(使用Python)

这里使用的测试函数为\(f(r) = \frac{sin(r)}{r} + 1,r=\sqrt{(x-50)^2+(y-50)^2}+e,0 \leq x,y \leq 100\),求\(f(r)\)的最大值。该函数是一个多峰函数,在\((50,50)\)处取得全局最大值\(1.1512\),第二最大值在其全局最大值附近,采用一般的优化方法很容易陷入局部极大值点。这里是求解函数的最大值问题,可以将其转化为求目标函数的相反数的最小值问题。具体代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2017/7/20 10:08

# @Author : Lyrichu

# @Email : [email protected]

# @File : random_walk.py

'''

@Description:使用随机游走算法求解函数极值

这里求解:f = sin(r)/r + 1,r = sqrt((x-50)^2

你可能感兴趣的:(python,线性规划全局最优解)