public IModel Encode() { //get variable info from ModulesFile varList = new VariableList(modules); //Collect all sync label of all modules synchs = modules.GetAllSynchs().ToList(); AddVars(); //Create Expression Encoder, use the same copy of varList, variableEncoding expressionEncoder = new ExpressionToBDD(varList, variableEncoding); EncodeSystemDef(modules.systemDef); // get rid of any nondet dd variables not needed if (modules.modelType == ModelType.MDP) { CUDDNode tmp = CUDD.GetSupport(trans); tmp = CUDD.Abstract.ThereExists(tmp, allRowVars); tmp = CUDD.Abstract.ThereExists(tmp, allColVars); CUDDVars ddv = new CUDDVars(); while (!tmp.Equals(CUDD.ONE)) { ddv.AddVar(CUDD.Var(tmp.GetIndex())); tmp = tmp.GetThen(); } CUDD.Deref(tmp); allNondetVars.Deref(); allNondetVars = ddv; } init = GetInitState(); // CUDD.Deref(moduleRangeDDs, moduleIdentities, colVarRanges, syncVars, choiceVars); CUDD.Deref(moduleRowVars, moduleColVars, rowVars, colVars, new List <CUDDVars>() { globalRowVars, globalColVars, allSynchVars, allChoiceVars }); IModel result; if (modules.modelType == ModelType.DTMC) { // allNondetVars.Deref(); result = new ProbModel(trans, init, stateRewards, transRewards, allRowVars, allColVars, varList, allRowVarRanges, varIdentities, variableEncoding); } else { result = new NonDetModel(trans, init, stateRewards, transRewards, allRowVars, allColVars, allNondetVars, varList, allRowVarRanges, varIdentities, variableEncoding); } return(result); }
public void TestGoalsThatDone() { for (int numGoals = MinGoals; numGoals <= MaxGoals; numGoals++) { //Интервал включает все уже совершенные голы var interval = new GoalsInterval(1, numGoals); for (int hostGoalsCount = 1; hostGoalsCount <= interval.Length; hostGoalsCount++) { var goalsList = new List <GoalType>(); for (int k = 1; k <= hostGoalsCount; k++) { goalsList.Add(GoalType.Host); } int guestGoalsCount = interval.Length - hostGoalsCount; for (int i = 0; i < guestGoalsCount; i++) { goalsList.Add(GoalType.Guest); } var hostsWonProbExpected = hostGoalsCount > guestGoalsCount? 1d : 0d; var guestsWonProbExpected = guestGoalsCount > hostGoalsCount ? 1d : 0d; var drawProbExpected = 1 - hostsWonProbExpected - guestsWonProbExpected; var inputData = new InputData(Constants.MinutesPerMatch, goalsList, interval, StatsData.MeanHostGoals, StatsData.MeanGuestGoals); var probsResult = ProbModel.ComputeProbs(inputData).Result; var guestsWonProb = probsResult.GuestsWonProb; var hostsWonProb = probsResult.HostsWonProb; var drawProb = probsResult.DrawProb; Assert.AreEqual(hostsWonProbExpected, hostsWonProb, Delta); Assert.AreEqual(guestsWonProbExpected, guestsWonProb, Delta); Assert.AreEqual(drawProbExpected, drawProb, Delta); } } }
public ProbModelChecker(ProbModel model) : base(model) { FilterStates(); // Debug.WriteLine("States: " + CUDD.GetNumMinterms(reach, allRowVars.GetNumVars()) + " (" + CUDD.GetNumMinterms(start, allRowVars.GetNumVars()) + " initial)"); Debug.WriteLine("Transitions: " + CUDD.GetNumMinterms(trans01, allRowVars.GetNumVars() * 2)); Debug.WriteLine("Transition matrix: " + CUDD.Print.GetInfoString(trans, allRowVars.GetNumVars() * 2) + ", vars: " + allRowVars.GetNumVars() + "r/" + allColVars.GetNumVars() + "c"); }
public void TestSingleGoalInterval() { for (int i = MinGoals; i <= MaxGoals; i++) { var interval = new GoalsInterval(i); var inputData = new InputData(Constants.MinutesPerMatch, EmptyGoals, interval, StatsData.MeanHostGoals, StatsData.MeanGuestGoals); var res = ProbModel.ComputeProbs(inputData); } }
protected ExpressionToBDD(ProbModel model) { this.allRowVars = model.allRowVars; this.allColVars = model.allColVars; this.allRowVarRanges = model.allRowVarRanges; this.varIdentities = model.varIdentities; this.varList = model.varList; this.varEncodings = model.varEncodings; this.trans = model.trans; this.start = model.start; this.stateRewards = model.stateRewards; this.transRewards = model.transRewards; }
public void updateModelThreadFunction(object modelRunParams0) { ModelRunParams modelRunParams = (ModelRunParams)modelRunParams0; // first check if model needs creating bool create = true; if (model != null) { switch (modelRunParams.inParams.model) { case ModelType.CCD: create = (model.GetType() != typeof(CCDModel)); break; case ModelType.Probabilistic: create = (model.GetType() != typeof(ProbModel)); break; case ModelType.Transport: create = (model.GetType() != typeof(TransModel)); break; } } if (create) { switch (modelRunParams.inParams.model) { case ModelType.CCD: model = new CCDModel(this, modelRunParams.inParams, preview.outParams, modelRunParams.optionParams); break; case ModelType.Probabilistic: model = new ProbModel(this, modelRunParams.inParams, preview.outParams, modelRunParams.optionParams); break; case ModelType.Transport: model = new TransModel(this, modelRunParams.inParams, preview.outParams, modelRunParams.optionParams); break; default: model = new PreviewModel(this, modelRunParams.inParams, modelRunParams.optionParams); break; } // if model just created; model needs to be updated too modelRunParams.updateModelReq = true; } if (modelRunParams.updateModelReq || modelRunParams.updateOutReq) { // clear previous output if (modelRunParams.viewType == ViewType.Out) { model.clearOut(); } else if (modelRunParams.viewType == ViewType.Time) { model.clearTimeOut(); } updateModelObservers(); } if (modelRunParams.updateModelReq) { preview.update(modelRunParams.inParams, null); preview.updateOut(modelRunParams.viewParams); model.update(modelRunParams.inParams, preview.previewParams); // if model updated, out must be updated too modelRunParams.updateOutReq = true; } if (modelRunParams.updateOutReq) { if (modelRunParams.viewType == ViewType.Out) { model.updateOut(modelRunParams.viewParams); } else if (modelRunParams.viewType == ViewType.Time) { model.updateTimeOut(modelRunParams.viewParams); } model.stats.start(); updateModelObservers(); model.stats.storeDrawviewTime(); } Util.gcCollect(); }
public MainView() { DataContext = new ProbModel(); InitializeComponent(); }