@Override public void consistency(Store store) { do { store.propagationHasOccurred = false; FloatIntervalDomain pDom = FloatDomain.subBounds(r.min(), r.max(), c, c); p.domain.in(store.level, p, pDom.min(), pDom.max()); FloatIntervalDomain rDom = FloatDomain.addBounds(p.min(), p.max(), c, c); r.domain.in(store.level, r, rDom.min(), rDom.max()); } while (store.propagationHasOccurred); }
public FloatInterval[] solve() { A = new FloatInterval[fprime.length][]; for (int i = 0; i < fprime.length; i++) { A[i] = new FloatInterval[fprime[i].length]; for (int j = 0; j < fprime[i].length; j++) { A[i][j] = new FloatInterval(fprime[i][j].min(), fprime[i][j].max()); } } xInit = new double[x.length]; for (int i = 0; i < x.length; i++) xInit[i] = (x[i].max() + x[i].min()) / 2.0; b = values(); if (debug) { System.out.println("Middle values for x"); for (int i = 0; i < xInit.length; i++) System.out.print(xInit[i] + " "); System.out.println(); System.out.println("Middle values for f"); for (int i = 0; i < b.length; i++) System.out.print(b[i] + ", "); System.out.println(); } IntervalGaussSeidel igs = new IntervalGaussSeidel(A, b); if (debug) System.out.println(igs); FloatInterval[] v = igs.solve(); if (v == null) return null; FloatInterval[] result = new FloatInterval[v.length]; for (int i = 0; i < v.length; i++) { FloatIntervalDomain r = FloatDomain.addBounds(v[i].min(), v[i].max(), xInit[i], xInit[i]); result[i] = new FloatInterval(r.min(), r.max()); } return result; }