MATHEMATICA 教程

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

寻找多个最优点,方法 1

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

下面我们定义了一个极小点分布在整个环上的函数.     
In[1]:=
Click for copyable input
Out[2]=
下面是一个由使用不同的随机种子产生的所有解构成的表格.
In[3]:=
Click for copyable input
Out[3]=
这里我们把解转换为点,并且在函数的等值线图上把这些点画出来.     
In[4]:=
Click for copyable input
Out[7]=

寻找多个最优点,方法 2

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

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

寻找数据的非线性拟合

这里定义一个基于五个随机参数的模型.
In[28]:=
Click for copyable input
Out[30]=
从模型和参数创建一个函数,并且在区间 上产生样本点.
In[31]:=
Click for copyable input
这里画出从 FindFit 得到的解和相应的点. 根据三角函数的性质,我们的解由一个局部最小值捕捉.
In[35]:=
Click for copyable input
Out[37]=
这里从数据产生一个平方和,并且使用 NMinimize 来找到最小值.     
In[38]:=
Click for copyable input
Out[39]=
这里画出从 NMinimize 得到的解以及相应的点.
In[40]:=
Click for copyable input
Out[41]=

Solve 示例

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

棋盘上的皇后问题

In[46]:=
Click for copyable input
的值是 True 当且仅当 正在攻击 .
In[47]:=
Click for copyable input
countAttacks[vec] 把实数向量转换为由所有皇后组成的一个排列并且计算攻击的次数.
In[48]:=
Click for copyable input
给定一个排列,这里显示了在棋盘上相应的安置.
In[49]:=
Click for copyable input
使用 DifferentialEvolution 来拟合棋盘上的所有皇后,以避免任何皇后攻击其他皇后. 我们关闭了后处理,因为鉴于问题的离散性质,后处理的使用不大会给我们带来任何帮助.
In[50]:=
Click for copyable input
Out[52]=
下面显示我们求得的解.
In[53]:=
Click for copyable input
Out[53]=
New to Mathematica? Find your learning path »
Have a question? Ask support »