]> gitweb.michael.orlitzky.com - dunshire.git/blob - cones.py
Simplify the model a bit.
[dunshire.git] / cones.py
1 class SymmetricCone:
2 def __init__(self, dimension):
3 self._dimension = dimension
4
5 def dimension(self):
6 return self._dimension
7
8
9 class NonnegativeOrthant(SymmetricCone):
10 pass
11
12 class IceCream(SymmetricCone):
13 pass
14
15 class SymmetricPSD(SymmetricCone):
16 pass
17
18 class CartesianProduct(SymmetricCone):
19 def __init__(self, *factors):
20 self._factors = factors
21
22 def factors(self):
23 return self._factors
24
25 def cvxopt_dims(self):
26 d = { 'l':0, 'q':[], 's':[] }
27 d['l'] += sum([ K.dimension() for K in self.factors()
28 if isinstance(K, NonnegativeOrthant) ])
29 d['q'] = [ K.dimension() for K in self.factors()
30 if isinstance(K, IceCream) ]
31 d['s'] = [ K.dimension() for K in self.factors()
32 if isinstance(K, SymmetricPSD) ]
33 return d
34
35 def dimension(self):
36 return sum([ f.dimension() for f in self.factors() ])
37