Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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()
Exemple #4
0
    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()
Exemple #5
0
    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)