|
|
|
@ -30,7 +30,6 @@ import common.IntSet; |
|
|
|
import explicit.rewards.MCRewards; |
|
|
|
import explicit.rewards.MDPRewards; |
|
|
|
import prism.PrismException; |
|
|
|
import prism.PrismNotSupportedException; |
|
|
|
|
|
|
|
/** |
|
|
|
* IterationMethod that encapsulates the functionality of the Jacobi method. |
|
|
|
@ -106,27 +105,59 @@ class IterationMethodJacobi extends IterationMethod { |
|
|
|
@Override |
|
|
|
public IterationValIter forMvMultMinMax(MDP mdp, boolean min, int[] strat) throws PrismException |
|
|
|
{ |
|
|
|
throw new PrismNotSupportedException("Jacobi not supported for MDPs"); |
|
|
|
return new TwoVectorIteration(mdp, null) { |
|
|
|
@Override |
|
|
|
public void doIterate(IntSet states) |
|
|
|
{ |
|
|
|
mdp.mvMultJacMinMax(soln, min, soln2, states.iterator(), strat); |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public IterationIntervalIter forMvMultMinMaxInterval(MDP mdp, boolean min, int[] strat, boolean fromBelow, boolean enforceMonotonicity, |
|
|
|
boolean checkMonotonicity) throws PrismException |
|
|
|
{ |
|
|
|
throw new PrismNotSupportedException("Jacobi not supported for MDPs"); |
|
|
|
IterationPostProcessor post = (soln, soln2, states) -> { |
|
|
|
twoVectorPostProcessing(soln, soln2, states, fromBelow, enforceMonotonicity, checkMonotonicity); |
|
|
|
}; |
|
|
|
|
|
|
|
return new TwoVectorIteration(mdp, post) { |
|
|
|
@Override |
|
|
|
public void doIterate(IntSet states) |
|
|
|
{ |
|
|
|
mdp.mvMultJacMinMax(soln, min, soln2, states.iterator(), strat); |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public IterationValIter forMvMultRewMinMax(MDP mdp, MDPRewards rewards, boolean min, int[] strat) throws PrismException |
|
|
|
{ |
|
|
|
throw new PrismNotSupportedException("Jacobi not supported for MDPs"); |
|
|
|
return new TwoVectorIteration(mdp, null) { |
|
|
|
@Override |
|
|
|
public void doIterate(IntSet states) |
|
|
|
{ |
|
|
|
mdp.mvMultJacRewMinMax(soln, rewards, min, soln2, states.iterator(), strat); |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public IterationIntervalIter forMvMultRewMinMaxInterval(MDP mdp, MDPRewards rewards, boolean min, int[] strat, boolean fromBelow, |
|
|
|
boolean enforceMonotonicity, boolean checkMonotonicity) throws PrismException |
|
|
|
{ |
|
|
|
throw new PrismNotSupportedException("Jacobi not supported for MDPs"); |
|
|
|
IterationPostProcessor post = (soln, soln2, states) -> { |
|
|
|
twoVectorPostProcessing(soln, soln2, states, fromBelow, enforceMonotonicity, checkMonotonicity); |
|
|
|
}; |
|
|
|
|
|
|
|
return new TwoVectorIteration(mdp, post) { |
|
|
|
@Override |
|
|
|
public void doIterate(IntSet states) |
|
|
|
{ |
|
|
|
mdp.mvMultJacRewMinMax(soln, rewards, min, soln2, states.iterator(), strat); |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|