数值非线性全局最优化示例

寻找多个最优点,方法 1

这里我们介绍一个取得多个极小点的方法,即: 使用不同的随机种子来多次调用 NMinimize,从而导致采用不同的优化路径.     

下面我们定义了一个极小点分布在整个环上的函数:
下面是一个由使用不同的随机种子产生的所有解构成的表格:
这里我们把解转换为点,并且在函数的等值线图上把这些点画出来:

寻找多个最优点,方法 2

这里我们介绍另一种取得多个极小点的方法. 即: 用以下方式写下目标函数,以使得访问过的所有点成为一个列表,然后选择具有接近最终解的目标函数值的点.     

下面我们定义了一个极小点分布在整个环上的函数:
ReapNMinimize 以及由 EvaluationMonitor 分播产生的点返回解:
找到所有访问过的点中具有接近最终解的目标函数值的点. 然后画成白色,而把最终解画成黑色,并且在函数的等值线图上画出来:

寻找数据的非线性拟合

这里定义一个基于五个随机参数的模型:
从模型和参数创建一个函数,并且在区间 上产生样本点:
这里画出从 FindFit 得到的解和相应的点. 根据三角函数的性质,我们的解由一个局部最小值捕捉:
这里从数据产生一个平方和,并且使用 NMinimize 来找到最小值.     
这里画出从 NMinimize 得到的解以及相应的点:

Solve 示例

Solve 不能解决这个方程组,因为它们是高度非代数化的.     
NMinimize 提供一个常数目标函数,并以我们所要求解的方程作为约束条件. 这样就能找到问题的解:

棋盘上的皇后问题

attackQ[pos1,pos2] 的值是 True 当且仅当 pos1 正在攻击 pos2
countAttacks[vec] 把实数向量转换为由所有皇后组成的一个排列并且计算攻击的次数:
给定一个排列,这里显示了在棋盘上相应的安置:
使用 DifferentialEvolution 来拟合棋盘上的所有皇后,以避免任何皇后攻击其他皇后. 我们关闭了后处理,因为鉴于问题的离散性质,后处理的使用不大会给我们带来任何帮助:
下面显示我们求得的解: