ich auf einem Minimum-Varianz-Optimierungsproblem in Python arbeite CVXPY verwenden, dieDynamische Liste von Einschränkungen in CVXPY erzeugen
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
]
Mit w
ist in Form von
w = Variable(n)
nimmt in Zwänge in Form von
Um dies effizienter zu machen, möchte ich meine Liste von Constraints dynamisch basierend auf einer Datei erstellen, in der ich meine Einstellungen speichern werde. Einlesen und die Schaffung ein Constraints Liste funktioniert gut, und von
type(constraints)
mit es zeigt
<type 'list'>
Aber ein Blick auf den tatsächlichen Einträgen es
[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)))]
enthält, während Mine in diesem Format ist
['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'
]
Der verwendete Code in den Daten zu lesen ist
def read_in_config(filename):
with open(filename) as f:
content = f.read().splitlines()
return content
Wer weiß, wie dies getan werden kann? Das Problem besteht darin, dass w im Variablenformat von CVXPY vor der Verwendung verwendet wird.
(1) Sie haben den für das Lesen/Schreiben zuständigen Code nicht angezeigt. Vielleicht solltest du. (2) Die tatsächlichen Einträge sind tatsächlich genau das, was Sie formuliert haben. Es ist die interne Darstellung. (3) Diese Constraints/interne Repräsentation hängt möglicherweise von den Variablenobjekten ab, also hoffe ich, dass Sie sie auch speichern. Wird möglicherweise automatisch abgerufen, wenn Sie Essiggurken verwendet haben. (4) Erzählen Sie mehr darüber, was Sie eigentlich tun möchten? Ersetzen Sie * w * nach dem Lesen der Einschränkungen? [cvxpy] (www.cvxpy.org) unterstützt Parameter, um so etwas zu tun. Andere mögliche Ansätze basieren auf Pythons Eval, was beängstigend ist! – sascha
1.) Ich habe den Code hinzugefügt, der meine Daten einliest. 2.) Die Frage, wie ich meine String-Listenelemente in die CVXOPT-Variablen umwandle? 4.) Ich löste ein minimales Varianzproblem, w ist ein Vektor von Gewichten, der mir den optimalen Anteil einer Aktie sagt, alle Gewichte summieren sich zu 1. Hoffe das klärt ein bisschen mehr was ich versuche zu tun – ThatQuantDude
Das sieht Komisch, liest du deine Einschränkungen so? Ich war sicher, du hättest Gurke benutzt. So bekomme ich immer noch nicht alle Punkte. Ich denke, du willst deine Constraints einmal erstellen, die Constraints einlesen, w auswählen und lösen. Also warum willst du das so machen? Irgendwelche wirklichen Gründe (anstatt nur das Problem in Abhängigkeit von einem gegebenen w zu formulieren)? Abhängig von der Art von w, wird es nicht wirklich eine Beschleunigung geben. Und du solltest deinen Text sicherlich ändern, da es mir scheint, dass du cvxpy verwendest (das intern cvxopt benutzt), nicht cvxopt. Das macht mich verrückt! – sascha