计算梯度和麻布使用符号数学工具箱
这个例子展示了如何获得更快和更健壮的解决方案,使用非线性优化问题金宝搏官方网站fmincon随着符号数学工具箱™函数。如果你有一个符号数学工具箱的许可证,您可以很容易地计算分析梯度和麻布为目标和约束函数使用这些符号数学工具箱函数:
雅可比矩阵
(符号数学工具箱)生成一个标量函数的梯度,并生成一个矩阵的向量函数的偏导数。因此,例如,你可以获得海赛矩阵(目标函数的二阶导数)通过应用雅可比矩阵梯度。这个例子展示了如何使用雅可比矩阵生成象征性的目标和约束函数的梯度和麻布。
matlabFunction
(符号数学工具箱)生成一个匿名函数或者文件,计算符号表达式的值。这个例子展示了如何使用matlabFunction生成文件,评估目标和约束函数及其衍生物在任意点。
符号数学工具箱函数有不同的语法和结构优化工具箱相比™函数。特别是,象征性的变量是真实的或复杂的标量,而优化工具箱函数向量传递参数。所以,你需要采取几个步骤,象征性地生成目标函数,约束条件,并在表单中所有必要的衍生品,适合的内点算法fmincon。
具体问题具体分析自动优化计算并可以使用梯度;看到自动微分优化工具箱。对于一个具体问题具体分析的方法这个问题使用自动分化,明白了静电约束非线性优化使用优化变量。
问题描述
考虑静电学问题,放置10电子在导电体。电子排列的方式,减少他们的总势能,躺在身体的约束。所有的电子都在身体的边界在最低。电子是没有区别的,所以这个问题不存在独特的最低(交换电子在一个解决方案给另一个有效的解决方案)。这个例子是受多兰的启发,更多,老李[58]。
这个例子是一个定义的进行身体的不平等
。
这个身体看起来就像一个金字塔一个球体。
(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) =南;在Z1 > Z2 %只有情节点W2 (Z1 < Z2) =南;在Z1 > Z2 %只有情节点手=图;%处理图,以后更多的策划集(gcf,“颜色”,' w ')%白色背景冲浪(X, Y, W1,“线型”,“没有”);持有在冲浪(X, Y W2,“线型”,“没有”);视图(-44年,18)
轻微的上下表面之间存在差距。这种差距是一个工件的绘图程序用于创建人物。常规消除任何矩形贴片表面接触到另一个表面上。
创建变量
生成一个象征性的向量x作为30-by-1向量组成的真正的符号变量xij,我在1到10之间,j在1和3之间。这些变量代表的三个坐标电子我:ξ1对应于
坐标,ξ2)对应于
坐标,xi3对应于
坐标。
x =单元(10);为i = 1:10为j = 1:3 x {j,我}= sprintf (“x % d % d ',我,j);结束结束x = x (:);现在% x是一个30-by-1向量x =符号(x,“真实”的);
显示向量x。
x
x =
包括线性约束
编写线性约束
为一组四个为每个电子线性不等式:
xi3ξ1,ξ2)≤0 xi3 -ξ1 + 2)≤0 xi3 +(ξ1,ξ2)≤0 xi3 +ξ1 + 2)≤0
所以,这个问题共有40线性不等式。
写的不平等在一个结构化的方法。
B = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);一个= 0(40岁,30);为我= 1:10 (4 * i-3:4 *我,3 * i-2:3 * i) = B;结束b = 0(40岁,1);
你可以看到,* x≤b代表着不平等。
disp (A * x)
创建非线性约束和梯度和麻布
非线性约束也结构化。
。
生成约束和梯度和麻布。
c =符号(0 (10));我= 1:10;c = (x(3 *我2)。^ 2 + x(3张)。^ 2 +(x(3*i)+1).^2 - 1).'; gradc = jacobian(c,x).';%执行转置hessc =单元(10);为i = 1:10 hessc{我}=雅可比矩阵(gradc(:,我),x);结束
约束向量c是一个行向量,的梯度c(我)表示在我矩阵的列gradc。这张表格是正确的,所述非线性约束。
海赛矩阵,hessc {1}、……hessc {10}广场和对称。这个例子将它们存储在一个单元阵列,这比将它们存储在单独的变量等hessc1、……hessc10。
使用。”语法的转置。的”语法意味着共轭转置,有不同的象征性的衍生品。
创建目标函数及其梯度和黑森
势能,目标函数是倒数之和的每个电子对之间的距离。
。
距离的平方和的平方根的差异向量的分量。
计算能源(目标函数)及其梯度和黑森。
能量=信谊(0);为i = 1:3:25为j =我+ 3:3:28 dist = x(我+ 2)- x (j: + 2);能源= + 1 /√(dist。* dist);结束结束gradenergy =雅可比矩阵(能源、x) ';hessenergy =雅可比矩阵(gradenergy x);
创建目标函数文件
目标函数有两个输出,能源和gradenergy。当调用这两个函数在一个向量matlabFunction减少数量的子表达式matlabFunction生成,并返回梯度只有当调用函数(fmincon在这种情况下)请求输出。您可以将生成的文件在MATLAB上的任何文件夹的路径。在这种情况下,将它们在当前文件夹。
currdir = (pwd filesep);您可能需要使用currdir = pwd百分比文件名= [currdir,“demoenergy.m”];matlabFunction(能源、gradenergy“文件”文件名,“var”,{x});
matlabFunction返回能源作为第一个输出和gradenergy第二。函数也需要一个输入向量{x}而不是一个输入列表x11、……x103。
结果文件demoenergy.m包含以下行或类似的:
函数(能源、gradenergy) = demoenergy (in)% DEMOENERGY%(能源、GRADENERGY) = DEMOENERGY (in)…:x101 = in(28日);…能量= 1. / t140。^ (1. / 2) +…;如果nargout > 1…gradenergy = [(t174。* (t185 - 2。* x11))。/ 2 -…];结束
这个函数的正确形式的目标函数梯度;看到写作标量目标函数。
创建约束函数文件
生成非线性约束函数,并把它放在正确的格式。
文件名= [currdir,“democonstr.m”];gradc matlabFunction (c, [], [],“文件”文件名,“var”{x},…“输出”,{“c”,“量表”,“gradc”,“gradceq”});
结果文件democonstr.m包含以下行或类似的:
函数[c,测查,gradc, gradceq] = democonstr (in)% DEMOCONSTR% [C,测查,GRADC GRADCEQ] = DEMOCONSTR (in)…:x101 = in(28日);…c = [t417。^ 2 +…];如果测查nargout > 1 = [];结束如果nargout > 2 gradc = [2。* x11,…];结束如果nargout > 3 gradceq = [];结束
这个函数有一个约束函数的正确形式一个梯度;看到非线性约束。
生成黑森文件
生成黑森的拉格朗日问题,首先生成文件能源黑森和约束麻布。
目标函数的麻绳,hessenergy,是一个大型的符号表达式包含超过150000个符号,通过评估所示大小(char (hessenergy))。因此,运行matlabFunction (hessenergy)需要大量的时间。
生成文件hessenergy.m。
文件名= [currdir,“hessenergy.m”];matlabFunction (hessenergy“文件”文件名,“var”,{x});
相比之下,麻布的约束函数是计算小而快。
为我= 1:10 ii = num2str(我);name = [“hessc”二);文件名= [currdir, name,“m”];我matlabFunction (hessc {},“文件”文件名,“var”,{x});结束
后生成的所有文件的目标和约束,把它们放在一起用适当的helper函数的拉格朗日乘数法hessfinal.m的代码出现在这个例子。
运行优化
开始与电子分布的随机优化球面半径的1/2集中在[0,0,1]。
rng默认的%的再现性Xinitial = randn (10);%列是正常的三维向量为j = 1:10 Xinitial (:, j) = Xinitial (:, j) /规范(Xinitial (:, j)) / 2;%这1/2-sphere规范化结束Xinitial (3) = Xinitial 3: - 1;在[0,0,1]%中心Xinitial = Xinitial (:);%转换为一个列向量
设置选项来使用内点算法,并使用梯度和黑森。
选择= optimoptions (@fmincon,“算法”,“内点”,“SpecifyObjectiveGradient”,真的,…“SpecifyConstraintGradient”,真的,“HessianFcn”@hessfinal,“显示”,“最后一次”);
调用fmincon。
[xfinal, fval exitflag、输出]= fmincon (@demoenergy Xinitial,…A、b []、[] [], [], @democonstr,选项);
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。<停止标准细节>
查看目标函数值,退出旗,迭代次数和数量评估函数。
disp (fval)
34.1365
disp (exitflag)
1
disp (output.iterations)
19
disp (output.funcCount)
28
尽管电子的初始位置是随机的,最后的位置几乎是对称的。
为我= 1:10 plot3 (xfinal(3 *我2),xfinal(3张),xfinal(3 *我),“r”。,“MarkerSize”25);结束
检查整个3 d几何旋转图。
rotate3d
图(手)
比较没有梯度的优化和麻布
使用梯度和麻布使优化运行更快,更准确。比较相同的优化利用梯度和黑森信息,设置选项不使用梯度和麻布。
选择= optimoptions (@fmincon,“算法”,“内点”,…“显示”,“最后一次”);[xfinal2, fval2 exitflag2 output2] = fmincon (@demoenergy Xinitial,…A、b []、[] [], [], @democonstr,选项);
目标函数值较低的可行点。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。<停止标准细节>
查看目标函数值,退出旗,迭代次数和数量评估函数。
disp (fval2)
34.1365
disp (exitflag2)
1
disp (output2.iterations)
77年
disp (output2.funcCount)
2434年
比较函数的迭代次数和数量评估有或没有导数信息。
台=表([output.iterations; output2.iterations], [output.funcCount; output2.funcCount],…“RowNames”,{“衍生品”,“没有衍生品”},“VariableNames”,{“迭代”,函数宏指令的})
台=2×2表迭代函数宏指令__________与衍生品19 28没有衍生品77 2434
明确的符号变量的假设
符号变量在这个例子假设他们象征性的引擎的工作区中是真实的。删除变量并不清楚这种假设从象征性的引擎工作区。通过使用明确的变量假设信谊。
信谊x
验证的假设是空的。
假设(x)
ans =空信谊:1-by-0
Helper函数
下面的代码创建hessfinalhelper函数。
函数H = hessfinal (X,λ)%% hessenergy开始调用的函数H = hessenergy (X);%添加约束的拉格朗日乘数法*麻布H = H + hessc1 (X) * lambda.ineqnonlin (1);H = H + hessc2 (X) * lambda.ineqnonlin (2);H = H + hessc3 (X) * lambda.ineqnonlin (3);H = H + hessc4 (X) * lambda.ineqnonlin (4);H = H + hessc5 (X) * lambda.ineqnonlin (5);H = H + hessc6 (X) * lambda.ineqnonlin (6);H = H + hessc7 (X) * lambda.ineqnonlin (7);H = H + hessc8 (X) * lambda.ineqnonlin (8);H = H + hessc9 (X) * lambda.ineqnonlin (9);H = H + hessc10 (X) * lambda.ineqnonlin (10);结束
这个例子展示了如何获得更快和更健壮的解决方案,使用非线性优化问题金宝搏官方网站 符号数学工具箱函数有不同的语法和结构优化工具箱相比™函数。特别是,象征性的变量是真实的或复杂的标量,而优化工具箱函数向量传递参数。所以,你需要采取几个步骤,象征性地生成目标函数,约束条件,并在表单中所有必要的衍生品,适合的内点算法 具体问题具体分析自动优化计算并可以使用梯度;看到 考虑静电学问题,放置10电子在导电体。电子排列的方式,减少他们的总势能,躺在身体的约束。所有的电子都在身体的边界在最低。电子是没有区别的,所以这个问题不存在独特的最低(交换电子在一个解决方案给另一个有效的解决方案)。这个例子是受多兰的启发,更多,老李 这个例子是一个定义的进行身体的不平等
。 这个身体看起来就像一个金字塔一个球体。 轻微的上下表面之间存在差距。这种差距是一个工件的绘图程序用于创建人物。常规消除任何矩形贴片表面接触到另一个表面上。 生成一个象征性的向量 显示向量
编写线性约束
为一组四个为每个电子线性不等式: 所以,这个问题共有40线性不等式。 写的不平等在一个结构化的方法。 你可以看到,
非线性约束也结构化。
。 生成约束和梯度和麻布。 约束向量 海赛矩阵, 使用 势能,目标函数是倒数之和的每个电子对之间的距离。
。 距离的平方和的平方根的差异向量的分量。 计算能源(目标函数)及其梯度和黑森。 目标函数有两个输出, 结果文件 这个函数的正确形式的目标函数梯度;看到 生成非线性约束函数,并把它放在正确的格式。 结果文件 这个函数有一个约束函数的正确形式一个梯度;看到 生成黑森的拉格朗日问题,首先生成文件能源黑森和约束麻布。 目标函数的麻绳, 生成文件 相比之下,麻布的约束函数是计算小而快。 后生成的所有文件的目标和约束,把它们放在一起用适当的helper函数的拉格朗日乘数法 开始与电子分布的随机优化球面半径的1/2集中在[0,0,1]。 设置选项来使用 调用 查看目标函数值,退出旗,迭代次数和数量评估函数。 尽管电子的初始位置是随机的,最后的位置几乎是对称的。 检查整个3 d几何旋转图。 使用梯度和麻布使优化运行更快,更准确。比较相同的优化利用梯度和黑森信息,设置选项不使用梯度和麻布。 查看目标函数值,退出旗,迭代次数和数量评估函数。 比较函数的迭代次数和数量评估有或没有导数信息。 符号变量在这个例子假设他们象征性的引擎的工作区中是真实的。删除变量并不清楚这种假设从象征性的引擎工作区。通过使用明确的变量假设 验证的假设是空的。 下面的代码创建
雅可比矩阵
(符号数学工具箱)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) =南;
创建变量
x =单元(10);
x
x =
包括线性约束
xi3ξ1,ξ2)≤0 xi3 -ξ1 + 2)≤0 xi3 +(ξ1,ξ2)≤0 xi3 +ξ1 + 2)≤0
B = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);一个= 0(40岁,30);
disp (A * x)
创建非线性约束和梯度和麻布
c =符号(0 (10));我= 1:10;c = (x(3 *我2)。^ 2 + x(3张)。^ 2 +(x(3*i)+1).^2 - 1).'; gradc = jacobian(c,x).';%执行转置
创建目标函数及其梯度和黑森
能量=信谊(0);
创建目标函数文件
currdir = (pwd filesep);
matlabFunction
函数
创建约束函数文件
文件名= [currdir,
函数
生成黑森文件
文件名= [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
图(手)
比较没有梯度的优化和麻布
选择= optimoptions (@fmincon,
目标函数值较低的可行点。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。<停止标准细节>
disp (fval2)
34.1365
disp (exitflag2)
1
disp (output2.iterations)
77年
disp (output2.funcCount)
2434年
台=表([output.iterations; output2.iterations], [output.funcCount; output2.funcCount],
台=
明确的符号变量的假设
信谊
假设(x)
ans =空信谊:1-by-0
Helper函数
函数