Ejemplo n.º 1
0
        /// <summary>
        /// Method returning all interventions appropriate for a player.
        /// </summary>
        ///
        /// <returns> List containing all appropriate interventions at the moment. </returns>
        public List <String> getInterventions()
        {
            List <String> interventions = new List <String>();

            MotivationModel mm = loadMotivationModel();
            Boolean         val;

            foreach (Intervention iv in mm.motivationInterventions.motivationInterventionList)
            {
                try
                {
                    val = FormulaInterpreterBool.eval(iv.rule);
                    if (val)
                    {
                        interventions.Add(iv.name);
                    }
                }
                catch (Exception e)
                {
                    loggingMAd("ERROR: Evaluation of Boolean value for intervention trigger failed!");
                    loggingMAd(e.Message);
                }
            }

            return(interventions);
        }
Ejemplo n.º 2
0
        public void performTest2()
        {
            log("***************TEST 2********************");

            MotivationModel mm = createExampleMM();
            string          id = "MotivationAssessmentTestId.xml";

            writeMMToFile(id, mm);

            MotivationAssessmentAssetSettings maass = new MotivationAssessmentAssetSettings();

            maass.XMLLoadingId = id;
            getMAsA().Settings = maass;
            MotivationModel mm2 = getMAsA().loadMotivationModel();

            if (mm.toXmlString().Equals(mm2.toXmlString()))
            {
                log("MotivationModels before and after the loading are identically!");
            }
            else
            {
                log("MotivationModels before and after the loading are NOT identically!", Severity.Error);
                Assert.Fail();
            }
        }
Ejemplo n.º 3
0
    public void Add(MotivationModel model)
    {
        if (motivations == null)
        {
            motivations = new List <MotivationModel> ();
        }

        motivations.Add(model);
    }
