主要内容gydF4y2Ba

查找全局或多个局部极小值gydF4y2Ba

这个例子说明了如何gydF4y2BaGlobalSearchgydF4y2Ba找到一个全局最小值,以及如何有效gydF4y2BaMultiStartgydF4y2Ba找到更多的局部极小值。gydF4y2Ba

本例的目标函数具有多个局部最小值和一个唯一的全局最小值。在极坐标下,函数是gydF4y2Ba

fgydF4y2Ba (gydF4y2Ba rgydF4y2Ba ,gydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba ggydF4y2Ba (gydF4y2Ba rgydF4y2Ba )gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba

在哪里gydF4y2Ba

ggydF4y2Ba (gydF4y2Ba rgydF4y2Ba )gydF4y2Ba =gydF4y2Ba (gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba rgydF4y2Ba )gydF4y2Ba -gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 2gydF4y2Ba rgydF4y2Ba )gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 3.gydF4y2Ba rgydF4y2Ba )gydF4y2Ba 3.gydF4y2Ba -gydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba 4gydF4y2Ba rgydF4y2Ba )gydF4y2Ba 4gydF4y2Ba +gydF4y2Ba 4gydF4y2Ba )gydF4y2Ba rgydF4y2Ba 2gydF4y2Ba rgydF4y2Ba +gydF4y2Ba 1gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba +gydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba 2gydF4y2Ba tgydF4y2Ba -gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba 2gydF4y2Ba .gydF4y2Ba

画出功能gydF4y2Ba ggydF4y2Ba 而且gydF4y2Ba hgydF4y2Ba ,并创建函数的曲面图gydF4y2Ba fgydF4y2Ba .gydF4y2Ba

图次要情节(1、2、1);fplot (@ (r)(罪罪(r) - (2 * r) / 2 +罪(3 * r) / 3 -罪(4 * r) / 4 + 4)。* r。^ 2. / (r + 1), 20[0])标题(gydF4y2Ba”gydF4y2Ba);ylabel (gydF4y2Ba‘g’gydF4y2Ba);包含(gydF4y2Ba“r”gydF4y2Ba);次要情节(1、2、2);fplot (@ (t) 2 + cos (t) + cos(2 * 2) / 2,[0 2 *π])标题(gydF4y2Ba”gydF4y2Ba);ylabel (gydF4y2Ba“h”gydF4y2Ba);包含(gydF4y2Ba“t”gydF4y2Ba);gydF4y2Ba

图中包含2个轴对象。axis对象1包含一个functionline类型的对象。Axes对象2包含一个functionline类型的对象。gydF4y2Ba

图fsurf(@(x,y) sawtoothxy(x,y), [-20 20])gydF4y2Ba在下面的第一步中定义了sawtoothxygydF4y2Ba包含(gydF4y2Ba“x”gydF4y2Ba);ylabel (gydF4y2Ba“y”gydF4y2Ba);标题(gydF4y2Ba“sawtoothxy (x, y)”gydF4y2Ba);视图(-18年52)gydF4y2Ba

图中包含一个axes对象。标题为sawtoothxy(x,y)的axes对象包含一个functionsurface类型的对象。gydF4y2Ba

全局最小值为gydF4y2Ba rgydF4y2Ba =gydF4y2Ba 0gydF4y2Ba ,目标函数为0。这个函数gydF4y2Ba ggydF4y2Ba (gydF4y2Ba rgydF4y2Ba )gydF4y2Ba 近似线性增长gydF4y2Ba rgydF4y2Ba ,呈重复的锯齿形。这个函数gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba 有两个局部极小值,其中一个是全局极小值。gydF4y2Ba

的gydF4y2Basawtoothxy.mgydF4y2Ba文件从笛卡尔坐标转换为极坐标,然后在极坐标中计算值。gydF4y2Ba

类型gydF4y2BasawtoothxygydF4y2Ba
函数f = sawtoothxy(x,y) [t r] = cart2pol(x,y);%变换到极坐标h = cos(2*t - 1/2)/2 + cos(t) + 2;g = (sin (r) -罪(2 * r) / 2 +罪(3 * r) / 3 -罪(4 * r) / 4 + 4)…。* r。^ 2. / (r + 1);f = g。* h;结束gydF4y2Ba

单全局最小通径gydF4y2BaGlobalSearchgydF4y2Ba

搜索全局最小值使用gydF4y2BaGlobalSearchgydF4y2Ba,首先创建一个问题结构。使用gydF4y2Ba“sqp”gydF4y2Ba算法gydF4y2BafmincongydF4y2Ba,gydF4y2Ba

问题= createOptimProblem (gydF4y2Ba“fmincon”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“目标”gydF4y2Ba@ (x) sawtoothxy (x (1), (2)),gydF4y2Ba...gydF4y2Ba“x0”gydF4y2Ba(100、-50),gydF4y2Ba“选项”gydF4y2Ba,gydF4y2Ba...gydF4y2Baoptimoptions (@fmincongydF4y2Ba“算法”gydF4y2Ba,gydF4y2Ba“sqp”gydF4y2Ba,gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba));gydF4y2Ba

起点是gydF4y2Ba(100、-50)gydF4y2Ba而不是gydF4y2Ba(0,0)gydF4y2Ba所以gydF4y2BaGlobalSearchgydF4y2Ba不从全局解决方案开始。gydF4y2Ba

通过运行验证问题结构gydF4y2BafmincongydF4y2Ba.gydF4y2Ba

