首先,如果我的問題沒有意義,我很抱歉,我是使用 CVXPY 庫的新手,我不明白一切:/
我正在嘗試解決一個我認為很容易處理的最小化問題。我得到了一個已知系數的矩陣 S 維(9,7),已知系數的 B 維(1,7),我需要找到的 Alpha 維(1,7),有各種限制:
- Alpha 必須為正
- Alpha 的所有系數之和必須等于 1
我需要優化 Alpha,例如:A @ Alpha-B=0。 我發現了 CVXPY 并認為最小二乘優化非常適合這個問題。
這是我寫的代碼:
Alpha = cp.Variable(7)
objective = cp.Minimize(cp.sum_squares(S @ Alpha - B))
constraints = [0 <= Alpha, Alpha<=1, np.sum(Alpha.value)==1]
prob = cp.Problem(objective, constraints)
result = prob.solve()
print(Alpha.value)
和
S= np.array([[0.03,0.02,0.072,0.051,0.058,0.0495,0.021 ],
[0.0295, 0.025 , 0.1 , 0.045 , 0.064 , 0.055 , 0.032 ],
[0.02 , 0.018 , 0.16 , 0.032 , 0.054 , 0.064 , 0.025 ],
[0.0195, 0.03 , 0.144 , 0.027 , 0.04 , 0.06 , 0.04 ],
[0.02 , 0.0315, 0.156 , 0.0295 ,0.027 , 0.0615 ,0.05 ],
[0.021 , 0.033 , 0.168 , 0.03 , 0.0265 ,0.063 , 0.09 ],
[0.02 , 0.05 , 0.28 , 0.039 , 0.035 , 0.055 , 0.04 ],
[0.021 , 0.03 , 0.22 , 0.0305, 0.0255, 0.057 , 0.009 ],
[0.0195, 0.008 , 0.2 , 0.021 , 0.01 , 0.048 , 0.0495]])
B=np.array([0.1015, 0.0888, 0.0911, 0.0901, 0.0945, 0.0909, 0.078 , 0.0913,
0.0845])
我的問題是以下之一:
- 沒有約束np.sum(Alpha.value)==1,代碼給了我結果;但是當我添加約束時它會回傳我
None
我認為公式不好,但我不知道如何以另一種方式撰寫它?或者也許問題沒有解決方案?感謝您的時間
uj5u.com熱心網友回復:
僅使用sum(Alpha) == 1. 您不應該numpy在 CVXPY 運算式中使用函式,您必須使用https://www.cvxpy.org/tutorial/functions/index.html 中列出的 CVXPY 函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/402820.html
標籤:
下一篇:交換不同大小向量中的某些值
