public static MultiVariatePieceWiseLinearFunction createSenseSleepFunction( ScenarioProperties scenario, List<SensorProperties> sensorProperties, double overlappingArea) { System.out.println( "Creating continuous sense sleep function with " + sensorProperties.size() + " dimensions"); NCube domain = createDomain(sensorProperties, scenario); if (sensorProperties.size() == 1) { return MultiVariatePieceWiseLinearFunctionUtilities.createConstantFunction( domain, overlappingArea * sensorProperties.iterator().next().getSenseIntervalLength()); } // max(0, min(x1 + l1, x2 + l2) - max(x1, x2)) MultiVariatePieceWiseLinearFunction zero = MultiVariatePieceWiseLinearFunctionUtilities.createZeroFunction(domain); // double l = scenario.getScheduleIntervalLength(); MultiVariatePieceWiseLinearFunction maxStart = createMaxStartFunction(domain); MultiVariatePieceWiseLinearFunction minEnd = createMinEndFunction(domain, sensorProperties); MultiVariatePieceWiseLinearFunction minMinusMax = minEnd.subtract(maxStart); MultiVariatePieceWiseLinearFunction overlap = minMinusMax.max(zero); // MultiVariatePieceWiseLinearFunction result = // overlap.add(-l).multiply( // -1.0); MultiVariatePieceWiseLinearFunction result = overlap; for (SensorProperties properties : sensorProperties) { result = result.add(-properties.getSenseIntervalLength()); } result = result.multiply(-1); return result.multiply(overlappingArea); }