コード例 #1
0
        public Configuration Build()
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            if (!IsGeneratorSeedSet)
            {
                SetSetGeneratorSeed(randomGeneratorFacade.GiveRandomNumber(100, 65535));
            }
            if (!IsThreadCycleDurationSet)
            {
                SetThreadCycleDuration(randomGeneratorFacade.GiveRandomNumber(1, 17));
            }
            if (!IsNumberOfThreadCyclesSet)
            {
                SetNumberOfThreadCycles(randomGeneratorFacade.GiveRandomNumber(1, 23));
            }
            if (!IsOutputFilePathSet)
            {
                SetOutputFilePath("kgrlic_" + DateTime.Now.ToString("yyyymmdd_HHmmss") + ".txt");
            }
            if (!IsNumberOfLinesSet)
            {
                SetNumberOfLines(randomGeneratorFacade.GiveRandomNumber(100, 999));
            }

            return(_configuration);
        }
コード例 #2
0
        public Place Construct(Dictionary <string, string> placeParams, ThingsOfFoi thingsOfFoi, Foi foi)
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            if (DoesPlaceNameExists(placeParams["naziv"], foi))
            {
                return(null);
            }

            int placeUniqueIdentifier = randomGeneratorFacade.GiveRandomNumber(1, 1000);

            while (DoesIdentifierExists(placeUniqueIdentifier, foi))
            {
                placeUniqueIdentifier = randomGeneratorFacade.GiveRandomNumber(1, 1000);
            }

            List <Device> devices = new List <Device>();

            devices.AddRange(GetRandomDevices(Converter.StringToInt(placeParams["broj senzora"]), thingsOfFoi.Sensors.FindAll(sen => sen.Type == Converter.StringToInt(placeParams["tip"]) || sen.Type == 2)));
            devices.AddRange(GetRandomDevices(Converter.StringToInt(placeParams["broj aktuatora"]), thingsOfFoi.Actuators.FindAll(act => act.Type == Converter.StringToInt(placeParams["tip"]) || act.Type == 2)));

            return(_builder
                   .SetUniqueIdentifier(placeUniqueIdentifier)
                   .SetName(placeParams["naziv"])
                   .SetType(Converter.StringToInt(placeParams["tip"]))
                   .SetNumberOfSensors(Converter.StringToInt(placeParams["broj senzora"]))
                   .SetNumberOfActuators(Converter.StringToInt(placeParams["broj aktuatora"]))
                   .SetDevices(devices)
                   .Build());
        }
コード例 #3
0
        private void EquipPlaces(Foi foi)
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();
            IIterator             placeIterator         = foi.Places.CreateIterator(IteratorType.AscendingValue);
            Place place = placeIterator.First();

            while (place != null)
            {
                List <Device> actuators = place.Devices.FindAll(d => d.DeviceType == DeviceType.Actuator && d.IsBeingUsed && d.Malfunctional == false);
                List <Device> sensors   = place.Devices.FindAll(d => d.DeviceType == DeviceType.Sensor && d.IsBeingUsed && d.Malfunctional == false);

                foreach (var actuator in actuators)
                {
                    int numberOfSensorsToEquipActuator = randomGeneratorFacade.GiveRandomNumber(1, sensors.Count);

                    List <int> usedSensorIndexes      = new List <int>();
                    int[]      availableSensorIndexes = Enumerable.Range(0, sensors.Count).ToArray();

                    for (int i = 0; i < numberOfSensorsToEquipActuator; i++)
                    {
                        int[] unusedSensorIndexes = availableSensorIndexes.Except(usedSensorIndexes).ToArray();
                        int   randomIndex         = randomGeneratorFacade.GiveRandomNumber(0, sensors.Count - 1, unusedSensorIndexes, 1);
                        usedSensorIndexes.Add(randomIndex);

                        actuator.AddChild(sensors[randomIndex]);
                        sensors[randomIndex].AddParent(actuator);
                    }
                }

                RepairOneDevice(place);
                ListDevices(place);

                place = placeIterator.Next();
            }
        }
コード例 #4
0
        public int GetStatus(double?averageDeviceValidity = 0.5)
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            StatusHistory.Add(randomGeneratorFacade.GiveRandomNumber(0, 1, new[] { 1 }, averageDeviceValidity));
            return(StatusHistory.Last());
        }
コード例 #5
0
        public Configuration Build()
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            if (!_isNumberOfRows)
            {
                SetNumberOfRows(24);
            }
            if (!_isNumberOfColumns)
            {
                SetNumberOfColumns(80);
            }
            if (!_isNumberOfInputRows)
            {
                SetNumberOfInputRows(2);
            }
            if (!_isAverageDeviceValidity)
            {
                SetAverageDeviceValidity(50);
            }
            if (!_isGeneratorSeedSet)
            {
                SetGeneratorSeed((int)(DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond));
            }
            if (!_isThreadCycleDurationSet)
            {
                SetThreadCycleDuration(randomGeneratorFacade.GiveRandomNumber(1, 17));
            }

            return(_configuration);
        }
