public NestedMarkovDecisionProcess(ModelCapacity modelCapacity) { var modelSize = modelCapacity.DeriveModelByteSize(StateSize, TransitionSize); StateLabeling = new LabelVector(); States = (int)modelSize.NumberOfStates; _maxNumberOfContinuationGraphElements = modelSize.NumberOfTransitions * 10L; _maxNumberOfContinuationGraphElements = Math.Max(_maxNumberOfContinuationGraphElements, 1024); Requires.InRange(_maxNumberOfContinuationGraphElements, nameof(_maxNumberOfContinuationGraphElements), 1024, Int64.MaxValue - 1); _stateToRootOfContinuationGraphBuffer.Resize(States * sizeof(long), zeroMemory: false); _stateToRootOfContinuationGraphMemory = (long *)_stateToRootOfContinuationGraphBuffer.Pointer; _continuationGraphBuffer.Resize((long)_maxNumberOfContinuationGraphElements * sizeof(ContinuationGraphElement), zeroMemory: false); _continuationGraph = (ContinuationGraphElement *)_continuationGraphBuffer.Pointer; MemoryBuffer.SetAllBitsMemoryWithInitblk.ClearWithMinus1(_stateToRootOfContinuationGraphMemory, States); }
public LabeledTransitionMarkovDecisionProcess(long maxNumberOfStates, long maxNumberOfTransitions) { Requires.InRange(maxNumberOfStates, nameof(maxNumberOfStates), 1024, Int32.MaxValue - 1); _maxNumberOfTransitionTargets = maxNumberOfTransitions / (AvgGraphNodesPerSucceedingState + 1); _maxNumberOfContinuationGraphElements = _maxNumberOfTransitionTargets * AvgGraphNodesPerSucceedingState; Requires.InRange(_maxNumberOfTransitionTargets, nameof(_maxNumberOfTransitionTargets), 1024, Int32.MaxValue - 1); Requires.InRange(_maxNumberOfContinuationGraphElements, nameof(_maxNumberOfContinuationGraphElements), 1024, Int64.MaxValue - 1); _stateStorageStateToRootOfContinuationGraphBuffer.Resize((long)maxNumberOfStates * sizeof(long), zeroMemory: false); _stateStorageStateToRootOfContinuationGraphMemory = (long *)_stateStorageStateToRootOfContinuationGraphBuffer.Pointer; _continuationGraphBuffer.Resize((long)_maxNumberOfContinuationGraphElements * sizeof(ContinuationGraphElement), zeroMemory: false); _continuationGraph = (ContinuationGraphElement *)_continuationGraphBuffer.Pointer; _transitionTargetBuffer.Resize((long)_maxNumberOfTransitionTargets * sizeof(TransitionTargetElement), zeroMemory: false); _transitionTarget = (TransitionTargetElement *)_transitionTargetBuffer.Pointer; MemoryBuffer.SetAllBitsMemoryWithInitblk.ClearWithMinus1(_stateStorageStateToRootOfContinuationGraphMemory, maxNumberOfStates); }