使用Scipy.optimize method =’SLSQP’返回初始猜测

我尝试使用scipy深入研究取决于多个变量的函数优化

在使用批处理文件调用此工具后,我有一个从数据挖掘工具返回预测的函数.

def query(x):
    import numpy as np
    file_direc_in="path_to_input_file.csv"
    file_direc_out="path_to_output_file.csv"


    with open(file_direc_in, 'w') as f:
        np.savetxt(f, x, delimiter=';', fmt='%.3f',newline='\r\n')
    f.close()
    os.system("Dataset_query.bat")
    #batch file takes the array i wrote to from input_file and estimates a result
    #afterwards the output will be taken from the output file:
    f = open(file_direc_out,'r')
    out = np.array([[float(f.readlines()[0])]])
    f.close()
    return out


from scipy.optimize import minimize
from calc import query
import numpy as np

x0=np.array([[1.5,50,30]])

bnds = ((1, 2), (0.1, 100), (20, 100))

res=minimize(query,x0,method='SLSQP',bounds=bnds, options={'maxiter': 10 , 'disp': True}, callback=True)

当我运行脚本时,我在控制台中看到了循环,但是似乎没有为变量测试真正的值,并且得到了返回的初始猜测:

Optimization terminated successfully.    (Exit mode 0)
            Current function value: [[ 1636.724]]
            Iterations: 1
            Function evaluations: 5
            Gradient evaluations: 1

尽管我知道这个问题的最小值为x_minimum = [1,0.1,100]
out的值大约为out = 400
(我必须减少变量的第一个和第二个值,并增加第三个值以得到较低的值)

我在这里做错了什么?

解决方法:

由于我的预测函数查询不流畅,因此我的解决方案是更改步长

res=minimize(query,args=(hist,ana),x0=x0,method='SLSQP',/
bounds=bnds, options={'disp': True ,'eps' : 1e0}) 

在我的情况下,搜索局部最小值没有意义,我现在正在以整数步的形式搜索最小值.

根据@ali_m的说法,可以使用全局最小盆地跳跃代替.
我会在接下来的日子里尝试一下

上一篇:python-设置scipy优化最小化步长的方法


下一篇:c#-加快在WPF中将对象添加到Canvas的速度