コード例 #1
0
        /// <summary>
        /// Runs a single iteration of the message queue runner.
        /// This waits until it receives a new message (containing a new parameter set to run),
        /// deserializes this message, re-parameterises the model definition and runs a single
        /// model run. The process completes by saving the result before sending a complete message
        /// back on the queue.
        /// </summary>
        /// <returns>
        /// Returns whether an iteration was successful
        /// </returns>
        public bool RunIteration(out ParameterSet resultParameters)
        {
            resultParameters = null;
//#if DEBUG
//            Debugger.Launch();
//#endif
            try
            {
                Message      receivedMessage = queues.PestToTridentQueue.Receive(new TimeSpan(0, 0, TIMEOUT));
                ParameterSet pSet            = this.processMessage(receivedMessage);

                pSet.applyParametersTo(modelRunner.Model);

                TimeSeries output = new TimeSeries();

                modelRunner.record(this.outputTimeSeriesName, output);
                modelRunner.execute();
                NonInteractiveIO.Save(this.outputTimeSeriesFile, output);
                // save output time series to specified location

                // send resulting set so we can calculate score on parameters
                resultParameters = pSet;
                this.result      = pSet;
                //this.queue.Send("Iteration Complete");
                this.queues.TridentToPestQueue.Send(null);
            }
            catch (MessageQueueException e)
            {
                if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
                {
                    queues.Close();
                    // return the last given result
                    resultParameters = this.result;
                    return(false);
                }
                else
                {
                    throw e;
                }
            }
            // iteration ran successfully

            return(true);
        }