コード例 #1
0
        /// <summary>
        /// Return AutomataBDD of Interleave process
        /// </summary>
        /// <param name="processes">List of AutomataBDD of interleaving processes</param>
        /// <param name="model"></param>
        /// <returns></returns>
        public static AutomataBDD Interleave(List <AutomataBDD> processes, Model model)
        {
            AutomataBDD result = AutomataBDD.Interleave(processes, model);

            ParallelEncodeTick(processes, model, result);

            //
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Return AutomataBDD of Interleave process
        /// </summary>
        /// <param name="processes">List of AutomataBDD of interleaving processes</param>
        /// <param name="model"></param>
        /// <returns></returns>
        public static AutomataBDD Interleave(List <AutomataBDD> processes, Model model)
        {
            AutomataBDD result = AutomataBDD.Interleave(processes, model);

            ParallelEncodeTick(processes, model, result);

            //Combine simulation relation
            result.SimulationRel = CUDD.Constant(1);
            foreach (var automataBdd in processes)
            {
                result.SimulationRel = CUDD.Function.And(result.SimulationRel, automataBdd.SimulationRel);
            }

            result.SimulationRel = model.AddVarUnchangedConstraint(result.SimulationRel, model.GlobalVarIndex);

            //
            return(result);
        }
コード例 #3
0
ファイル: IndexInterleave.cs プロジェクト: cnacha/PAT.ADL
        public override AutomataBDD EncodeComposition(BDDEncoder encoder)
        {
            List <Process> newnewListProcess = Processes;

            if (Processes == null)
            {
                newnewListProcess = IndexedProcessDefinition.GetIndexedProcesses(new Dictionary <string, Expression>());
            }

            List <AutomataBDD> processAutomataBDDs = new List <AutomataBDD>();

            foreach (Process process in newnewListProcess)
            {
                processAutomataBDDs.Add(process.Encode(encoder));
            }

            //
            return(AutomataBDD.Interleave(processAutomataBDDs, encoder.model));
        }