1
我正在尋找一種方法來解決具有兩個非線性相等約束的優化問題。具有兩個非線性相等約束的最小二乘法優化
我的成本函數是
E = 0
for n in range(1, N):
E += (np.linalg.norm((x[:, i] - o - np.dot(x[:, i], a) * a)) - r) ** 2
我的兩個非線性等於約束
np.dot(a, o) = 0
np.linalg.norm(a) = 1
我可以使用scipy.leastsq來解決這個問題?我如何編寫代碼?
謝謝
更新:我發現最小化就可以解決問題的狀態here。但是我遇到了另一個問題。
我有以下代碼
(result, ier) = optimize.minimize(Step1CostFun, P, args=(S),
method='Nelder-Mead',
bounds=bnds, constraints=cons)
其中那些即將P constaints參數進行優化,P.shape =(1,7)。 S包含觀察數據,S.shape =(3,51)。
至於限制,我有
def DotConstraint(P):
(r, a1, a2, a3, o1, o2, o3) = P
return np.dot([a1, a2, a3], [o1, o2, o3])
def NormConstraint(P):
(r, a1, a2, a3, o1, o2, o3) = P
return np.linalg.norm([a1, a2, a3]) - 1
cons = ({'type': 'eq', 'fun': DotConstraint},
{'type': 'eq', 'fun': NormConstraint})
但是,我得到了一個錯誤,
ValueError: operands could not be broadcast together with shapes (1,7) (3,51)
誰能幫看看?謝謝
這個問題可能是對堆棧溢出比較合適。 –
謝謝。我會把它移到那裏。 – Ben