我在Python中使用Scipy进行模拟退火。我使用以下命令给退火一个上限和下限:
optimize.anneal(f, input_vector0, lower = 0, upper = 2*np.pi)
退火算法完全忽略了较低和较高的参数,并在该空间之外搜索...有谁知道为什么?这是它找到的“解决方案”:
31.6237632627 -42.2752494373 39.5493204901 -40.0042611884 43.6152270079 156.037896659 -94.2145500736 34.2889218355 1.38692105848 -55.5107545279 -173.884187212 95.7485871187 -126.122806244 -80.6862568532 -8.24522935611 31.0745563981 -26.1692693183 -15.4530723302 10.8388939531 -0.331091602947 -103.301042697 -47.7445000946 20.9176159149 46.2024960212 -73.3695426792 -120.496928699 -37.7412899302 -98.0482535989 78.034510108 51.6923809382 -142.940610675 84.9461667872 8.08078933482 -36.2926389711
答案 0 :(得分:1)
几年前,当我看到scipy退火时,我对代码的解读是lower
和upper
是限制步长的随机抽取的限制。
它们不是参数本身的限制。这意味着退火不是约束求解器。
请参阅https://github.com/scipy/scipy/issues/1653
到目前为止,还没有人自愿清理和增强退火(开源)。