私は、これは私のコードである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
に新しいですので、具体的にしてください!ありがとう!
(1)このコードは不完全であり、再現できません。さらに、cvxpyの使い方は変です。これらのドットはすべて必要ではありません。 (2)cvxpyは自動的にscipy.sparse行列のように動作し、 '' wx * a''で十分です。 (3)最終的なエラーが形状のためか、操作自体がこのコードを与えてデバッグするのが難しい場合。 (4)あなたのモデルが凸でない場合は、cvxpyの中でそれを定式化することはできません! – sascha
私は問題を明確にして、マトリックスの形が私のエラーの理由ではないことを確かめましたが、それでもうまくいきません。 – Stanley
そのコードをコピーしてコピーできるものに編集するのはどうですか?これで、A配列と手動またはツールでサポートされている挿入コンマをコピーして構文的に有効なコードにし、これを他のコード部分と組み合わせることができるようになりました(コード内のnp配列の作成は印刷とは異なります) ?また、どのcvxpyのバージョンを使用しているかは記述していません(実際には違いがあります)。 – sascha