假设我有一个矩阵
arr = array([[0.8, 0.2],[-0.1, 0.14]])
具有目标函数
def matr_t(t):
return array([[t[0], 0],[t[2]+complex(0,1)*t[3], t[1]]]
def target(t):
arr2 = matr_t(t)
ret = 0
for i, v1 in enumerate(arr):
for j, v2 in enumerate(v1):
ret += abs(arr[i][j]-arr2[i][j])**2
return ret
现在我想在t[i]
是真实的的假设下,最小化这个目标函数,类似于t[0]+t[1]=1
.
2条答案
按热度按时间bcs8qyzn1#
这种限制
将是一个等式(
type='eq'
)约束,其中您创建了一个必须等于零的函数:然后,你为你的约束创建一个
dict
(如果有多个dicts,就列出一个dicts):我从未尝试过,但我相信要保持
t
真实的,您可以用途:并使您的
cons
包含两个约束:然后将
cons
输入minimize
,如下所示:juud5qan2#
你可以构造一个
scipy.optimize.LinearConstraint
对象并将其作为约束传递,而不是编写一个自定义约束函数。而且,自变量的向量必须具有与传递到目标函数的变量长度相同的长度,因此诸如t[0] + t[1] = 1
的约束应当被重新表达为如下(因为t
的长度为4,这可以从其在matr_t()
中的操作看出):而且
minimize
在真实的空间上进行优化,因此t[i]
为实数的限制已经嵌入到算法中。