public ActionResult SubmitTutorialAnswers(NegotiationTutorialModel model) { if (model == null || model.TutorialId == null) { return(RedirectToAction("Negotiation")); } if (!model.Questions.Select(x => x.Answer).SequenceEqual(NegotiationManager.TutorialModels[model.TutorialId].Questions.Select(x => x.ActualAnswer))) { ModelState.AddModelError("Wrong answer", "One or more answers was wrong."); return(View("NegotiationTutorial", NegotiationManager.TutorialModels[model.TutorialId])); } NegotiationTutorialModel temp; NegotiationManager.TutorialModels.TryRemove(model.TutorialId, out temp); NegotiationEngine engine = NegotiationManager.OnGoingNegotiations[model.TutorialId]; NegotiationViewModel newModel = new NegotiationViewModel { Id = model.TutorialId, AiSide = engine.AiConfig.Side, HumanConfig = engine.HumanConfig, RemainingTime = TimeSpan.FromSeconds(engine.Domain.NumberOfRounds * engine.Domain.RoundLength.TotalSeconds), Domain = engine.Domain, Actions = new List <NegotiationActionModel>() }; engine.BeginNegotiation(); return(RedirectToAction("Negotiation", new { negotiationId = model.TutorialId })); }
private NegotiationTutorialModel CreateTutorialModel(string id) { NegotiationEngine engine = NegotiationManager.OnGoingNegotiations[id]; SideConfig config = engine.HumanConfig; NegotiationSideDescription desc = engine.Domain.OwnerVariantDict[config.Side][config.Variant]; int optoutend = engine.Domain.CalculateOptoutScore(config, NegotiationManager.TotalRounds); return(new NegotiationTutorialModel { TutorialId = id, Questions = new List <QuestionModel> { new QuestionModel { Question = "Whose side are you playing in the negotiation?", Options = engine.Domain.OwnerVariantDict.Keys.ToList(), ActualAnswer = config.Side }, new QuestionModel { Question = "If the same agreement was reached in round 3 or in round 6, which of the following is correct?", Options = new List <string> { "They have the same score.", "Round 3 will have a higher score.", "Round 6 will have a higher score" }, ActualAnswer = "Round 3 will have a higher score." }, new QuestionModel { Question = "What is your score if no agreement had been reached by the end of the last round?", Options = new List <string> { "0", "No score - you have lost the negotiation", optoutend.ToString() }, ActualAnswer = optoutend.ToString() }, new QuestionModel { Question = "What is the meaning of \"opting out\"?", Options = new List <string> { "It means that the other side won the negotiation.", "It means you get a predetermined amount of points minus the time decrease." }, ActualAnswer = "It means you get a predetermined amount of points minus the time decrease." } } }); }
private string CreateNewNegotiation(PreNegotiationQuestionnaireViewModel model) { string id = this.Request.UserHostAddress + ";" + DateTime.Now.ToUniversalTime().ToString(CultureInfo.InvariantCulture); NegotiationEngine engine = new NegotiationEngine( id, NegotiationManager.Domain, model, NegotiationManager.GetHumanConfig(), NegotiationManager.GetAiConfig()); NegotiationManager.SaveNewNegotiation(engine, model); NegotiationManager.OnGoingNegotiations.TryAdd(id, engine); return(id); }
private static void SaveAction(NegotiationEngine engine, SideConfig side, NegotiationActionType type, String value = "") { NegotiationContainer cont = new NegotiationContainer(); var game = cont.GameSet.Find(engine.NegotiationId); var user = game.Users.First(x => x.Type == side.Type); cont.NegotiationActionSet.Add(new NegotiationAction() { GameId = engine.NegotiationId, Type = type, User = user, RemainingTime = engine.Status.RemainingTime, UserId = user.Id, Value = value }); cont.SaveChanges(); }
internal static void SaveUserOptionChange(NegotiationEngine engine, string topic, string option) { SaveAction(engine, engine.HumanConfig, NegotiationActionType.MakeChange, String.Format("{{\"{0}\":\"{1}\"}}",topic,option)); }
internal static void SaveTimeout(NegotiationEngine engine) { SaveAction(engine, engine.HumanConfig, NegotiationActionType.Timeout); }
internal static void SaveOptOut(NegotiationEngine engine, SideConfig side) { SaveAction(engine, side, NegotiationActionType.Optout); }
internal static void SaveOfferRejected(NegotiationEngine engine, SideConfig side) { SaveAction(engine, side, NegotiationActionType.RejectOffer); }
internal static void SaveNewOffer(NegotiationEngine engine, SideConfig side, string negotiationOffer) { SaveAction(engine, side, NegotiationActionType.MakeOffer, negotiationOffer); }
internal static void SaveNewNegotiation(NegotiationEngine engine, PreNegotiationQuestionnaireViewModel model) { NegotiationContainer cont = new NegotiationContainer(); #region Human User UserRole humanRole = new UserRole() { Description = engine.HumanConfig.Side, Variant = engine.HumanConfig.Variant }; UserData humanData = new UserData() { AgeRange = model.AgeRange, Country = model.BirthCountry, DegreeField = model.DegreeField, Education = model.Education, Gender = model.Gender, StudentId = model.ID, Name = model.Name, University = model.University }; User humanUser = new User() { Id = engine.NegotiationId, Type = UserType.Human, UserData = humanData, UserRole = humanRole, GameId = engine.NegotiationId }; #endregion #region Ai User UserRole aiRole = new UserRole() { Description = engine.AiConfig.Side, Variant = engine.AiConfig.Variant }; User aiUser = new User() { Id = engine.StrategyName + "|" + DateTime.Now, Type = UserType.Agent, StrategyId = engine.AiConfig.StrategyId, UserRole = aiRole, GameId = engine.NegotiationId, }; #endregion cont.GameSet.Add(new Game() { Id = engine.NegotiationId, GameDomainId = GameDomain.Id, StartTime = DateTime.Now }); cont.UserDataSet.Add(humanData); cont.UserRoleSet.Add(humanRole); cont.UserRoleSet.Add(aiRole); cont.UserSet.Add(humanUser); cont.UserSet.Add(aiUser); try { cont.SaveChanges(); } catch (Exception) { throw; } }
internal static void SaveAgreementSigned(NegotiationEngine engine, SideConfig side) { SaveAction(engine, side, NegotiationActionType.Sign); }
private string CreateNewNegotiation(PreNegotiationQuestionnaireViewModel model) { string id = this.Request.UserHostAddress + ";" + DateTime.Now.ToUniversalTime().ToString(CultureInfo.InvariantCulture); NegotiationEngine engine = new NegotiationEngine( id, NegotiationManager.Domain, model, NegotiationManager.GetHumanConfig(), NegotiationManager.GetAiConfig()); NegotiationManager.SaveNewNegotiation(engine, model); NegotiationManager.OnGoingNegotiations.TryAdd(id, engine); return id; }