예제 #1
0
def __pySIVIA_ctc(X0,
                  ctc,
                  epsilon,
                  color_out='k[b]',
                  color_maybe='k[y]',
                  draw_boxes=True,
                  save_result=True,
                  **kwargs):

    stack = deque([IntervalVector(X0)])
    res_y, res_out = [], []
    lf = LargestFirst(epsilon / 2.0)
    k = 0

    while len(stack) > 0:
        k = k + 1
        X = stack.popleft()
        X0 = IntervalVector(X)

        # X =  __contract_and_extract(X, ctc, res_out, color_out)
        ctc.contract(X)
        if (draw_boxes is True and vibes_available is True):
            drawBoxDiff(X0, X, color_out, **kwargs)

        if save_result is True:
            res_out += X0.diff(X)

        if (X.is_empty()):
            continue
        if (X.max_diam() < epsilon):
            if draw_boxes is True:
                vibes.drawBox(X[0].lb(), X[0].ub(), X[1].lb(), X[1].ub(),
                              color_maybe)
            if save_result is True:
                res_y.append(X)
        elif (X.is_empty() is False):
            (X1, X2) = lf.bisect(X)
            stack.append(X1)
            stack.append(X2)

    print('number of contraction %d / number of boxes %d' %
          (k, len(res_out) + len(res_y)))

    return (res_out, res_y)
예제 #2
0
 def test_diff_2(self):
     a = IntervalVector([[-1, 1], [0, 2], [1, 5]])
     b = IntervalVector(a)
     l = a.diff(b)
     self.assertEqual(len(l), 0)
예제 #3
0
 def test_diff(self):
     a = IntervalVector([[-1, 1], [0, 2], [1, 5]])
     b = IntervalVector(list(range(0, 3))).inflate(1)
     l = a.diff(b)
     self.assertEqual(len(l), 1)
     self.assertEqual(l[0], IntervalVector([[-1, 1], [0, 2], [3, 5]]))