Beispiel #1
0
        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);
                }
            }
        }
Beispiel #3
0
        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);
     }
 }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        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();
        }
Beispiel #7
0
 public MainView()
 {
     DataContext = new ProbModel();
     InitializeComponent();
 }