基于优化变量的约束静电非线性优化
考虑将20个电子放入导电体的静电问题。受限于处于体内,电子会以一种使其总势能最小的方式排列自己。所有的电子都在物体的边界上。电子是不可区分的,所以这个问题没有唯一的最小值(排列一个解中的电子会给出另一个有效解)。这个例子的灵感来自于Dolan、Moré和Munson[1]。
当您使用优化变量(基于问题的方法)时,本例中的目标函数和非线性约束函数都是优化变量和表达式的支持操作.因此,解决使用自动微分来计算梯度。看到优化工具箱中的自动区分.如果没有自动的区分,这个例子在到达MaxFunctionEvaluations宽容。有关使用Symbolic Math Toolbox™的基于求解器的等价示例,请参见使用符号数学工具箱计算梯度和黑森斯.
几何问题
本例涉及由下列不等式定义的传导体。对于每个有坐标的电子
,
这些约束形成了一个看起来像球面上的金字塔的物体。要查看正文,输入以下代码。
(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;只在Z1 > Z2处画点W2(Z1 < Z2) = nan;只在Z1 > Z2处画点手=图;%图形的句柄,供以后使用集(gcf,“颜色”,' w ')%白色背景冲浪(X, Y, W1,“线型”,“没有”);持有在冲浪(X, Y W2,“线型”,“没有”);视图(-44年,18)
这幅画的上下表面之间有一点缝隙。这个间隙是用于创建图形的一般绘图例程的产物。这个程序擦除一个表面上与另一个表面接触的任何矩形补丁。
定义问题的变量
问题有20个电子。约束条件给出了每一个的边界
而且
取值从-1到1,而
取值范围为-2 ~ 0。定义问题的变量。
N = 20;x = optimvar (“x”N下界的, 1“UpperBound”1);y = optimvar (“y”N下界的, 1“UpperBound”1);z = optimvar (“z”N下界的2,“UpperBound”, 0);elecprob = optimproblem;
定义约束
这个问题有两种类型的约束。第一个是球面约束,是一个简单的多项式不等式,分别针对每个电子。定义这个球面约束。
elecprob.Constraints.spherec = (x ^ 2 + y ^ 2 + (z + 1)。^ 2)< = 1;
上面的constraint命令创建一个向量N约束。查看约束向量显示.
显示(elecprob.Constraints.spherec)
((x ^ 2 + y ^ 2) + (z + 1)。^ 2)< = arg_RHS地点:最长= 1;__arg1 =最长的(20));arg_RHS = __arg1 (:);
问题中的第二种约束是线性的。你可以用不同的方式表示线性约束。例如,您可以使用腹肌函数表示绝对值约束。要以这种方式表示约束,编写一个MATLAB函数,并将其转换为使用fcn2optimexpr.看到将非线性函数转化为优化表达式.对于一个只使用可微函数的更好的方法,将绝对值约束写成四个线性不等式。每个约束命令返回一个向量N约束。
elecprob.Constraints。Plane1 = z <= -x-y;elecprob.Constraints。Plane2 = z <= -x+y;elecprob.Constraints。Plane3 = z <= x-y;elecprob.Constraints。Plane4 = z <= x+y;
定义目标函数
目标函数是系统的势能,它是每个电子对的距离倒数的和:
将目标函数定义为优化表达式。为了获得良好的性能,应该以向量化的方式编写目标函数。看到创建有效的优化问题.
能量= optimexpr (1);为ii = 1:(N-1) jj = (ii+1):N;Tempe = (x(ii) - x(jj))。²+ (y(ii) - y(jj))^2 + (z(ii) - z(jj)).^2;能量=能量+ sum(tempe.^(-1/2));结束elecprob。目标=能量;
运行优化
开始优化时,电子随机分布在半径为1/2、中心为[0,0,-1]的球体上。
rng默认的%的再现性x0 = randn (N, 3);为ii=1:N x0(ii,:) = x0(ii,:)/norm(x0(ii,:))/2;X0 (ii,3) = X0 (ii,3) - 1;结束init。x=x0(:,1); init.y = x0(:,2); init.z = x0(:,3);
通过打电话来解决问题解决.
[溶胶,fval exitflag、输出]=解决(elecprob init)
使用fmincon解决问题。找到了满足约束条件的局部极小值。由于目标函数在可行方向上不减少,优化完成,在最优性公差的值内,约束满足在约束公差的值内。
索尔=结构体字段:X: [20x1 double] y: [20x1 double] z: [20x1 double]
fval = 163.0099
exitflag = OptimalSolution
输出=结构体字段:迭代:94 funcCount: 150 constrbreach: 0 stepsize: 2.8395e-05 algorithm: 'interior-point' firstorderopt: 8.1308e-06 cgiterations: 0 message: '找到满足约束的局部最小值....' bestsible: [1x1 struct] objectivederivative: "reverse-AD" constraintderivative: "closed-form" solver: 'fmincon'
查看解决方案
把溶液画成导电体上的点。
图(手)plot3 (sol.x、sol.y sol.z,“r”。,“MarkerSize”, 25)从
电子在约束边界上分布得相当均匀。很多电子在边缘和金字塔点上。
参考
[1]多兰,伊丽莎白D.,豪尔赫J. Moré,和托德S.芒森。使用COPS 3.0的标杆优化软件。阿贡国家实验室技术报告ANL/MCS-TM-273, 2004年2月。
相关的话题
考虑将20个电子放入导电体的静电问题。受限于处于体内,电子会以一种使其总势能最小的方式排列自己。所有的电子都在物体的边界上。电子是不可区分的,所以这个问题没有唯一的最小值(排列一个解中的电子会给出另一个有效解)。这个例子的灵感来自于Dolan、Moré和Munson[1]。 当您使用优化变量(基于问题的方法)时,本例中的目标函数和非线性约束函数都是 本例涉及由下列不等式定义的传导体。对于每个有坐标的电子
这些约束形成了一个看起来像球面上的金字塔的物体。要查看正文,输入以下代码。 这幅画的上下表面之间有一点缝隙。这个间隙是用于创建图形的一般绘图例程的产物。这个程序擦除一个表面上与另一个表面接触的任何矩形补丁。 问题有20个电子。约束条件给出了每一个的边界 这个问题有两种类型的约束。第一个是球面约束,是一个简单的多项式不等式,分别针对每个电子。定义这个球面约束。 上面的constraint命令创建一个向量 问题中的第二种约束是线性的。你可以用不同的方式表示线性约束。例如,您可以使用 目标函数是系统的势能,它是每个电子对的距离倒数的和:
将目标函数定义为优化表达式。为了获得良好的性能,应该以向量化的方式编写目标函数。看到 开始优化时,电子随机分布在半径为1/2、中心为[0,0,-1]的球体上。 通过打电话来解决问题 把溶液画成导电体上的点。 电子在约束边界上分布得相当均匀。很多电子在边缘和金字塔点上。 [1]多兰,伊丽莎白D.,豪尔赫J. Moré,和托德S.芒森。使用COPS 3.0的标杆优化软件。阿贡国家实验室技术报告ANL/MCS-TM-273, 2004年2月。几何问题
(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;
定义问题的变量
N = 20;x = optimvar (
定义约束
elecprob.Constraints.spherec = (x ^ 2 + y ^ 2 + (z + 1)。^ 2)< = 1;
显示(elecprob.Constraints.spherec)
((x ^ 2 + y ^ 2) + (z + 1)。^ 2)< = arg_RHS地点:最长= 1;__arg1 =最长的(20));arg_RHS = __arg1 (:);
elecprob.Constraints。Plane1 = z <= -x-y;elecprob.Constraints。Plane2 = z <= -x+y;elecprob.Constraints。Plane3 = z <= x-y;elecprob.Constraints。Plane4 = z <= x+y;
定义目标函数
能量= optimexpr (1);
运行优化
rng
[溶胶,fval exitflag、输出]=解决(elecprob init)
使用fmincon解决问题。找到了满足约束条件的局部极小值。由于目标函数在可行方向上不减少,优化完成,在最优性公差的值内,约束满足在约束公差的值内。
索尔=
fval = 163.0099
exitflag = OptimalSolution
输出=
查看解决方案
图(手)plot3 (sol.x、sol.y sol.z,
参考
相关的话题