Я работаю на минимальной задаче оптимизации дисперсии в 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
Кто-нибудь знает, как это можно сделать? Проблема заключается в получении w в переменном формате CVXPY, прежде чем он может быть использован.
(1) Вы не указали код, ответственный за чтение/запись. Возможно тебе следует. (2) Фактические записи на самом деле именно то, что вы сформулировали. Это внутреннее представление. (3) Эти ограничения/внутреннее представление могут зависеть от переменных объектов, поэтому я надеюсь, что вы их тоже сохраните. Может быть выбрана автоматически, если вы использовали рассол. (4) Расскажите подробнее о том, что вы на самом деле пытаетесь сделать? Замена * w * после прочтения ограничений? [cvxpy] (www.cvxpy.org) поддерживает параметры, чтобы сделать что-то подобное. Другие возможные подходы основаны на eval python, что страшно! – sascha
1.) Я добавил код, который читается в моих данных. 2.) Вопрос в том, как мне передать элементы списка строк в переменные CVXOPT? 4.) Я решаю задачу с минимальной дисперсией, w - вектор весов, который говорит мне об оптимальной пропорции запаса, все веса составляют до 1. Надеюсь, что это немного уточняет, что я пытаюсь сделать. – ThatQuantDude
Это выглядит смешно, читаете ли вы свои ограничения? Я был уверен, что ты бы использовал марихуану. Так что я все еще не получаю все очки. Я думаю, вы хотите создать свои ограничения один раз, прочитать в ограничениях, выбрать w и решить. Так почему вы хотите сделать это так? Любые реальные причины (вместо того, чтобы просто формулировать проблему в зависимости от заданного w)? В зависимости от характера w, на самом деле не будет ускорения. И вы обязательно должны изменить свой текст, поскольку мне кажется, что вы используете cvxpy (который использует cvxopt внутри), а не cvxopt. Это сводит меня с ума! – sascha