Beispiel #1
0
        private void DoMainProcessingLoop()
        {
            int startTime           = GetTime();
            int iterations          = 0;
            int lastSynchronisation = GetTime();

            C.log.Info("Entering UpdateAnts - UpdatePheromones loop");
            while (GetTime() - startTime < maxTime)
            {
                List <WorkerStatus> statuses = GetStatusesWaitingForProcessing();
                if (statuses.Count >= 0)
                {
                    ProcessWorkerStatuses(statuses);
                }

                Thread.Sleep(1000);
                iterations += 1;
            }

            C.log.Info("Ending...");
            CommunicatorWithChildren.Stop();
            KillWorkers();
            C.log.Info("Best path:");
            if (bestTrail != null)
            {
                ACOExample.Display(bestTrail);
            }
            C.log.Info("Best path length: " + bestLength);
            C.log.Info("Stopping. Waiting for stdin...");
            Console.ReadKey();
        }
Beispiel #2
0
 public static void StopWorkers()
 {
     foreach (var worker in workers.Keys)
     {
         CommunicatorWithChildren.SendToChild(worker, new StopWorker());
     }
     workers.Clear();
     freeWorkersQueue.Clear();
     socketToJid.Clear();
 }
Beispiel #3
0
        public static void ServerExample()
        {
            CommunicatorWithChildren.InitializeServer();
            int k = 30;

            while (--k > 0)
            {
                Thread.Sleep(1000);
                Console.Out.WriteLine("Received msgs so far: {0}", AsynchronousCommunicationUtils.reception);
            }
        }
Beispiel #4
0
 private static void DelegateTasksToWorkers()
 {
     while (freeWorkersQueue.Count > 0)
     {
         if (tasksQueue.Count == 0)
         {
             return;
         }
         var task   = tasksQueue.Dequeue();
         var worker = freeWorkersQueue.Dequeue();
         CommunicatorWithChildren.SendToChild(worker, task);
         workers[worker].IsBusy = true;
         workers[worker].TaskIdLastOrCurrentlyExecuted   = task.Id;
         workers[worker].TaskNameLastOrCurrentlyExecuted = task.Name;
     }
 }
Beispiel #5
0
 private static void InjectCallbacks()
 {
     RegisterWorker.OnReceive += (sender, registerWorker) => {
         C.log.Info("RegisterWorker received");
         var jobId = registerWorker.JobId;
         workers[jobId] = new WorkerStatus();
         freeWorkersQueue.Enqueue(jobId);
         socketToJid[sender] = jobId;
         CommunicatorWithChildren.SendToChild(jobId, new RegisterWorkerConfirm());
         DelegateTasksToWorkers();
     };
     QueueTaskReturnValue.OnReceive += (sender, returnValue) => {
         C.log.Info("QueueTaskReturnValue received");
         promises[returnValue.Id].SetResult(returnValue.OutputData);
         var jid = socketToJid[sender];
         freeWorkersQueue.Enqueue(jid);
         workers[jid].IsBusy = false;
         DelegateTasksToWorkers();
     };
 }
Beispiel #6
0
 public static void Initialize()
 {
     InjectCallbacks();
     CommunicatorWithChildren.InitializeServer();
 }