Excel Solver作为常用的最优解解决工具,在选择解决方法(solving method)的时候有三种选项,这三种选项有什么区别?什么时候该选择哪种方法?在本文做综合解释

目录

1. GRG Non-Linear (非线性GRG)

2. Simplex LP (单纯形线性规划)

3. Evolutionary(演化算法)

4. Solver的搭建三步走

5. 总结

引用


下图为三种求解方法

python非线性预测模型_microsoft

1. GRG Non-Linear (非线性GRG)

中文翻译是: 非线性GRG, GRG 代表Generalized Reduced Gradient, 这是一种常见的非线性规划求解的方法, 大部分时候, 求解的方法, 是根据输入的数值(变量)的变化, 根据目标函数的变化率, 判断是否得到一个局部最优解. 如果得到了局部最优解, 就停止搜索. Excel默认是非线性GRG 求解法.

2. Simplex LP (单纯形线性规划)

线性规划可以用Simplex单纯形法进行求解.

Tips: 怎么判断一个模型是线性规划模型, 大家可以看这个百度百科. 线性规划(线性规划)_百度百科

如果是线性规划, 用Simplex法比Non Linear GRG 快得多. 跟GRG不同的地方是, Simplex法求得的是全局最优解. 而GRG法只是求局部最优解. 什么是全局最优?什么是局部最优?

看下图, 红色这个G点, 就是局部最优. 从开始出发, GRG找呀找, 找到一个低谷, 就停止搜索了, 返回这个解, 就是局部最优. 其实最低的点, 应该是在蓝色S点(全局最优)那个地方.

python非线性预测模型_最优解_02

Simplex这个求解器, 如果是普通线性规划, 用的是单纯形算法; 如果是整数线性规划, 用的是分支定界法. 另外, 生活工作中大部分的线性规划, 都是整数线性规划, 注意把整数最优率设置为0(默认是1%), 如下图. 如果用默认的, 可能只能得到的非全局最优的整数解. 设置为0的话, 可以得到全局最优整数解, 但很多情况下会导致速度的下降.

3. Evolutionary(演化算法)

演化算法是一种启发式算法, 据大部分教科书所写, 演化算法得到的是全局最优解. 有一些书写的是局部最优解. 这个可能跟实际模型情况有关, 大部分模型, 如果用演化算法, 足够长的时间内, 可以得到全局最优解.

  1. 演化算法也是一种非线性规划求解法, 需要用户对变量的上下限进行限定. 比如有X, Y两个变量, 必须把X, Y的上下限做成约束, 写到模型里面;
  2. 用简单的话来说, 演化算法是用一些随机数(在用户定义的变量范围), 代入到模型, 不断循环迭代, 直到目标函数长时间没有进一步收敛(减少或增加), 则停止迭代的求解. 这是一种探索式和随机式求解的结合, 很多时候可以找到全局最优解.
  3. 大部分时候, 演化算法速度比GRG慢得多!

一般比较均衡的做法,就是用GRG Multistart设定, 简单来说, 就是借鉴了Evolutionary的特性,可以从多个点进行出发, 分治策略, 找各个点区域的最小值, 这样得到的所有局部最优解的最小值, 很大概率就是全局最优解. 当然, 这样也会求解速度也会出现下降.

4. Solver的搭建三步走


Step 1  Fully understand the managerial or optimization problem being faced


充分理解问题情景并定义求最优解的方案



Step 2  Define the decision variables


定义变量



Step 3  Define the objective function


定义目标



Step 4  Identify the constraints


定义限制条件


5. 总结

  1. 会建立线性规划模型, 用Simplex单纯形法;
  2. 求解速度: Simplex > GRG > Evolutionary
  3. GRG得到的可能不是全局最优解, 用Evolutionary得到全局最优解;
  4. 用GRG 结合Multistart可以得到更好的局部最优解.