Ejemplo n.º 4
0
        /// <summary>
        /// Method performing a simple test: creating example MotivationModel and feeding hints for a testplayer.
        /// </summary>
        internal void performTest1()
        {
            log("***************TEST 1********************");

            MotivationModel mm = createExampleMM();

            setMotivationModel(mm);

            DateTime now = DateTime.Now;

            //reaching a new level
            getMAsA().addMotivationHint(MotivationHintEnum.NewLevel);

            //perfect solution - 0 error - 0 help requests - 10 seconds
            getMAsA().addMotivationHint(MotivationHintEnum.NewProblem);

            log("Sleeping for 10 seconds...");
            Thread.Sleep(10 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Success);

            //too early guess - 2 seconds
            getMAsA().addMotivationHint(MotivationHintEnum.NewProblem);

            log("Sleeping for 2 seconds...");
            Thread.Sleep(2 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Success);

            //too many errors - 11/7 seconds - 4 errors - 0 help requests
            getMAsA().addMotivationHint(MotivationHintEnum.NewProblem);

            log("Sleeping for 7 seconds...");
            Thread.Sleep(7 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Fail);

            log("Sleeping for 1 second...");
            Thread.Sleep(1 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Fail);

            log("Sleeping for 1 second...");
            Thread.Sleep(1 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Fail);

            log("Sleeping for 1 second...");
            Thread.Sleep(1 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Fail);

            log("Sleeping for 1 second...");
            Thread.Sleep(1 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Success);

            //too late solution - 15 seconds
            getMAsA().addMotivationHint(MotivationHintEnum.NewProblem);

            log("Sleeping for 20 seconds...");
            Thread.Sleep(20 * 1000);
            getMAsA().addMotivationHint(MotivationHintEnum.Success);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Method for storing a Motivation Model as XML in a file.
        /// </summary>
        /// <param name="fileId"> File-Id for storing the model. </param>
        /// <param name="mm"> The Motivation model to store. </param>
        internal void writeMMToFile(string fileId, MotivationModel mm)
        {
            IDataStorage ids = (IDataStorage)AssetManager.Instance.Bridge;

            if (ids != null)
            {
                log("Storing DomainModel to File.");
                ids.Save(fileId, mm.toXmlString());
            }
            else
            {
                log("No IDataStorage - Bridge implemented!", Severity.Error);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Method returning intervention instances to a list of instances provided.
        /// </summary>
        ///
        /// <param name="interventions"> List of intervenentions provided. </param>
        ///
        /// <returns> List of intervention instances. </returns>
        internal List <String> getInterventionInstances(List <String> interventions, String playerId)
        {
            List <String>   instances = new List <String>();
            MotivationModel mm        = loadMotivationModel();

            Random rnd = new Random();
            int    pos;

            foreach (Intervention iv in mm.motivationInterventions.motivationInterventionList)
            {
                if (interventions.Contains(iv.name))
                {
                    pos = rnd.Next(1, iv.interventionInstances.instance.Count + 1) - 1;
                    instances.Add(iv.interventionInstances.instance.ElementAt(pos));
                }
            }

            return(instances);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Method for setting the motivation model
        /// </summary>
        /// <param name="mm"> The motivation model to load</param>
        public void setMotivationModel(MotivationModel mm)
        {
            string fileId = "MotivationAssessmentAssetTestId.xml";

            IDataStorage ids = (IDataStorage)AssetManager.Instance.Bridge;

            if (ids != null)
            {
                log("Storing DomainModel to File.");
                ids.Save(fileId, mm.toXmlString());
            }
            else
            {
                log("No IDataStorage - Bridge implemented!", Severity.Warning);
            }

            //change Settings to load local file
            MotivationAssessmentAssetSettings newMAS = new MotivationAssessmentAssetSettings();

            newMAS.XMLLoadingId = fileId;
            ((MotivationAssessmentAsset)AssetManager.Instance.findAssetByClass("MotivationAssessmentAsset")).Settings = newMAS;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Method for creating an example Motivation Model.
        /// </summary>
        ///
        /// <returns>
        /// MotivationModel with example values.
        /// </returns>
        internal MotivationModel createExampleMM()
        {
            MotivationAspect ma1 = new MotivationAspect();

            ma1.name = "attention";
            ma1.up   = "attention+(1-attention)*0.5";
            ma1.down = "attention*0.5";
            ma1.rule = "";
            MotivationAspect ma2 = new MotivationAspect();

            ma2.name = "satisfaction";
            ma2.up   = "satisfaction+(1-satisfaction)*0.5";
            ma2.down = "satisfaction*0.5";
            ma2.rule = "";
            MotivationAspect ma3 = new MotivationAspect();

            ma3.name = "confidence";
            ma3.up   = "confidence+(1-confidence)*0.5";
            ma3.down = "confidence*0.5";
            ma3.rule = "";
            MotivationAspect ma4 = new MotivationAspect();

            ma4.name = "motivation";
            ma4.up   = "";
            ma4.down = "";
            ma4.rule = "(satisfaction+confidence+attention)/3";
            MotivationAspectList    mal    = new MotivationAspectList();
            List <MotivationAspect> maList = new List <MotivationAspect>();

            maList.Add(ma1);
            maList.Add(ma2);
            maList.Add(ma3);
            maList.Add(ma4);
            mal.motivationAspectList = maList;

            String        ii11   = "Hey, my friend! Are you sleeping?!";
            String        ii12   = "Sorry for interrupting you; we need to go on.";
            Intervention  i1     = new Intervention();
            List <String> i1List = new List <String>();

            i1List.Add(ii11);
            i1List.Add(ii12);
            i1.interventionInstances          = new InterventionInstance();
            i1.interventionInstances.instance = i1List;
            i1.name = "attention catcher";
            i1.rule = "attention < 0.4";

            String        ii21   = "Once this mission is over, it's time to celebrate.";
            String        ii22   = "By solving this task you will earn another 10000 points.";
            Intervention  i2     = new Intervention();
            List <String> i2List = new List <String>();

            i2List.Add(ii21);
            i2List.Add(ii22);
            i2.interventionInstances          = new InterventionInstance();
            i2.interventionInstances.instance = i2List;
            i2.name = "incitation intervention";
            i2.rule = "satisfaction < 0.4";

            String        ii31   = "Don't give up. Try again.";
            String        ii32   = "It is a challenge, I know. Let's give it another trial.";
            String        ii33   = "Go on. Practice makes perfect.";
            Intervention  i3     = new Intervention();
            List <String> i3List = new List <String>();

            i3List.Add(ii31);
            i3List.Add(ii32);
            i3List.Add(ii33);
            i3.interventionInstances          = new InterventionInstance();
            i3.interventionInstances.instance = i3List;
            i3.name = "encouraging intervention";
            i3.rule = "confidence < 0.4";


            MotivationInterventionList mil   = new MotivationInterventionList();
            List <Intervention>        iList = new List <Intervention>();

            iList.Add(i1);
            iList.Add(i2);
            iList.Add(i3);
            mil.motivationInterventionList = iList;

            MotivationModel mm = new MotivationModel();

            mm.motivationAspects       = mal;
            mm.motivationInterventions = mil;

            return(mm);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Method returning a least often used instance of an intervnention.
        /// </summary>
        ///
        /// <param name="intervention"> Intervention id for which the instance is requested. </param>
        ///
        /// <returns> Intervention instance for the player. </returns>
        public String getInstance(String intervention)
        {
            MotivationModel mm        = loadMotivationModel();
            List <String>   instances = null;

            foreach (Intervention iv in mm.motivationInterventions.motivationInterventionList)
            {
                if (intervention.Equals(iv.name))
                {
                    instances = iv.interventionInstances.instance;
                }
            }
            if (instances == null)
            {
                loggingMAd("ERROR: requested instance is not part of the motivation model!");
                return("ERROR");
            }

            //create intervention history if needed
            if (interventionsHistory == null)
            {
                interventionsHistory = new Dictionary <string, Dictionary <string, int> >();
            }
            Dictionary <string, Dictionary <string, int> > playerHistory = interventionsHistory;

            //create interventionCount if needed
            Dictionary <string, int> interventionCount;

            if (!playerHistory.ContainsKey(intervention))
            {
                interventionCount = new Dictionary <string, int>();
                foreach (String ii in instances)
                {
                    interventionCount[ii] = 0;
                }
            }
            else
            {
                interventionCount = playerHistory[intervention];
            }

            //get the least often used intervention instances
            int           minUsedInstanceNr = -1;
            List <string> minUsedInstances  = new List <string>();

            foreach (KeyValuePair <String, int> pair in interventionCount)
            {
                if (minUsedInstanceNr == -1 || minUsedInstanceNr > pair.Value)
                {
                    minUsedInstanceNr = pair.Value;
                    minUsedInstances  = new List <string>();
                    minUsedInstances.Add(pair.Key);
                }
                else if (minUsedInstanceNr == pair.Value)
                {
                    minUsedInstances.Add(pair.Key);
                }
            }

            //choose an random instance
            Random rnd          = new Random();
            int    pos          = rnd.Next(1, minUsedInstances.Count + 1) - 1;
            String usedInstance = minUsedInstances.ElementAt(pos);

            interventionCount[usedInstance]++;
            interventionsHistory[intervention] = interventionCount;
            return(usedInstance);
        }