def as_constraint(self, *args): """ Imagine there are bubbles of a fixed size floating about constraining the discrete space each face is given a coordinate X = 1, Xg is coordinate dist_real <= r X = 1, Xg is (0, 0) dist_fake <= r + 1000 note - 2-norm is SIGNIFICANTLY Faster than 1norm. """ N = len(self.space.faces) # centroids.shape[N, 2] centroids = np.asarray(self.space.faces.centroids) M = 2 * centroids.max() centroids = Parameter(shape=centroids.shape, value=centroids) px, py = self._p.X, self._p.Y C = [] for i, face_set in enumerate(self._actions): X = face_set.vars # selected faces cx = cvx.multiply(centroids[:, 0], X) cy = cvx.multiply(centroids[:, 1], X) Xg = cvx.vstack([cx, cy]).T v = cvx.vstack( [cvx.promote(px[i], (N, )), cvx.promote(py[i], (N, ))]).T C = [cvx.norm(v - Xg, 2, axis=1) <= self._r[i] + M * (1 - X)] return C
def as_constraint(self, *args): """ Imagine there are bubbles of a fixed size floating about constraining the discrete space each face is given a coordinate X = 1, Xg is coordinate dist_real <= r X = 1, Xg is (0, 0) dist_fake <= r + 1000 note - 2-norm is SIGNIFICANTLY Faster than 1norm. """ N = len(self.space.faces) X = self.stacked # selected faces M = 100 # upper bound # centroids.shape[N, 2] centroids = np.asarray(self.space.faces.centroids) centroids = Parameter(shape=centroids.shape, value=centroids) cx = cvx.multiply(centroids[:, 0], X) cy = cvx.multiply(centroids[:, 1], X) Xg = cvx.vstack([cx, cy]).T v = cvx.vstack( [cvx.promote(self._bx, (N, )), cvx.promote(self._by, (N, ))]).T C = [cvx.norm(v - Xg, 2, axis=1) <= self._r + M * (1 - X)] return C
def test_hermitian(self): """Test Hermitian variables. """ with self.assertRaises(Exception) as cm: v = Variable((4, 3), hermitian=True) self.assertEqual( str(cm.exception), "Invalid dimensions (4, 3). Must be a square matrix.") v = Variable((2, 2), hermitian=True) assert v.is_hermitian() # v = Variable((2,2), PSD=True) # assert v.is_symmetric() # v = Variable((2,2), NSD=True) # assert v.is_symmetric() v = Variable((2, 2), diag=True) assert v.is_hermitian() v = Variable((2, 2), hermitian=True) expr = v + v assert expr.is_hermitian() expr = -v assert expr.is_hermitian() expr = v.T assert expr.is_hermitian() expr = cp.real(v) assert expr.is_hermitian() expr = cp.imag(v) assert expr.is_hermitian() expr = cp.conj(v) assert expr.is_hermitian() expr = cp.promote(Variable(), (2, 2)) assert expr.is_hermitian()
def test_symmetric(self) -> None: """Test symmetric variables. """ with self.assertRaises(Exception) as cm: v = Variable((4, 3), symmetric=True) self.assertEqual( str(cm.exception), "Invalid dimensions (4, 3). Must be a square matrix.") v = Variable((2, 2), symmetric=True) assert v.is_symmetric() v = Variable((2, 2), PSD=True) assert v.is_symmetric() v = Variable((2, 2), NSD=True) assert v.is_symmetric() v = Variable((2, 2), diag=True) assert v.is_symmetric() assert self.a.is_symmetric() assert not self.A.is_symmetric() v = Variable((2, 2), symmetric=True) expr = v + v assert expr.is_symmetric() expr = -v assert expr.is_symmetric() expr = v.T assert expr.is_symmetric() expr = cp.real(v) assert expr.is_symmetric() expr = cp.imag(v) assert expr.is_symmetric() expr = cp.conj(v) assert expr.is_symmetric() expr = cp.promote(Variable(), (2, 2)) assert expr.is_symmetric()
def get_energy_option_down(self, mask): """ transform the energy option down into a n x 1 vector Args: mask: Returns: a CVXPY vector """ return cvx.promote(self.eod_avg, mask.loc[mask].shape)