using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Simulator { public class Simulator { string[] occassionContextValues = new string[] { "birthday", "meal", "catchup" }; string[] varietyContextValues = new string[] { "cake", "dessert", "cupcake", "shake" }; private Random rand = new Random(DateTime.Now.Millisecond); private int rewardCounter = 0; public void SimulateEvents(int count) { float sumRewards = 0; for (int i = 0; i < count; i++) { Console.Write(i.ToString() + ":"); sumRewards = sumRewards + SimulateEvent(); Console.Write("[{0}]", sumRewards / (i + 2)); } } public float SimulateEvent() { UserSimulator userSimulator = new UserSimulator(rand); var currentContext = GetSimulatedContext(); float reward = 0f; try { string simulationResponse = userSimulator.ReturnSimulatedAction(currentContext); Personalizer.PersonalizerLibrary personalizerLibrary = new Personalizer.PersonalizerLibrary(); var personalizerResponse = personalizerLibrary.GetRankResults(currentContext); if (personalizerResponse.RewardActionId == simulationResponse) { reward = 1f; rewardCounter++; } Console.WriteLine($"For Context {userSimulator.GetKey((Dictionary<string,string>)currentContext[0])}: Personalizer suggested {personalizerResponse.RewardActionId}, simulation chose {simulationResponse} - reward: {reward} - count {rewardCounter}"); personalizerLibrary.SubmitReward(personalizerResponse.EventId, reward); } catch (Exception ex) { Console.WriteLine(ex.Message); } return reward; } public IList<object> GetSimulatedContext() { IList<object> currentContext = new List<object>() { new Dictionary<string, string>() { { "occassion", occassionContextValues[rand.Next(3)] }, { "variety", varietyContextValues[rand.Next(4)] }, } }; return currentContext; } } public class FoodContext { public string occassion; public string variety; } }