Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当函数的某些变量保持不变时,最小化多变量函数。常量变量是一个列表列表_Python_Optimization_Scipy_Minimize - Fatal编程技术网

Python 当函数的某些变量保持不变时,最小化多变量函数。常量变量是一个列表列表

Python 当函数的某些变量保持不变时,最小化多变量函数。常量变量是一个列表列表,python,optimization,scipy,minimize,Python,Optimization,Scipy,Minimize,我是python新手,已经遇到了一个相当复杂的问题(至少对我来说是这样)。我想最小化一个有多个变量的函数,其中一个变量是一个列表,其中包含我从模拟中获得的数据。当程序优化其他两个变量时,此列表应保持不变 这是我到目前为止在3个不同文件中的代码。Simulation.py是计算列表列表的模拟。在Function.py中包含我想要最小化的函数“Gompertz”。如您所见,它包含三个变量。在第一个变量中,我想输入模拟中的列表(“死亡列表”)。另外两个变量我想使用Scipy的minimize函数进行

我是python新手,已经遇到了一个相当复杂的问题(至少对我来说是这样)。我想最小化一个有多个变量的函数,其中一个变量是一个列表,其中包含我从模拟中获得的数据。当程序优化其他两个变量时,此列表应保持不变

这是我到目前为止在3个不同文件中的代码。Simulation.py是计算列表列表的模拟。在Function.py中包含我想要最小化的函数“Gompertz”。如您所见,它包含三个变量。在第一个变量中,我想输入模拟中的列表(“死亡列表”)。另外两个变量我想使用Scipy的minimize函数进行优化。 运行该程序会出现以下错误,但我想我编写解决方案的方式总体上是有问题的。任何帮助都将不胜感激:)。(不要担心程序中所有包含死亡的名字。我正在处理死亡数据)

(编辑:我将边界条件更改为b=(0.001,10))

编辑:阐明Optimize.py是最重要的部分。Simulation.py和Function.py仅用于上下文。我这里的问题是,如何在优化过程中将列表变成一个常量变量,同时优化其他两个变量。因此,在Optimize.py文件中,我将列表的边界条件设置为b=(deathlist,deathlist),因此它将保持不变。我不确定这是否正确,如果不正确,如何以不同的方式编写代码

Traceback (most recent call last): File "/Users/jonas/PycharmProjects
/untitled2/Test/Simulation.py", 
line 25, in <module> sol = minimize(Function.Gompertz, x0, method ='SlSQP',bounds = bnds, constraints 
= cons) File "/Library/Frameworks/Python.framework/Versions/3.5/lib
/python3.5/site-packages/scipy/optimize/_minimize.py", 

line 458, in minimize constraints, callback=callback, **options) File "/Library
/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy
/optimize/slsqp.py", 
line 307, in _minimize_slsqp x = asfarray(x0).flatten() File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/lib/type_check.py", 
line 105, in asfarray return asarray(a, dtype=dtype) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/core/numeric.py", 
line 482, in asarray return array(a, dtype, copy=False, order=order) ValueError: setting an array element with a sequence.```
Traceback(最近一次调用last):文件“/Users/jonas/PycharmProjects
/untitled2/Test/Simulation.py“,
第25行,在sol=minimize(Function.Gompertz,x0,method='SlSQP',bounds=bnds,constraints)中
=cons)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib
/python3.5/site-packages/scipy/optimize/_-minimize.py“,
第458行,在最小化约束中,callback=callback,**选项)File“/Library
/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy
/优化/slsqp.py“,
第307行,在_minimize_slsqp x=asfarray(x0).flatte()文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/numpy/lib/type_check.py”中,
第105行,在asfarray返回asarray(a,dtype=dtype)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/numpy/core/numeric.py”中,
第482行,在asarray返回数组(a,dtype,copy=False,order=order)值错误:使用序列设置数组元素```
您得到的错误
ValueError:设置带有序列的数组元素。
表示数组元素不能包含列表

要给出
minimize()
常量值,应将原始函数的参数拆分为
(n,)
ndarray
x
和所有其他参数。 因此,为
minimize()
函数提供附加常量参数的正确代码是:

def Gompertz(x, consts):

    x1 = x[1]
    x2 = x[2]
    LF = 0

    for j in range (100):
        DEATH = consts[j]
        T = len(consts)
        for tau in range(T): """the length of the list gives the range of the loop"""
                lf_i = x1 * exp(x2 * tau - x1/x2 * (exp(x2 * tau)-1))
                a = DEATH[tau]
                LF += lf_i ** a   """the values from the list are used here as a power of the valute lf_i """
return -LF 
你得到的错误
ValueError:设置带有序列的数组元素。
表示数组元素不能包含列表

要给出
minimize()
常量值,应将原始函数的参数拆分为
(n,)
ndarray
x
和所有其他参数。 因此,为
minimize()
函数提供附加常量参数的正确代码是:

def Gompertz(x, consts):

    x1 = x[1]
    x2 = x[2]
    LF = 0

    for j in range (100):
        DEATH = consts[j]
        T = len(consts)
        for tau in range(T): """the length of the list gives the range of the loop"""
                lf_i = x1 * exp(x2 * tau - x1/x2 * (exp(x2 * tau)-1))
                a = DEATH[tau]
                LF += lf_i ** a   """the values from the list are used here as a power of the valute lf_i """
return -LF 

尽量压缩代码,只包含有问题的部分。这样更容易回答!我不确定问题出在哪里,这就是为什么我把代码分成3个文件的原因。Simulation.py不是问题所在,因此我可以排除它。我把它放在那里只是为了上下文。但是我认为Optimize.py文件就是问题所在。请尝试压缩代码,使其只包含有问题的部分。这样更容易回答!我不确定问题出在哪里,这就是为什么我把代码分成3个文件的原因。Simulation.py不是问题所在,因此我可以排除它。我把它放在那里只是为了上下文。但我认为问题出在Optimize.py文件上。