Exemplo n.º 1
0
        private Planning.HighLevelProgramExecution.Program Trans(Planning.HighLevelProgramExecution.Program program)
        {
            Planning.HighLevelProgramExecution.Program remainingProgram;

            if (program is Planning.HighLevelProgramExecution.Action)
            {
                remainingProgram = Planning.HighLevelProgramExecution.Program.EmptyProgram;

                Planning.HighLevelProgramExecution.Action programAction =
                    (Planning.HighLevelProgramExecution.Action)program;
                Action action = _actionDict[programAction.FullName];
                SendMessage(action.FullName);
                string responseName = ReceiveMessage();
                Console.WriteLine("Receive response: {0}", responseName);
                Response response = action.ResponseDict[responseName];
                _mentalAttitude.Update(response);
            }
            else if (program is SequenceStructure)
            {
                SequenceStructure seq = ((SequenceStructure)program);
                int i;
                for (i = 0; i < seq.SubProgramLength - 1; i++)
                {
                    if (!Final(seq.SubPrograms[i]))
                    {
                        break;
                    }
                }

                Planning.HighLevelProgramExecution.Program[] newRemainingProgramArray =
                    new Planning.HighLevelProgramExecution.Program[seq.SubProgramLength - i];
                newRemainingProgramArray[0] = Trans(seq.SubPrograms[i]);
                Parallel.For(1, newRemainingProgramArray.Length,
                             j => newRemainingProgramArray[j] = seq.SubPrograms[j + i]);

                remainingProgram = new SequenceStructure(newRemainingProgramArray);
            }
            else if (program is ConditionalStructure)
            {
                ConditionalStructure cond = (ConditionalStructure)program;
                remainingProgram = _mentalAttitude.Implies(cond.Condition)
                    ? Trans(cond.SubProgram1)
                    : Trans(cond.SubProgram2);
            }
            else if (program is LoopStructure)
            {
                LoopStructure loop = (LoopStructure)program;
                remainingProgram = _mentalAttitude.Implies(loop.Condition)
                    ? new SequenceStructure(new[] { Trans(loop.SubProgram), program })
                    : null;
            }
            else
            {
                throw new PlanningException("Trans an empty program!");
            }

            return(remainingProgram);
        }
Exemplo n.º 2
0
        private bool Final(Planning.HighLevelProgramExecution.Program program)
        {
            bool result;

            if (program is EmptyProgram)
            {
                result = true;
            }

            else if (program is SequenceStructure)
            {
                SequenceStructure seq = ((SequenceStructure)program);
                result = true;
                foreach (var subProgram in seq.SubPrograms)
                {
                    if (!Final(subProgram))
                    {
                        result = false;
                        break;
                    }
                }
            }

            else if (program is ConditionalStructure)
            {
                ConditionalStructure cond = ((ConditionalStructure)program);
                return(_mentalAttitude.Implies(cond.Condition) ? Final(cond.SubProgram1) : Final(cond.SubProgram2));
            }

            else if (program is LoopStructure)
            {
                LoopStructure loop = ((LoopStructure)program);
                result = true;
                if (_mentalAttitude.Implies(loop.Condition))
                {
                    result = Final(loop.SubProgram);
                }
            }
            else
            {
                result = false;
            }

            return(result);
        }
Exemplo n.º 3
0
 private void Interpret(Planning.HighLevelProgramExecution.Program program)
 {
     if (!Final(program))
     {
         do
         {
             //Console.WriteLine(program.GetType());
             string message = ReceiveMessage();
             Console.WriteLine("Receive message: {0}", message);
             if (message == "observation")
             {
                 string observationName = ReceiveMessage();
                 Console.WriteLine("Receive observation: {0}", observationName);
                 Observation observation = _observationDict[observationName];
                 _mentalAttitude.Update(observation);
                 int memory = CUDD.ReadMemoryInUse();
                 Console.WriteLine("Used memory: {0}MB", memory >> 20);
             }
             else
             {
                 //Console.WriteLine(program);
                 program = Trans(program);
                 int memory = CUDD.ReadMemoryInUse();
                 Console.WriteLine("Used memory: {0}MB", memory >> 20);
                 if (!Final(program))
                 {
                     SendMessage("remain");
                 }
                 else
                 {
                     SendMessage("quit");
                     break;
                 }
             }
         } while (true);
     }
 }