Beispiel #1
0
        public void Deliver(int time)
        {
            int    units   = RobotClass.massToUnit(this.load.storageMass, this.load.currentHoldNum);
            double mass    = this.load.storageMass;
            int    itemNum = this.load.currentHoldNum;

            if (itemNum == 0)
            {
                FullTest.underway_Queue.Enqueue(new OrderClass(units, 0, 0, 0, 0, time));
            }
            else if (itemNum == 1)
            {
                FullTest.underway_Queue.Enqueue(new OrderClass(0, units, 0, 0, 0, time));
            }
            else if (itemNum == 2)
            {
                FullTest.underway_Queue.Enqueue(new OrderClass(0, 0, units, 0, 0, time));
            }
            else if (itemNum == 3)
            {
                FullTest.underway_Queue.Enqueue(new OrderClass(0, 0, 0, units, 0, time));
            }
            else if (itemNum == 4)
            {
                FullTest.underway_Queue.Enqueue(new OrderClass(0, 0, 0, 0, units, time));
            }


            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
        }
Beispiel #2
0
        public void Unload(int[] cubbard_Co)
        {
            int    units   = RobotClass.massToUnit(this.load.storageMass, this.load.currentHoldNum);
            double mass    = this.load.storageMass;
            int    itemNum = this.load.currentHoldNum;

            int column    = cubbard_Co[0];
            int subColumn = cubbard_Co[1];
            int side      = cubbard_Co[2];
            int cubbard   = cubbard_Co[3];

            if (itemNum == 0)
            {
                FullTest.shelf_Mutex.WaitOne();
                FullTest.shelfMass[column, subColumn, side, cubbard] += mass;
                //Console.WriteLine("Mass on shelf: {0}", FullTest.shelfMass[column, subColumn, side, cubbard]);
                //Console.WriteLine("Co-Ordinates: {0}, {1}, {2}, {3}", column, subColumn, side, cubbard);
                FullTest.shelf_Mutex.ReleaseMutex();


                FullTest.item1_Mutex.WaitOne();
                FullTest.item1Tracker[column, subColumn, side, cubbard].UpdateRecord(units);
                FullTest.item1_Mutex.ReleaseMutex();
            }
            else if (itemNum == 1)
            {
                FullTest.shelf_Mutex.WaitOne();
                FullTest.shelfMass[column, subColumn, side, cubbard] += mass;
                FullTest.shelf_Mutex.ReleaseMutex();


                FullTest.item2_Mutex.WaitOne();
                FullTest.item2Tracker[column, subColumn, side, cubbard].UpdateRecord(units);
                FullTest.item2_Mutex.ReleaseMutex();
            }
            else if (itemNum == 2)
            {
                FullTest.shelf_Mutex.WaitOne();
                FullTest.shelfMass[column, subColumn, side, cubbard] += mass;
                FullTest.shelf_Mutex.ReleaseMutex();


                FullTest.item3_Mutex.WaitOne();
                FullTest.item3Tracker[column, subColumn, side, cubbard].UpdateRecord(units);
                FullTest.item3_Mutex.ReleaseMutex();
            }
            else if (itemNum == 3)
            {
                FullTest.shelf_Mutex.WaitOne();
                FullTest.shelfMass[column, subColumn, side, cubbard] += mass;
                FullTest.shelf_Mutex.ReleaseMutex();


                FullTest.item4_Mutex.WaitOne();
                FullTest.item4Tracker[column, subColumn, side, cubbard].UpdateRecord(units);
                FullTest.item4_Mutex.ReleaseMutex();
            }
            else if (itemNum == 4)
            {
                FullTest.shelf_Mutex.WaitOne();
                FullTest.shelfMass[column, subColumn, side, cubbard] += mass;
                FullTest.shelf_Mutex.ReleaseMutex();


                FullTest.item5_Mutex.WaitOne();
                FullTest.item5Tracker[column, subColumn, side, cubbard].UpdateRecord(units);
                FullTest.item5_Mutex.ReleaseMutex();
            }

            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
            this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0;
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            for (int a = 0; a < length; a++)
            {
                for (int b = 0; b < width; b++)
                {
                    layout[b, a] = 'o';
                }
            }

            //for (int i = 0; i < numberOfRobots; i++)
            //         {
            //	layout[0, i] = 'x';
            //         }


            Mutex[] robotManager = new Mutex[numberOfRobots];

            for (int i = 0; i < numberOfRobots; i++)
            {
                robotManager[i] = new Mutex();
            }



            LayoutPrint(layoutReadWrite);

            int[] r1Start    = new int[] { 0, 1 };
            int[] r1StartObj = new int[] { 0, 0 };

            RobotClass rob1 = new RobotClass(1, r1Start, r1StartObj, 0, boundaries, layoutReadWrite);

            rob1.ObjectiveStep(r1StartObj, 0, layoutReadWrite);


            int[] fullLoopTest = new int[] { 0, 2 };
            rob1.ObjectiveStep(fullLoopTest, 0, layoutReadWrite);

            fullLoopTest = new int[] { 0, 0 };
            rob1.ObjectiveStep(fullLoopTest, 0, layoutReadWrite);



            Task rob1Task = Task.Run(() =>
            {
                for (int i = boundaryLeft + 1; i < (boundaryRight + 1); i++)
                {
                    int[] fullLoopTest1 = new int[] { i, ((i % 3) + 1) };
                    Task robot1         = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite));
                    robot1.Wait();

                    fullLoopTest1 = new int[] { i, 4 };
                    robot1        = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite));
                    robot1.Wait();

                    fullLoopTest1 = new int[] { 0, 0 };
                    robot1        = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite));
                    robot1.Wait();
                }
            });


            Task rob2Task = Task.Run(() =>
            {
                int[] r2Start    = new int[] { 0, 1 };
                int[] r2StartObj = new int[] { 0, 0 };
                RobotClass rob2  = new RobotClass(2, r2Start, r2StartObj, 0, boundaries, layoutReadWrite);
                rob2.ObjectiveStep(r2StartObj, 0, layoutReadWrite);

                for (int k = boundaryLeft + 1; k < (boundaryRight + 1); k++)
                {
                    int[] fullLoopTest2 = new int[] { k, ((k % 3) + 1) };
                    Task robot2         = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite));
                    robot2.Wait();

                    fullLoopTest2 = new int[] { k, 4 };
                    robot2        = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite));
                    robot2.Wait();

                    if (k != 1)
                    {
                        fullLoopTest2 = new int[] { 0, 0 };
                        robot2        = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite));
                        robot2.Wait();
                    }
                    else
                    {
                        fullLoopTest2 = new int[] { 0, 1 };
                        robot2        = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite));
                        robot2.Wait();
                    }
                }
            });

            while ((!rob2Task.IsCompleted) || (!rob1Task.IsCompleted))
            {
                if (rob1Task.IsCompleted)
                {
                    int[] fullLoopTest1 = new int[] { 0, 1 };
                    Task  robot1        = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite));
                    robot1.Wait();

                    if (!rob2Task.IsCompleted)
                    {
                        fullLoopTest1 = new int[] { 0, 0 };
                        robot1        = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite));
                        robot1.Wait();
                    }
                }
            }


            rob2Task.Wait();
            rob1Task.Wait();

            Console.WriteLine("\nFinished.");
            LayoutPrint(layoutReadWrite);
            Console.WriteLine("\n\n\n\n\n");
        }