private static void EpsilonGreedyWithContext <TContext>(int numActions, TContext testContext, TestPolicy <TContext> policy, IExplorer <int, int> explorer) where TContext : RegularTestContext { string uniqueKey = "ManagedTestId"; var uniqueId = uniqueKey; TestRecorder <TContext> recorder = new TestRecorder <TContext>(); //MwtExplorer<TContext> mwtt = new MwtExplorer<TContext>("mwt", recorder); var mwtt = MwtExplorer.Create("mwt", numActions, recorder, explorer, policy); testContext.Id = 100; int expectedAction = policy.MapContext(testContext).Value; int chosenAction = mwtt.ChooseAction(uniqueId, testContext); Assert.AreEqual(expectedAction, chosenAction); chosenAction = mwtt.ChooseAction(uniqueId, testContext); Assert.AreEqual(expectedAction, chosenAction); var interactions = recorder.GetAllInteractions(); Assert.AreEqual(2, interactions.Count); Assert.AreEqual(testContext.Id, interactions[0].Context.Id); // Verify that policy action is chosen all the time explorer.EnableExplore(false); for (int i = 0; i < 1000; i++) { chosenAction = mwtt.ChooseAction(uniqueId, testContext); Assert.AreEqual(expectedAction, chosenAction); } }
private static void BootstrapWithContext <TContext>(uint numActions, TContext testContext1, TContext testContext2, TestPolicy <TContext>[] policies, IExplorer <TContext> explorer) where TContext : TestContext { string uniqueKey = "ManagedTestId"; var recorder = new TestRecorder <TContext>(); var mwtt = new MwtExplorer <TContext>("mwt", recorder); uint expectedAction = policies[0].ChooseAction(testContext1); uint chosenAction = mwtt.ChooseAction(explorer, uniqueKey, testContext1); Assert.AreEqual(expectedAction, chosenAction); chosenAction = mwtt.ChooseAction(explorer, uniqueKey, testContext2); Assert.AreEqual(expectedAction, chosenAction); var interactions = recorder.GetAllInteractions(); Assert.AreEqual(2, interactions.Count); Assert.AreEqual(testContext1.Id, interactions[0].Context.Id); Assert.AreEqual(testContext2.Id, interactions[1].Context.Id); // Verify that policy action is chosen all the time explorer.EnableExplore(false); for (int i = 0; i < 1000; i++) { chosenAction = mwtt.ChooseAction(explorer, uniqueKey, testContext1); Assert.AreEqual(expectedAction, chosenAction); } }