0

私は、CVXPY を使用して Python で最小分散最適化問題に取り組んでおり、次の形式で制約を取り入れています。

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 を取得することです。

4

1 に答える 1

1

わかりましたので、うまくいく解決策を見つけました。

制約を読み込み、文字列を連結して s.th like を取得できます

'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, w[country_mappings['France']] > 0.12 ]'

次に、使用するだけです

exec 'string from above'

exec を使用するのが最も安全なオプションではないことは知っていますが、機能します。W はコードで定義する必要があります

w = Variable(n)
于 2016-08-05T18:39:57.593 に答える