コード例 #6
0
        public int GetStatus(double successProbability = 0.5)
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            StatusHistory.Add(randomGeneratorFacade.GiveRandomNumber(0, 1, new[] { 1 }, successProbability));
            return(StatusHistory.Last());
        }
コード例 #7
0
        private void Move()
        {
            Output output = Output.GetInstance();

            if (Kind == 3)
            {
                if (_value == 0)
                {
                    output.WriteLine("\tsmjer = ---> ");
                    _value = 1;
                }
                else
                {
                    output.WriteLine("\tsmjer = <--- ");
                    _value = 0;
                }

                output.WriteLine("\tnova vrijednost =  " + ReadValue());
            }
            else
            {
                RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

                int amount = randomGeneratorFacade.GiveRandomNumber((int)(Min ?? 0), (int)(Max ?? 1));

                output.WriteLine("\tpomicanje za = " + amount);

                if (_executionDirection)
                {
                    output.WriteLine("\tsmjer = ---> ");

                    if (Value + amount > (int)(Max ?? 1))
                    {
                        _value = (int)(Max ?? 1);
                        _executionDirection = false;
                    }
                    else
                    {
                        _value = Value + amount;
                    }
                }
                else
                {
                    output.WriteLine("\tsmjer = <--- ");

                    if (Value - amount < (int)(Min ?? 0))
                    {
                        _value = (int)(Min ?? 0);
                        _executionDirection = true;
                    }
                    else
                    {
                        _value = Value - amount;
                    }
                }

                output.WriteLine("\tnova vrijednost = " + ReadValue());
            }
        }
コード例 #8
0
        private void Move(List <string> data)
        {
            if (Kind == 3)
            {
                if (_value == 0)
                {
                    data.Add("smjer = (+) ");
                    _value = 1;
                }
                else
                {
                    data.Add("smjer = (-) ");
                    _value = 0;
                }

                data.Add("nova vrijednost =  " + ReadValue());
            }
            else
            {
                RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

                int amount = randomGeneratorFacade.GiveRandomNumber((int)(Min ?? 0), (int)(Max ?? 1));

                data.Add("pomicanje za = " + amount);

                if (_executionDirection)
                {
                    data.Add("smjer = (+) ");

                    if (Value + amount > (int)(Max ?? 1))
                    {
                        _value = (int)(Max ?? 1);
                        _executionDirection = false;
                    }
                    else
                    {
                        _value = Value + amount;
                    }
                }
                else
                {
                    data.Add("smjer = (-) ");

                    if (Value - amount < (int)(Min ?? 0))
                    {
                        _value = (int)(Min ?? 0);
                        _executionDirection = true;
                    }
                    else
                    {
                        _value = Value - amount;
                    }
                }

                data.Add("nova vrijednost = " + ReadValue());
            }
        }
コード例 #9
0
        public Sensor(Dictionary <string, string> deviceParams, ThingsOfFoi thingsOfFoi) : base(deviceParams, thingsOfFoi)
        {
            DeviceType = DeviceType.Sensor;
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            do
            {
                UniqueIdentifier = randomGeneratorFacade.GiveRandomNumber(1, 1000);
            } while (DoesUniqueIdentifierExists(UniqueIdentifier, thingsOfFoi.Sensors));
        }
コード例 #10
0
        public void Accept(Visitor visitor)
        {
            List <Device> brokenDevices = Devices.FindAll(d => d.IsBeingUsed == false || d.Malfunctional);

            if (brokenDevices.Count > 0)
            {
                RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();
                int randomDeviceIndex = randomGeneratorFacade.GiveRandomNumber(0, brokenDevices.Count);
                brokenDevices[randomDeviceIndex].Accept(visitor);
            }
        }
コード例 #11
0
        private List <Device> GetRandomDevices(int?numberOfDevices, List <Device> availableDevices)
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();
            List <Device>         placeDevices          = new List <Device>();

            for (int i = 0; i < numberOfDevices; i++)
            {
                Device randomDevice = availableDevices[randomGeneratorFacade.GiveRandomNumber(0, availableDevices.Count)];
                placeDevices.Add(randomDevice.Clone());
            }

            return(placeDevices);
        }
コード例 #12
0
        public Place Construct(Dictionary <string, string> placeParams, ThingsOfFoi thingsOfFoi)
        {
            Foi foi = Foi.GetInstance();

            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();

            if (DoesPlaceExists(Converter.StringToInt(placeParams["id"]), foi))
            {
                Console.WriteLine("Mjesto sa identifikatorom: " + placeParams["id"] + "(" + placeParams["naziv"] + ") vec postoji, preskacem!");
                return(null);
            }

            return(_builder
                   .SetUniqueIdentifier(Converter.StringToInt(placeParams["id"]))
                   .SetName(placeParams["naziv"])
                   .SetType(Converter.StringToInt(placeParams["tip"]))
                   .SetNumberOfSensors(Converter.StringToInt(placeParams["broj senzora"]))
                   .SetNumberOfActuators(Converter.StringToInt(placeParams["broj aktuatora"]))
                   .Build());
        }