You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.0 KiB
89 lines
3.0 KiB
//==============================================================================
|
|
//
|
|
// Copyright (c) 2013-
|
|
// Authors:
|
|
// * Ernst Moritz Hahn <emhahn@cs.ox.ac.uk> (University of Oxford)
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// This file is part of PRISM.
|
|
//
|
|
// PRISM is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// PRISM is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with PRISM; if not, write to the Free Software Foundation,
|
|
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
//==============================================================================
|
|
|
|
package param;
|
|
|
|
/**
|
|
* Implements a {@code RegionFactory} producing {@code BoxRegion}s.
|
|
*
|
|
* @author Ernst Moritz Hahn <emhahn@cs.ox.ac.uk> (University of Oxford)
|
|
* @see RegionFactory
|
|
* @see BoxRegion
|
|
*/
|
|
final class BoxRegionFactory extends RegionFactory {
|
|
/** method to use to split boxes produces with this factory.
|
|
* split either at all or only at the longest side. */
|
|
private int splitMethod;
|
|
|
|
/**
|
|
* Constructs a new box region factory.
|
|
*
|
|
* @param functionFactory function factory to use
|
|
* @param constraintChecker constraint checker to use
|
|
* @param precision remaining undecided area to allow
|
|
* @param numStates number of model states
|
|
* @param initialState initial states of model
|
|
* @param subsumeRegions whether to subsume regions if possible
|
|
* @param splitMethod method to split regions
|
|
*/
|
|
BoxRegionFactory(FunctionFactory functionFactory, ConstraintChecker constraintChecker, BigRational precision,
|
|
int numStates, int initialState, boolean subsumeRegions, int splitMethod)
|
|
{
|
|
this.functionFactory = functionFactory;
|
|
this.constraintChecker = constraintChecker;
|
|
this.precision = precision;
|
|
this.numStates = numStates;
|
|
this.initialState = initialState;
|
|
this.subsumeRegions = subsumeRegions;
|
|
this.splitMethod = splitMethod;
|
|
}
|
|
|
|
@Override
|
|
RegionValues completeCover(StateValues values)
|
|
{
|
|
RegionValues result = new RegionValues(this);
|
|
BigRational[] lower = new BigRational[functionFactory.getNumVariables()];
|
|
BigRational[] upper = new BigRational[functionFactory.getNumVariables()];
|
|
for (int var = 0; var < functionFactory.getNumVariables(); var++) {
|
|
lower[var] = functionFactory.getLowerBound(var);
|
|
upper[var] = functionFactory.getUpperBound(var);
|
|
}
|
|
BoxRegion region = new BoxRegion(this, lower, upper);
|
|
result.add(region, values);
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Returns the method used to split regions.
|
|
* See values specified in {@code Region}.
|
|
*
|
|
* @return method used to split regions
|
|
*/
|
|
int getSplitMethod()
|
|
{
|
|
return splitMethod;
|
|
}
|
|
}
|