这个例子展示了如何获得更快和更稳健的解非线性优化问题使用金宝搏官方网站 与优化工具箱™函数相比,符号数学工具箱函数具有不同的语法和结构。特别地,符号变量是实数或复数标量,而最优化工具箱函数传递向量参数。因此,您需要采取几个步骤象征性地生成目标函数、约束条件及其所有必要的导数,其形式适用于的内点算法 基于问题的优化可以自动计算和使用梯度;看到 考虑在一个导电体中放置10个电子的静电问题。电子的排列方式使它们的总势能最小化,受到位于体内的约束。所有的电子至少都在物体的边界上。电子是不可区分的,所以这个问题不存在唯一的最小值(在一个解中排列电子会得到另一个有效解)。这个例子的灵感来自多兰、Moré和曼森 这个例子是一个由不等式定义的导电体
. 这个物体看起来像一个球体上的金字塔。 图的上表面和下表面之间有一个轻微的间隙。这个间隙是用于创建图形的一般绘图程序的人工产物。该程序擦除一个表面上与另一个表面接触的任何矩形补丁。 生成符号向量 显示向量
写出线性约束
作为每个电子的一组四个线性不等式: 这个问题总共有40个线性不等式。 以结构化的方式写出不等式。 大家可以看到
同时构造了非线性约束。
. 生成约束条件及其梯度和Hessians。 约束向量 海赛矩阵, 使用 目标函数,势能,是每个电子对之间距离的倒数之和。
. 距离是向量各分量差的平方和的平方根。 计算能量(目标函数)及其梯度和Hessian。 目标函数有两个输出, 结果文件 这个函数具有具有梯度的目标函数的正确形式;看到 生成非线性约束函数,并将其放入正确的格式中。 结果文件 这个函数具有具有梯度的约束函数的正确形式;看到 为了生成问题的拉格朗日的Hessian,首先生成能量Hessian和约束Hessian的文件。 目标函数的Hessian, 生成文件 相比之下,约束函数的Hessians很小,计算速度很快。 在为目标和约束生成所有文件之后,将它们与辅助函数中适当的拉格朗日乘数放在一起 开始优化时,电子随机分布在半径为1/2、以[0,0,-1]为中心的球体上。 设置选项以使用 调用 查看目标函数值、退出标志、迭代次数和函数计算次数。 尽管电子的初始位置是随机的,但最终位置几乎是对称的。 要检查整个三维几何,旋转图形。 使用梯度和Hessians使优化运行更快更准确。为了比较相同的优化不使用梯度或Hessian信息,设置选项不使用梯度和Hessian。 查看目标函数值、退出标志、迭代次数和函数计算次数。 比较有和没有导数信息时的迭代次数和函数求值次数。 本例中的符号变量假设它们在符号引擎工作区中是真实的。删除变量并不会从符号引擎工作区中清除这个假设。使用 验证假设是空的。 下面的代码创建
雅可比矩阵
(符号数学工具箱)matlabFunction
(符号数学工具箱)问题描述
(X, Y) = meshgrid (1: .01:1);Z1 = -abs(X) -abs(Y);Z2 = -1 -根号(1 - x ^2 - y ^2)Z2 =实际(Z2);W1 = Z1;W2 = Z2;W1(Z1 < Z2) = nan;
创建变量
X = cell(3,10);
x
x =
包括线性约束
Xi3 - xi1 - xi2≤0 Xi3 - xi1 + xi2≤0 Xi3 + xi1 - xi2≤0
B = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);一个= 0(40岁,30);
disp (A * x)
创建非线性约束及其梯度和Hessians
c =符号(0 (10));我= 1:10;c = (x(3 *我2)。^ 2 + x(3张)。^ 2 +(x(3*i)+1).^2 - 1).'; gradc = jacobian(c,x).';'表示转置
创建目标函数及其梯度和Hessian
能量=信谊(0);
创建目标函数文件
Currdir = [pwd filesep];
matlabFunction
函数
创建约束函数文件
文件名= [currdir,
函数
生成Hessian文件
文件名= [currdir,
为
运行优化
rng
选择= optimoptions (@fmincon,
[xfinal, fval exitflag、输出]= fmincon (@demoenergy Xinitial,
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
disp (fval)
34.1365
disp (exitflag)
1
disp (output.iterations)
19
disp (output.funcCount)
28
为
rotate3d
图(手)
与没有梯度和Hessians的优化相比
选择= optimoptions (@fmincon,
找到目标函数值较低的可行点。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
disp (fval2)
34.1365
disp (exitflag2)
1
disp (output2.iterations)
80
disp (output2.funcCount)
2525
台=表([output.iterations; output2.iterations], [output.funcCount; output2.funcCount],
台=
清除符号变量假设
信谊
假设(x)
ans =空符号:1 × 0
Helper函数
函数