scipy.optimize.dual_annealing¶
- scipy.optimize.dual_annealing(func, bounds, args=(), maxiter=1000, local_search_options={}, initial_temp=5230.0, restart_temp_ratio=2e-05, visit=2.62, accept=- 5.0, maxfun=10000000.0, seed=None, no_local_search=False, callback=None, x0=None)[源代码]¶
用对偶退火求函数的全局最小值。
- 参数
- func可调用
要最小化的目标函数。必须在表格中
f(x, *args)
,在哪里x
是一维数组形式的参数,并且args
是完全指定函数所需的任何附加固定参数的元组。- bounds序列、形状(n,2)
变量的界限。
(min, max)
中每个元素的对x
定义目标函数参数的界限。- args元组,可选
完全指定目标函数所需的任何附加固定参数。
- maxiter整型,可选
全局搜索迭代的最大次数。默认值为1000。
- local_search_optionsDICT,可选
要传递给本地最小化程序的额外关键字参数 (
minimize
)。一些重要选项可能包括:method
对于要使用的最小化方法,请使用args
目标函数的附加参数。- initial_temp浮动,可选
初始温度,使用较高的值来促进能量格局的更广泛的搜索,允许DUAL_ANALYMENT逃脱其陷入的局部最小值。默认值为5230。范围为(0.01,5.e4)。
- restart_temp_ratio浮动,可选
在退火过程中,当温度达到
initial_temp * restart_temp_ratio
则触发重新退火过程。该比率的默认值为2e-5。范围是(0,1)。- visit浮动,可选
用于访问分发的参数。默认值为2.62。值越高,访问分布的尾部越重,这使得算法跳到更远的区域。取值范围为(1,3]。
- accept浮动,可选
验收分配的参数。它用于控制接受的概率。接受参数越低,接受概率越小。默认值为-5.0,范围为(-1e4,-5]。
- maxfun整型,可选
目标函数调用次数的软限制。如果算法正在进行本地搜索,则会超过此数字,算法将在本地搜索完成后立即停止。默认值为1e7。
- seed :{无,整型,
numpy.random.Generator
,{无,整型, 如果 seed 为无(或 np.random )、
numpy.random.RandomState
使用的是Singleton。如果 seed 是一个整型、一个新的RandomState
实例,其种子设定为 seed 。如果 seed 已经是一个Generator
或RandomState
实例,则使用该实例。指定 seed 用于可重复最小化。用该种子生成的随机数只影响访问分布函数和新坐标的生成。- no_local_search布尔值,可选
如果 no_local_search 设置为True,则将在不应用局部搜索策略的情况下执行传统的通用模拟退火。
- callback可调用,可选
带签名的回调函数
callback(x, f, context)
,它将为找到的所有最小值调用。x
和f
是找到的最新最小值的坐标和函数值,以及context
在以下方面有价值 [0、1、2] ,含义如下:0:退火过程中检测到的最小值。
1:在本地搜索过程中检测到。
2:在双重退火过程中进行检测。
如果回调实现返回True,则算法将停止。
- x0ndarray,Shape(n,),可选
单个N-D起点的坐标。
- 退货
- resOptimizeResult
优化结果表示为
OptimizeResult
对象。重要属性包括:x
解决方案阵列,fun
函数在解处的值,以及message
它描述了终止的原因。看见OptimizeResult
有关其他属性的说明,请参见。
注意事项
该函数实现了双重退火优化。这种随机方法源自于 [3] 结合了CSA(经典模拟退火)和FSA(快速模拟退火)的推广 [1] [2] 耦合到用于在接受的位置上应用本地搜索的策略 [4]. 中描述了该算法的另一种实现方式。 [5] 和基准在中介绍 [6]. 该方法引入了一种先进的方法来改进广义退火法得到的解。该算法采用失真的Cauchy-Lorentz访问分布,其形状由参数控制 \(q_{{v}}\)
\[g_{q_{v}}(\Delta x(t)) \propto \frac{ \ \left[T_{q_{v}}(t) \right]^{-\frac{D}{3-q_{v}}}}{ \ \left[{1+(q_{v}-1)\frac{(\Delta x(t))^{2}} { \ \left[T_{q_{v}}(t)\right]^{\frac{2}{3-q_{v}}}}}\right]^{ \ \frac{1}{q_{v}-1}+\frac{D-1}{2}}}\]哪里 \(t\) 是人工时间。该访问分布用于生成试跳距离 \(\Delta x(t)\) 的变量 \(x(t)\) 在人工温度下 \(T_{{q_{{v}}}}(t)\) 。
从起点开始,调用访问分布函数后,计算接受概率如下:
\[p_{q_{a}} = \min{\{1,\left[1-(1-q_{a}) \beta \Delta E \right]^{ \ \frac{1}{1-q_{a}}}\}}\]哪里 \(q_{{a}}\) 是验收参数。为 \(q_{{a}}<1\) ,则将零接受概率分配给以下情况
\[[1-(1-q_{{a}}) \beta \Delta E] <0\]人工温度 \(T_{{q_{{v}}}}(t)\) 是根据以下条件减少的
\[T_{q_{v}}(T)=T_{q_{v}}(1)\frac{2^{q_{v}-1}-1}{\Left(\ 1+t\right)^{q_{v}-1}-1}\]哪里 \(q_{{v}}\) 是访问参数。
1.2.0 新版功能.
参考文献
- 1
Tsallis C.可能推广的Boltzmann-Gibbs统计量。“统计物理学报”,52,479-487(1998)。
- 2
Tsallis C,Stariolo DA广义模拟退火。“物理A”,233,395-406(1996)。
- 3
项勇,孙大勇,范伟,龚新光。广义模拟退火算法及其在Thomson模型中的应用物理通讯A,233,216-220(1997)。
- 4
项勇,龚兴国。广义模拟退火的效率。“物理评论”,62,4473(2000)。
- 5
项勇,谷边S,苏奥梅拉B,洪杰.高效全局优化的广义模拟退火算法:R的GENSA软件包.中国学报,第5卷,第1卷(2013).
- 6
“连续全局优化”,载于“统计软件学报”,60(6),1-45,(2014)。 DOI:10.18637/jss.v060.i06
示例
下面的例子是一个10维问题,有许多局部极小值。所涉及的函数称为Rastrigin(https://en.wikipedia.org/wiki/Rastrigin_function)
>>> from scipy.optimize import dual_annealing >>> func = lambda x: np.sum(x*x - 10*np.cos(2*np.pi*x)) + 10*np.size(x) >>> lw = [-5.12] * 10 >>> up = [5.12] * 10 >>> ret = dual_annealing(func, bounds=list(zip(lw, up))) >>> ret.x array([-4.26437714e-09, -3.91699361e-09, -1.86149218e-09, -3.97165720e-09, -6.29151648e-09, -6.53145322e-09, -3.93616815e-09, -6.55623025e-09, -6.05775280e-09, -5.00668935e-09]) # random >>> ret.fun 0.000000