我尝试根据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=400
的值
(我必须减少变量的第一个和第二个值,并增加第三个值以获得更低的out
)
我在这里做错了什么?
答案 0 :(得分:4)
我的案例中的解决方案是改变步长,因为我的预测函数query
res=minimize(query,args=(hist,ana),x0=x0,method='SLSQP',/
bounds=bnds, options={'disp': True ,'eps' : 1e0})
在我的情况下,搜索局部最小值没有意义,我现在在整数步骤中搜索最小值。
根据@ali_m,可以使用搜索全局最小值basinhopping
来代替。
我会在接下来的几天试一试