Python Scipy基于平方误差和优化常数

Python Scipy基于平方误差和优化常数,python,python-2.7,optimization,scipy,constants,Python,Python 2.7,Optimization,Scipy,Constants,我希望找到一个Scipy模块,以类似于下面的测试示例的方式优化常数。这是否适合使用Basinhoping及其输入?我的目的是通过将“系数”优化为“123”的值,从而使“factoraray”和“factorayTrue”之间的差异(SSE=0)最小化,从而使“factorayRay”和“factorayTrue”彼此相等(SSE=0) 你最初的代码不太正确。传递给basinhopping()的第一个参数应该就是您要调用的函数。scipy将迭代调用该函数,该函数应期望将可优化系数作为其第一个参数。

我希望找到一个Scipy模块,以类似于下面的测试示例的方式优化常数。这是否适合使用Basinhoping及其输入?我的目的是通过将“系数”优化为“123”的值,从而使“factoraray”和“factorayTrue”之间的差异(SSE=0)最小化,从而使“factorayRay”和“factorayTrue”彼此相等(SSE=0)


你最初的代码不太正确。传递给basinhopping()的第一个参数应该就是您要调用的函数。scipy将迭代调用该函数,该函数应期望将可优化系数作为其第一个参数。inputarray应该是minimizer_kwargs中提供的附加参数之一

以下是有效的方法:

import numpy as np
from scipy.optimize import basinhopping

inputarray = [1,2,3,4,5]
coefficient = 100

def objective_function(coefficient, inputarray):

    factorarray = np.empty(len(inputarray))
    factorarrayTrue = np.empty(len(inputarray))
    for i, num in enumerate(inputarray):
        factorarray[i] = num * coefficient
        factorarrayTrue[i] = num *123

    #### SQUARE ERROR
    SEzip = zip(factorarrayTrue, factorarray)
    sse = 0
    for e in SEzip:
        sse += (e[0] - e[1])**2
    return sse

minimizer_kwargs = {"method": "COBYLA", "args": (inputarray) }
result = basinhopping(objective_function, coefficient, minimizer_kwargs = minimizer_kwargs)

print(result)

我在这段代码中没有看到“常量”。你是说里面的文字
123
?只需将其作为目标函数的参数,而不是文字。很抱歉造成混淆。我认为系数是常数的同义词。我有一个类似的问题,有多个系数需要优化。如何在最小化函数中定义它们?
import numpy as np
from scipy.optimize import basinhopping

inputarray = [1,2,3,4,5]
coefficient = 100

def objective_function(coefficient, inputarray):

    factorarray = np.empty(len(inputarray))
    factorarrayTrue = np.empty(len(inputarray))
    for i, num in enumerate(inputarray):
        factorarray[i] = num * coefficient
        factorarrayTrue[i] = num *123

    #### SQUARE ERROR
    SEzip = zip(factorarrayTrue, factorarray)
    sse = 0
    for e in SEzip:
        sse += (e[0] - e[1])**2
    return sse

minimizer_kwargs = {"method": "COBYLA", "args": (inputarray) }
result = basinhopping(objective_function, coefficient, minimizer_kwargs = minimizer_kwargs)

print(result)