internal McmcSim( EstimationDesign estimationDesign, Simulation simulation, ISimData simData, Arr <ChainState> chainStates ) { RequireNotNull(estimationDesign); RequireNotNull(simulation); RequireNotNull(simData); RequireTrue(chainStates.IsEmpty || chainStates.Count == estimationDesign.Chains); _estimationDesign = estimationDesign; _simulation = simulation; _simData = simData; ChainStates = chainStates; _proposalLoopWaitInterval = _simData .GetExecutionInterval(_simulation) .Match(t => t.ms * 2, 200); _updateBatchThreshold = 2 * estimationDesign.Chains; _defaultInput = simulation.SimConfig.SimInput; var parameters = _defaultInput.SimParameters; _invariants = _estimationDesign.Priors .Filter(mp => mp.Distribution.DistributionType == DistributionType.Invariant) .Map(mp => parameters.GetParameter(mp.Name).With(mp.Distribution.Mean)); _targetParameters = _estimationDesign.Priors .Filter(mp => mp.Distribution.DistributionType != DistributionType.Invariant) .Map(mp => parameters.GetParameter(mp.Name)); }
internal static string GetDescription(this EstimationDesign estimationDesign) => GetDescription( estimationDesign.Priors, estimationDesign.Outputs, estimationDesign.Iterations, estimationDesign.BurnIn, estimationDesign.Chains );
internal static void UpdateEstimationDesign(EstimationDesign instance, string pathToEstimationDesignsDirectory, ISimEvidence evidence) { RequireDirectory(pathToEstimationDesignsDirectory); var pathToEstimationDesignDirectory = GetPathToEstimationDesign(instance, pathToEstimationDesignsDirectory); RequireDirectory(pathToEstimationDesignDirectory); SaveDesign( instance.CreatedOn, instance.Priors, instance.Outputs, instance.Observations, instance.Iterations, instance.BurnIn, instance.Chains, instance.TargetAcceptRate, instance.UseApproximation, pathToEstimationDesignDirectory, evidence ); }
internal static string GetPathToEstimationDesign(EstimationDesign instance, string pathToEstimationDesignsDirectory) => GetPathToEstimationDesign(instance.CreatedOn, pathToEstimationDesignsDirectory);