2017-12-08 38 views
0

私は、これは私のコードであるCVXPYに新しいですし、いくつかの最適化をしたいと思っ、pythonでcvxpyを使ってこの方程式を最小にするには?

私は(Mによってn)を持っている

wx is 1 by n matrix (the variable matrix, unknown, to be solved) 
A is n by m (known),i1 is m by 1 (known),i2 is m by 1 (known) 
a is n by n (known), AAT is n by m (known) 

from numpy.linalg import pinv 
AA=pinv(A) #m*n 
AAT=AA.T #n*m 
i1=np.transpose(np.matrix([1,0])) #m*1 
i2=np.transpose(np.matrix([0,1])) #m*1 

from cvxpy import * 
import numpy as np 
from numpy import * 

#construct the problem 
x=Variable(1,5) #1*n 
wx=np.matrix([x[0],x[1],x[2],x[3],x[4]]) 

#consraints 
constraints = [x[0]+x[1]+x[2]+x[3]+x[4]==1] 
for i in range(5): 
constraints += [ 
    x[i] <= 1, 
    x[i] >= 0, 
    ] 
Q=wx*A*i1*wx*a*AAT*i1 
P=wx*A*i2*wx*a*AAT*i2 
objective = Minimize(Q-P) 
result=prob.solve() 
print(x.value) 

、およびA (n×n):

A=[[-4.10272297 -1.94100278] 
[-0.07551063 0.00533883] 
[-0.27742026 -0.17370814] 
[ 0.07785536 -1.02386256] 
[ 0.77757854 0.04405759]] 

a=[[ 80.81155556 0.82893333 2.87077778 2.97862222 -18.59855556] 
[ 0.82893333 0.01547111 0.04784444 -0.05957111 -0.09624444] 
[ 2.87077778 0.04784444 0.20449444 -0.00278333 -0.3157 ] 
[ 2.97862222 -0.05957111 -0.00278333 4.68989889 -3.28908889] 
[-18.59855556 -0.09624444 -0.3157  -3.28908889 9.14991111]] 

ただし、次のエラーが表示されます。

TypeError: <class 'cvxpy.atoms.affine.add_expr.AddExpression'> is not a valid type for a Constant value. 

私がこれをどのように扱うことができる CVXPYが動作しないので、私は、凸状の問題を解決するわけではないようですか?

私はCVXPYに新しいですので、具体的にしてください!ありがとう!

+0

(1)このコードは不完全であり、再現できません。さらに、cvxpyの使い方は変です。これらのドットはすべて必要ではありません。 (2)cvxpyは自動的にscipy.sparse行列のように動作し、 '' wx * a''で十分です。 (3)最終的なエラーが形状のためか、操作自体がこのコードを与えてデバッグするのが難しい場合。 (4)あなたのモデルが凸でない場合は、cvxpyの中でそれを定式化することはできません! – sascha

+0

私は問題を明確にして、マトリックスの形が私のエラーの理由ではないことを確かめましたが、それでもうまくいきません。 – Stanley

+0

そのコードをコピーしてコピーできるものに編集するのはどうですか?これで、A配列と手動またはツールでサポートされている挿入コンマをコピーして構文的に有効なコードにし、これを他のコード部分と組み合わせることができるようになりました(コード内のnp配列の作成は印刷とは異なります) ?また、どのcvxpyのバージョンを使用しているかは記述していません(実際には違いがあります)。 – sascha

答えて

0

他の人があなたの問題を抱えているようですが、それは配列キャストのためです。すべてのデータ型をnumpyに変更し、何かが解決するかどうかを確認してください

+0

私はすでにnumpyとして自分のデータ型を設定しているようですが、まだ動作しません... 他に解決策はありますか?どうも – Stanley

関連する問題