public void デシリアライズ後Restoreされたものは経験を引き継ぐ() { // Init parent var parentDecisionMaker = new ReinforcementDecisionMaker(); var actions = new List <IAction>(); for (int i = 0; i < 100; i++) { actions.Add(LocomotionAction.GoStraight(i.ToString())); } parentDecisionMaker.Init(actions); parentDecisionMaker.DecideAction(_dummyStates[0], forceRandom: false, forceMax: true); parentDecisionMaker.Feedback(new List <float>() { 3f }); parentDecisionMaker.DecideAction(_dummyStates[0], forceRandom: false, forceMax: true); var saveDataClone = EditorTestExtensions.DeepCloneByMsgPack(parentDecisionMaker.Save()); var decisionMakerClone = saveDataClone.Instantiate() as ReinforcementDecisionMaker; var originalTrainer = TestHelper.GetFieldValue(parentDecisionMaker, "_trainer") as TemporalDifferenceQTrainer; var cloneTrainer = TestHelper.GetFieldValue(decisionMakerClone, "_trainer") as TemporalDifferenceQTrainer; // Assertion Assert.AreEqual(originalTrainer.GetHistorySaveData().Count, 1); Assert.AreEqual(cloneTrainer.GetHistorySaveData().Count, 1); Assert.AreEqual(originalTrainer.GetHistorySaveData()[0].Instantiate().State, cloneTrainer.GetHistorySaveData()[0].Instantiate().State); }
public void デシリアライズ後RestoreされたものはSubDMも含めて同じDecisionをする() { // Init parent var parentDecisionMaker = new ReinforcementDecisionMaker(); var actions = new List <IAction>(); actions.Add(new SubDecisionMakerAction(new FollowPointDecisionMaker(State.BasicKeys.RelativeFoodPosition))); actions.AddRange(LocomotionAction.EightDirections()); parentDecisionMaker.Init(actions); parentDecisionMaker.DecideAction(_dummyStates[0], forceRandom: false, forceMax: true); var saveDataClone = EditorTestExtensions.DeepCloneByMsgPack(parentDecisionMaker.Save()); var decisionMakerClone = saveDataClone.Instantiate() as ReinforcementDecisionMaker; decisionMakerClone.Restore(actions); // Random foreach (var state in _dummyStates) { Assert.AreEqual( parentDecisionMaker.DecideAction(state, forceRandom: false, forceMax: true) .Name, decisionMakerClone.DecideAction(state, forceRandom: false, forceMax: true).Name ); } // Force SubDM foreach (var state in _dummyStates) { Assert.AreEqual( parentDecisionMaker.DecideAction(state, forceRandom: false, forceMax: true, forceAction: 0) .Name, // choose from 100 choice decisionMakerClone.DecideAction(state, forceRandom: false, forceMax: true, forceAction: 0).Name ); } }
public void デシリアライズ後Restoreされたものは同じDecisionをする() { // Init parent var parentDecisionMaker = new ReinforcementDecisionMaker(); var actions = new List <IAction>(); for (int i = 0; i < 100; i++) { actions.Add(LocomotionAction.GoStraight(i.ToString())); } parentDecisionMaker.Init(actions); parentDecisionMaker.DecideAction(_dummyStates[0], forceRandom: false, forceMax: true); var saveDataClone = EditorTestExtensions.DeepCloneByMsgPack(parentDecisionMaker.Save()); var decisionMakerClone = saveDataClone.Instantiate() as ReinforcementDecisionMaker; // Assertion foreach (var state in _dummyStates) { Assert.AreEqual( parentDecisionMaker.DecideAction(state, forceRandom: false, forceMax: true) .Name, // choose from 100 choice decisionMakerClone.DecideAction(state, forceRandom: false, forceMax: true).Name ); } }
public void SerializationTest() { var sm = new EvolutionarySequenceMaker(0.3f, 3); sm.Init( dummyActions, new Dictionary <Guid, int> { { Guid.NewGuid(), (new ManipulatableMock()).GetManipulatableDimention() } } ); var src = sm.Save(); var srcBinary = EditorTestExtensions.SerializeByMsgPack(src); var dst = EditorTestExtensions.DeepCloneByMsgPack(src); var dstBinary = EditorTestExtensions.SerializeByMsgPack(dst); Assert.IsTrue(srcBinary.SequenceEqual(dstBinary)); }
public void デシリアライズ後Restoreされたものは同じDecisionをする() { var decisionMaker = createDummy(); var saveData = decisionMaker.Save(); var clonedSaveData = EditorTestExtensions.DeepCloneByMsgPack(saveData); var decisionMakerClone = clonedSaveData.Instantiate(); decisionMakerClone.Restore(_actions); var tmpState = new State(); tmpState[State.BasicKeys.RelativeFoodPosition] = new DenseVector(new double[] { 1, 0, 2 }); var action1 = decisionMaker.DecideAction(tmpState); var action2 = decisionMakerClone.DecideAction(tmpState); Assert.AreEqual( action1.Name, action2.Name ); }
public void デシリアライズ後Restoreされたものは同じDecisionをする() { var decisionMaker = createDummy(); var saveData = decisionMaker.Save(); var clonedSaveData = EditorTestExtensions.DeepCloneByMsgPack(saveData); var decisionMakerClone = clonedSaveData.Instantiate(); decisionMakerClone.Restore(_actions); var tmpState = TempState(); tmpState[State.BasicKeys.TotalFoodEnergyEachDirection][6] = 1f; var action1 = decisionMaker.DecideAction(tmpState); var action2 = decisionMakerClone.DecideAction(tmpState); Assert.AreEqual( action1.Name, action2.Name ); }