[x, fval] = fmincon(问题)gydF4y2Ba
x =gydF4y2Ba1×2gydF4y2Ba45.7332 - -107.6469gydF4y2Ba
fval = 555.5422gydF4y2Ba

创建gydF4y2BaGlobalSearchgydF4y2Ba对象,并设置迭代显示。gydF4y2Ba

gs = GlobalSearch (gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“通路”gydF4y2Ba);gydF4y2Ba

为了再现性,设置随机数生成器种子。gydF4y2Ba

rng(14日gydF4y2Ba“旋风”gydF4y2Ba)gydF4y2Ba

运行的能手。gydF4y2Ba

[x, fval] =运行(gs、问题)gydF4y2Ba
Num分最佳电流阈值当地当地分析F-count f (x)点球点球f (x) exitflag过程0 0初始点200 200 555.5 555.5 1463 1.547 e15汽油1.547 e15汽油1阶段1当地300 1.074 1564 1.547 e15汽油5.858 e + 04第二阶段搜索400 4.16 1664 1.547 e15汽油1.84 e + 05年第二阶段搜索500 11.84 1764 1.547 e15汽油2.683 e + 04第二阶段搜索600 30.95 1864 1.547 e15汽油1.122 e + 04第二阶段搜索700 65.25 1964 1.547 e15汽油1.353 e + 04第二阶段搜索800 163.8 2064 1.547 e15汽油6.249 e + 04第二阶段搜索900 2164 1.547 e15汽油4.119e+04 409.2 Stage 2 Search 950 2356 1.547e-15 477 589.7 387 2 Stage 2 Local 952 2420 1.547e-15 368.4 477 250.7 2 Stage 2 Local 1000 2468 1.547e-15 4.031e+04 530.9 Stage 2 Search GlobalSearch stopped because it analyzed all the trial points. 3 out of 4 local solver runs converged with a positive local solver exit flag.
x =gydF4y2Ba1×2gydF4y2Ba10gydF4y2Ba7gydF4y2Ba×0.0414 - 0.1298gydF4y2Ba
fval = 1.5467 e15汽油gydF4y2Ba

求解器找到三个局部极小值,包括[0,0]附近的全局极小值。gydF4y2Ba

多局部极小通径gydF4y2BaMultiStartgydF4y2Ba

搜索多个最小值使用gydF4y2BaMultiStartgydF4y2Ba,首先创建一个问题结构。因为问题是无约束的,所以使用gydF4y2BafminuncgydF4y2Ba解算器。设置选项以在命令行上不显示任何显示。gydF4y2Ba

问题= createOptimProblem (gydF4y2Ba“fminunc”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“目标”gydF4y2Ba@ (x) sawtoothxy (x (1), (2)),gydF4y2Ba...gydF4y2Ba“x0”gydF4y2Ba(100、-50),gydF4y2Ba“选项”gydF4y2Ba,gydF4y2Ba...gydF4y2Baoptimoptions (@fminuncgydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba));gydF4y2Ba

通过运行问题结构来验证问题结构。gydF4y2Ba

[x, fval] = fminunc(问题)gydF4y2Ba
x =gydF4y2Ba1×2gydF4y2Ba8.4420 - -110.2602gydF4y2Ba
fval = 435.2573gydF4y2Ba

创建一个默认的gydF4y2BaMultiStartgydF4y2Ba对象。gydF4y2Ba

女士= MultiStart;gydF4y2Ba

运行求解器50次迭代,记录局部极小值。gydF4y2Ba

rng (1)gydF4y2Ba%的再现性gydF4y2Ba[x, fval eflag、输出manymins] =运行(女士,问题,50)gydF4y2Ba
MultiStart从起点开始完成了一些运行。50次本地求解器运行中有10次收敛于正向本地求解器退出标志。gydF4y2Ba
x =gydF4y2Ba1×2gydF4y2Ba-73.8348 - -197.7810gydF4y2Ba
fval = 766.8260gydF4y2Ba
eflag = 2gydF4y2Ba
输出=gydF4y2Ba结构体字段:gydF4y2BafuncCount: 8583 localSolverTotal: 50 localSolverSuccess: 10 localSolverIncomplete: 40 localSolverNoSolution: 0消息:'MultiStart从起始点....完成了一些运行'gydF4y2Ba
manymins =gydF4y2Ba1×10对象gydF4y2Ba1x10 GlobalOptimSolution数组,属性:X Fval ExitflaggydF4y2Ba

该求解器在附近找不到全局最小值gydF4y2Ba(0,0)gydF4y2Ba.求解器找到10个不同的局部极小值。gydF4y2Ba

绘制局部极小值处的函数值:gydF4y2Ba

直方图([manymins.Fval], 10)gydF4y2Ba

图中包含一个axes对象。axis对象包含一个直方图类型的对象。gydF4y2Ba

在三个最佳点处绘制函数值:gydF4y2Ba

bestf = [manymins.Fval];直方图(bestf (1:3), 10)gydF4y2Ba

图中包含一个axes对象。axis对象包含一个直方图类型的对象。gydF4y2Ba

MultiStartgydF4y2Ba开始gydF4y2BafminuncgydF4y2Ba从起始点开始,分量均匀分布在-1000到1000之间。gydF4y2BafminuncgydF4y2Ba经常被困在一个局部极小值。gydF4y2BafminuncgydF4y2Ba超过其迭代限制或函数求值限制40次。gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba

相关的话题gydF4y2Ba

Baidu
map