主要内容

平行MultiStart

并行多启动的步骤

如果您有一个多核处理器或访问一个处理器网络,您可以使用Parallel Computing Toolbox™函数MultiStart.这个例子展示了如何使用一个有两个核的处理器并行地找到一个问题的多个最小值。这个问题和……一样通过MultiStart实现多个局部最小

  1. 写一个函数文件来计算目标:

    函数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;结束
  2. 创建问题结构:

    问题= createOptimProblem(“fminunc”,…“客观”,@ (x) sawtoothxy (x(1),(2)),…x0,(100、-50),“选项”,…optimoptions (@fminunc、“算法”、“拟牛顿”));
  3. 通过运行它来验证问题结构:

    [x,fval] = fminunc(problem) x = 8.4420 -110.2602 fval = 435.2573
  4. 创建一个MultiStart对象,并设置对象使用并行处理和迭代显示:

    女士= MultiStart (UseParallel,真的,“显示”,“iter”);
  5. 设置并行处理:

    开始parpool使用'local'配置文件…连接到4个工人。ans = Pool with properties: Connected: true NumWorkers: 4 Cluster: local attachdfiles: {} IdleTimeout: 30分钟(s)(30分钟剩余)SpmdEnabled: true
  6. 在50个起点上运行这个问题:

    [x, fval eflag、输出manymins] =运行(女士,问题,50);并行运行本地求解器。执行Local Local Local Local first order Index exitflag f(x) # iter f -count optimality 17 2 3953 4 21 0.1626 16 0 1331 45 201 65.02 34 0 7271 54 201 520.9 33 2 8249 4 18 2.968…许多迭代被省略…MultiStart从起始点完成了一些运行。在50个本地求解器中,有17个运行的本地求解器退出标志为正。

    请注意,运行索引看起来是随机的。平行MultiStart以不可预知的顺序运行它的起始点。

    请注意,MultiStart在输出的第一行中确认并行处理,即“并行运行本地求解器”。

  7. 完成后,关闭并行环境:

    使用“本地”配置文件的并行池正在关闭。

有关如何获得这个问题的更好解决方案的示例,请参见金宝搏官方网站例如:寻找更好的解决方案.您可以使用该示例中描述的技术进行并行处理。

并行计算加速

的结果MultiStart运行是随机的。挤兑的时机也是随机的。然而,下表显示了一些明显的趋势。表格的数据来自于在一个有两个核的机器上,在每个起始点上运行一次。

开始点 平行秒 串行秒
50 3.6 3.4
One hundred. 4.9 5.7
200 8.3 10
500 16 23
1000 31 46

如果只使用几个起始点,并行计算可能比串行计算慢。随着起始点的增加,并行计算的效率越来越高。

有许多因素会影响并行处理的加速(或减速)。有关更多信息,请参见通过并行计算提高性能

相关的话题