public override void PrepareTapeFwd(int[] input, TMInstance instance) { int frameLength = FrameLength(input.Length); long frameStart1 = 1 + frameLength; long frameStart2 = 1 + (2 * frameLength); long frameStart3 = 1 + (3 * frameLength); long frameEnd4 = 1 + (4 * frameLength); instance.SetTapeSymbol(frameStart1, delimiter1); instance.SetTapeSymbol(frameStart2, delimiter2); instance.SetTapeSymbol(frameStart3, delimiter3); instance.SetTapeSymbol(frameEnd4, delimiter4); IDebugOptions debugOptions = configuration.Get<IDebugOptions>(); }
public override void Run(uint[] states) { log.InfoFormat("mu: {0}", meapContext.mu); CreateTASGBuilder(); tasgBuilder.CreateTArbitrarySeqGraph(); tasgBuilder.CreateTArbSeqCFG(states); meapContext.TArbSeqCFG.Trace(); if (meapContext.TArbSeqCFG.IsTrivial()) { return; } ComputeNodeVLevels(meapContext.TArbSeqCFG); ICommonOptions commonOptions = configuration.Get <ICommonOptions>(); ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>(); if (commonOptions.CheckDataStructures) { checkDataStructures.CheckTASGHasNoBackAndCrossEdges(meapContext.TArbSeqCFG); } log.DebugFormat("states = {0}", AppHelper.ArrayToString(states)); IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); if (!debugOptions.RunRDA) { return; } ComputeCommodities(); DetermineIfExistsTCPath determineIfExistsTCSeq = new(meapContext); determineIfExistsTCSeq.RunForMultipleTapeSegs(); CopyResultFromTapeSegContext(); }
public override void Run(uint[] states) { log.InfoFormat("mu: {0}", meapContext.mu); log.DebugFormat("states = {0}", AppHelper.ArrayToString(states)); tasgBuilder.CreateTArbitrarySeqGraph(); IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); if (!debugOptions.RunRDA) { return; } uint maxMu = meapContext.MEAPSharedContext.CPLTMInfo.PathLength; if (meapContext.mu < maxMu) { return; } tasgBuilder.CreateTArbSeqCFG(states); if (meapContext.TArbSeqCFG.IsTrivial()) { return; } ICommonOptions commonOptions = configuration.Get <ICommonOptions>(); ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>(); ComputeDUPairs(); meapContext.CommoditiesBuilder = new CommoditiesBuilderFactCPLTM(meapContext); meapContext.CommoditiesBuilder.EnumeratePairs(); meapContext.Commodities = meapContext.CommoditiesBuilder.CreateCommodities(); meapContext.CommoditiesBuilder = default !;
public (bool, int[]) Determine(int[] input) { MEAPSharedContext MEAPSharedContext = new(); MEAPSharedContext.MNP = tMachine; MEAPSharedContext.Input = input; MEAPSharedContext.InitInstance = new TMInstance( MEAPSharedContext.MNP, MEAPSharedContext.Input); MEAPSharedContext.MNP.PrepareTapeFwd( MEAPSharedContext.Input, MEAPSharedContext.InitInstance); MEAPSharedContext.CancellationTokenSource = new CancellationTokenSource(); MEAPSharedContext.CancellationToken = MEAPSharedContext.CancellationTokenSource.Token; ITPLOptions tplOptions = configuration.Get <ITPLOptions>(); uint determinePathRunnersCount = tplOptions.DeterminePathRunnersCount; IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); ulong currentMu = debugOptions.muStart; while (true) { List <DeterminePathRunner> determinePathRunners = new(); ulong baseMu = currentMu; for (long i = 0; i < determinePathRunnersCount; i++) { DeterminePathRunnerCtorArgs determinePathRunnerCtorArgs = new() { tMachine = tMachine, input = input, currentMu = currentMu++, MEAPSharedContext = MEAPSharedContext }; DeterminePathRunner determinePathRunner = configuration.Get <DeterminePathRunner>( new Ninject.Parameters.ConstructorArgument( nameof(determinePathRunnerCtorArgs), determinePathRunnerCtorArgs)); determinePathRunners.Add(determinePathRunner); } TPLCollectionRunner <DeterminePathRunner> determinePathRunnerSet = new ( determinePathRunners, determinePathRunnersCount, WaitMethod.WaitAll, itemsArray => Array.Find(itemsArray, s => s.Done) ! ); determinePathRunnerSet.Run(); if (determinePathRunnerSet.Done) { bool result = determinePathRunnerSet.CurrentItem.Result; int[] output = determinePathRunnerSet.CurrentItem.Output; return(result, output); } } }
public (bool, int[]) Determine(int[] input) { int inputLength = input.Length; ICPLTMInfo cpltmInfo = configuration.Get <ICPLTMInfo>( new Ninject.Parameters.ConstructorArgument( nameof(inputLength), input.Length)); IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); cpltmInfo.ComputeSequences(); uint maxMu = cpltmInfo.PathLength; ulong currentMu = debugOptions.muStart; log.InfoFormat($"path length: {cpltmInfo.PathLength}"); MEAPSharedContext MEAPSharedContext = new() { MNP = tMachine, Input = input, CPLTMInfo = cpltmInfo }; MEAPSharedContext.InitInstance = new TMInstance( MEAPSharedContext.MNP, MEAPSharedContext.Input); MEAPSharedContext.MNP.PrepareTapeFwd( MEAPSharedContext.Input, MEAPSharedContext.InitInstance); MEAPSharedContext.CancellationTokenSource = new CancellationTokenSource(); MEAPSharedContext.CancellationToken = MEAPSharedContext.CancellationTokenSource.Token; MEAPSharedContext.NodeLevelInfo = new NodeLevelInfo(); ITASGBuilder tasgBuilder = configuration.Get <ITASGBuilder>(); MEAPSharedContext.TASGBuilder = tasgBuilder; tasgBuilder.MEAPSharedContext = MEAPSharedContext; tasgBuilder.Init(); ITPLOptions tplOptions = configuration.Get <ITPLOptions>(); uint determinePathRunnersCount = tplOptions.DeterminePathRunnersCount; bool result; int[] output; while (currentMu <= maxMu) { List <DeterminePathRunner> determinePathRunners = new(); for (long i = 0; i < determinePathRunnersCount; i++) { DeterminePathRunnerCtorArgs determinePathRunnerCtorArgs = new() { tMachine = tMachine, input = input, currentMu = currentMu, MEAPSharedContext = MEAPSharedContext }; currentMu++; DeterminePathRunner determinePathRunner = configuration.Get <DeterminePathRunner>( new Ninject.Parameters.ConstructorArgument( nameof(determinePathRunnerCtorArgs), determinePathRunnerCtorArgs)); determinePathRunners.Add(determinePathRunner); } TPLCollectionRunner <DeterminePathRunner> determinePathRunnerSet = new ( determinePathRunners, determinePathRunnersCount, WaitMethod.WaitAll, itemsArray => Array.Find(itemsArray, s => s.Done) ! ); determinePathRunnerSet.Run(); if (determinePathRunnerSet.Done) { result = determinePathRunnerSet.CurrentItem.Result; output = determinePathRunnerSet.CurrentItem.Output; break; } } result = true; output = Array.Empty <int>(); return(result, output); }
public override void Setup() { Q = new uint[] { qStart, (uint)InitStates.MoveRightToDelim1, (uint)GenNumber1States.GenBitA, (uint)GenNumber1States.GenBitB, (uint)GenNumber1States.MoveRightToDelim2, (uint)GenNumber1States.StopGenNumber, (uint)GenNumber2States.GenBitA, (uint)GenNumber2States.GenBitB, (uint)GenNumber2States.MoveRightToDelim3, (uint)GenNumber2States.StopGenNumber, (uint)MultiplyStates.MultReady, (uint)MultiplyStates.StartLoopInC, (uint)MultiplyStates.Process1f_D, (uint)MultiplyStates.MoveToCRight, (uint)MultiplyStates.EraseMarkInC, (uint)MultiplyStates.StartAddC, (uint)MultiplyStates.AddC0f_D, (uint)MultiplyStates.AddC0f_sm_D, (uint)MultiplyStates.MoveToCLeft, (uint)MultiplyStates.SetMarkInC, (uint)MultiplyStates.MoveToMarkInB, (uint)MultiplyStates.MoveToMarkInB_inB, (uint)MultiplyStates.AddC1f_D, (uint)MultiplyStates.AddC1f_sm_D, (uint)MultiplyStates.MoveToMarkInD_L, (uint)MultiplyStates.MoveToMarkInD_R, (uint)MultiplyStates.MoveMarkInD, (uint)MultiplyStates.StopMultiplying, (uint)AddStates.StartAdding, (uint)AddStates.AddBitC0, (uint)AddStates.AddBitC1, (uint)CompareStates.CompareReady, (uint)CompareStates.StartComparing, (uint)CompareStates.MoveLeftToA, (uint)CompareStates.MoveToStartA, (uint)CompareStates.BitLoopStart, (uint)CompareStates.BitLoopStart_f, (uint)CompareStates.BitLoopD0, (uint)CompareStates.BitLoopD1, acceptingState, rejectingState }; Gamma = new int[] { blankSymbol, 0, 1, delimiter0, delimiter1, delimiter2, delimiter3, delimiter4, markB0, markB1, markC0, markC1, markD0, markD1 }; Sigma = new int[] { blankSymbol, 0, 1, delimiter0, delimiter1, delimiter2, delimiter3, delimiter4 }; Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> > delta; IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); int frameLength = FrameLength(inputLength); delta = new Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> >(); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Init.Delta()); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta1()); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta2(frameLength)); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta1(frameLength)); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta2(frameLength)); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta3(frameLength)); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Add.Delta()); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta(frameLength)); Delta = delta; qStart = qStartState; F = new uint[] { acceptingState }; CheckDeltaRelation(); }
public override void Run(uint[] states) { log.InfoFormat("mu: {0}", meapContext.mu); ITASGBuilder tasgBuilder = configuration.Get <ITASGBuilder>(); meapContext.TASGBuilder = tasgBuilder; tasgBuilder.meapContext = meapContext; tasgBuilder.Init(); tasgBuilder.CreateTArbitrarySeqGraph(); tasgBuilder.CreateTArbSeqCFG(states); meapContext.TArbSeqCFG.Trace(); if (meapContext.TArbSeqCFG.IsTrivial()) { return; } ComputeNodeVLevels(meapContext.TArbSeqCFG); ICommonOptions commonOptions = configuration.Get <ICommonOptions>(); ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>(); if (commonOptions.CheckDataStructures) { checkDataStructures.CheckTASGHasNoBackAndCrossEdges(meapContext.TArbSeqCFG); } meapContext.DUPairCount = 0; meapContext.TConsistPairCount = 0; TConsistPairSetBuilderOrd tConsistPairSetBuilder = new(meapContext); tConsistPairSetBuilder.Run(); log.InfoFormat("defUsePairSet: {0}", meapContext.DUPairCount); log.InfoFormat("TConsistPairSet: {0}", meapContext.TConsistPairCount); meapContext.CommoditiesBuilder = new CommoditiesBuilderOrd(meapContext); meapContext.CommoditiesBuilder.EnumeratePairs(); IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); if (debugOptions.ComputeCommoditiesExplicitely) { meapContext.Commodities = meapContext.CommoditiesBuilder.CreateCommodities(); meapContext.CommoditiesBuilder.CreateCommodityGraphs(); } else { meapContext.Commodities = new SortedDictionary <long, Commodity>(); } log.DebugFormat("states = {0}", AppHelper.ArrayToString(states)); DetermineIfExistsTCPath determineIfExistsTCSeq = new(meapContext); determineIfExistsTCSeq.RunForMultipleTapeSegs(); CopyResultFromTapeSegContext(); }
public override void Setup() { Q = new uint[] { qStart, (uint)InitStates.MoveToRightDelim, (uint)GenNumber1States.GenBitA, (uint)GenNumber1States.GenBitB, (uint)GenNumber1States.MoveToDelimiter2, (uint)GenNumber2States.GenBitA, (uint)GenNumber2States.GenBitB, (uint)GenNumber2States.MoveToDelimiter3, (uint)GenNumber2States.MoveToDelimiter4, (uint)GenNumber2States.MoveToDelimiter0, (uint)GenNumber2States.MoveToDelimiter1, (uint)MultiplyStates.MultReady, (uint)MultiplyStates.MoveToDelimeter2_0I, (uint)MultiplyStates.MoveTo01InC_0I, (uint)MultiplyStates.MoveToDelimeter3_0II, (uint)MultiplyStates.MoveTo01InD_0II, (uint)MultiplyStates.MoveToDelimeter4_0II, (uint)MultiplyStates.MoveToDelimeter0_0II, (uint)MultiplyStates.MoveToDelimeter2_0II, (uint)MultiplyStates.MoveToDelimeter2_1I, (uint)MultiplyStates.MoveTo01InC_1I, (uint)MultiplyStates.MoveToDelimeter3_Bit0_1II, (uint)MultiplyStates.MoveTo01InD_Bit0_1II, (uint)MultiplyStates.MoveToDelimeter4_Bit0_1II, (uint)MultiplyStates.MoveToDelimeter0_Bit0_1II, (uint)MultiplyStates.MoveToDelimeter2_Bit0_1II, (uint)MultiplyStates.MoveToDelimeter3_Bit1_1II, (uint)MultiplyStates.MoveTo01InD_Bit1_1II, (uint)MultiplyStates.MoveToDelimeter0_Bit1_1II, (uint)MultiplyStates.MoveToDelimeter2_Bit1_1II, (uint)MultiplyStates.MoveToD01InD_III, (uint)MultiplyStates.MoveToDelimeter4_III, (uint)MultiplyStates.MoveToDelimeter0_III, (uint)MultiplyStates.MoveToDelimeter1_III, (uint)MultiplyStates.MoveTo01InB_III, (uint)MultiplyStates.MoveToDelimeter4_IV, (uint)MultiplyStates.MoveToDelimeter0_IV, (uint)MultiplyStates.MoveToDelimeter1_IV, (uint)MultiplyStates.MoveToBlankInB_IV, (uint)AddStates.AddBit0, (uint)AddStates.AddBit1, (uint)CompareStates.StartComparing, (uint)CompareStates.MoveToStartA, (uint)CompareStates.BitLoopStart, (uint)CompareStates.MoveToDelimiter3_bit0, (uint)CompareStates.MoveToDelimiter3_bit1, (uint)CompareStates.SkipF_bit0, (uint)CompareStates.SkipF_bit1, (uint)CompareStates.MoveToDelimiter4, (uint)CompareStates.MoveToDelimiter0, (uint)CompareStates.SkipE, (uint)CompareStates.MoveToDelimiter4_accept, acceptingState, rejectingState }; Gamma = new int[] { blankSymbol, 0, 1, delimiter0, delimiter1, delimiter2, delimiter3, delimiter4, markB0, markB1, markC0, markC1, markD0, markD1, markD2, markD3, markE0, markE1, markF0, markF1 }; Sigma = new int[] { blankSymbol, 0, 1, delimiter0, delimiter1, delimiter2, delimiter3, delimiter4 }; Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> > delta; IDebugOptions debugOptions = configuration.Get <IDebugOptions>(); int frameLength = FrameLength(inputLength); delta = new Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> >(); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Init.Delta); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta1); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta2); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta01); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta02); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta03); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta04); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta05); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta06); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta07); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta08); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta09); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta10); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta11); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta12); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta13); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta14); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta15); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta16); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Add.Delta); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta1); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta2); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta3); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta4); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta5); AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta6); Delta = delta; qStart = qStartState; F = new uint[] { acceptingState }; CheckDeltaRelation(); SetupTapeSymbol(); }