0
我在最小方差最優化問題在使用Python CVXPY它接受約束的動態生成的約束列表中CVXPY
constraints = [
sum_entries(w) == 1,
w[0:5] >0.05,
w[1] > 0.05,
w[6] == 0,
sum_entries(w[country_mappings['France']]) == 0.39,
w >= 0,positive
w[country_mappings['France']] > 0.12
]
形式正與w
在
w = Variable(n)
形式存在
爲了更有效地運行這個功能,我想根據一個文件來動態創建我的約束列表,我將存儲我的設置。閱讀和創建限制列表工作正常,並且通過使用
type(constraints)
它顯示
<type 'list'>
但看實際條目包含
[EqConstraint(Expression(AFFINE, UNKNOWN, (1, 1)), Constant(CONSTANT,
POSITIVE, (1, 1))), LeqConstraint(Constant(CONSTANT, POSITIVE, (1,
1)), Expression(AFFINE, UNKNOWN, (5, 1))),
LeqConstraint(Constant(CONSTANT, POSITIVE, (1, 1)),
Expression(AFFINE, UNKNOWN, (1, 1))), EqConstraint(Expression(AFFINE,
UNKNOWN, (1, 1)), Constant(CONSTANT, ZERO, (1, 1))),
EqConstraint(Expression(AFFINE, UNKNOWN, (1, 1)), Constant(CONSTANT,
POSITIVE, (1, 1))), LeqConstraint(Constant(CONSTANT, ZERO, (1, 1)),
Variable(10, 1)), LeqConstraint(Constant(CONSTANT, POSITIVE, (1, 1)),
Expression(AFFINE, UNKNOWN, (3L, 1L)))]
,而我的是這種格式
['sum_entries(w) == 1',
'w[0:5] > 0.05',
'w[1] > 0.05',
'w[6] == 0',
'sum_entries(w[country_mappings['France']]) == 0.39',
'w >= 0',
'w[country_mappings['France']] > 0.12'
]
用於讀取數據的代碼是
def read_in_config(filename):
with open(filename) as f:
content = f.read().splitlines()
return content
有沒有人知道如何做到這一點?問題是在使用CVXPY的變量格式之前獲取w。
(1)您沒有顯示負責讀/寫的代碼。也許你應該。 (2)實際的條目實際上正是你制定的。這是內部表示。 (3)這些約束/內部表示可能取決於變量對象,所以我希望你也保存它們。如果您使用過酸菜,可能會自動提取。 (4)更多地瞭解你實際上想做什麼?在閱讀約束條件後替換* w * [cvxpy](www.cvxpy.org)支持參數來做類似的事情。其他可能的方法是基於python的eval,這是可怕的! – sascha
1.)我添加了讀取我的數據的代碼。 2.)如何將我的字符串列表元素轉換爲CVXOPT變量? 4.)我正在解決一個最小方差問題,w是一個權重矢量,它告訴我一個股票的最佳比例,所有權重合計爲1.希望澄清更多我想要做的事 – ThatQuantDude
這個長相有趣的是,你是否正在閱讀你的約束?我確定你會用泡菜。所以我仍然沒有得到所有的觀點。我認爲你想要建立你的約束一次,閱讀約束,選擇w並解決。那麼,爲什麼你想這樣做呢?任何真正的原因(而不是根據給定的w來制定問題)?根據w的性質,不會有真正的加速。你當然應該改變你的文本,因爲在我看來你使用的是cvxpy(內部使用cvxopt),而不是cvxopt。這讓我瘋狂! – sascha