Example #1
0
        private void WriteConfig(int run, int trial, SoaConfig config)
        {
            int    numTrialDigits    = numTrialsPerRun.ToString().Length;
            string trialNumberFormat = "D" + numTrialDigits.ToString();

            Directory.CreateDirectory(soaConfigOutputPath);

            string runFolder = Path.Combine(soaConfigOutputPath, "Run_" + run.ToString(trialNumberFormat));

            Directory.CreateDirectory(runFolder);

            string trialFolder = Path.Combine(runFolder, experiment.GetTrialName());

            Directory.CreateDirectory(trialFolder);

            string configName = Path.Combine(trialFolder, "SoaSimConfig.xml");

            Log.debug("Generating File: " + configName);

            Log.debug("***");
            Log.debug(generatorRandomSeed.ToString());
            Log.debug("***");

            SoaConfigXMLWriter.Write(config, configName);
        }
        public void GenerateConfigFiles()
        {
            // Find out trial number formatting
            int    numTrialDigits = numMCTrials.ToString().Length;
            string toStringFormat = "D" + numTrialDigits.ToString();

            // Generate each trial
            SoaConfig soaConfig;
            List <PrimitiveTriple <float, float, float> > randomizedPositions;

            for (int trial = 1; trial <= numMCTrials; trial++)
            {
                // Status message
                Log.debug("Generating config file " + soaConfigFileHeader + trial.ToString(toStringFormat) + ".xml");

                // Initialize remote platform ID assignment
                availableRemoteID = remoteStartID;

                // Create a new SoaConfig object
                soaConfig = new SoaConfig();

                // Populate network
                soaConfig.networkRedRoom  = networkRedRoomHeader + trial.ToString(toStringFormat);
                soaConfig.networkBlueRoom = networkBlueRoomHeader + trial.ToString(toStringFormat);

                // Logger configuration
                soaConfig.loggerOutputFile        = soaLoggerFileHeader + trial.ToString(toStringFormat) + ".xml";
                soaConfig.enableLogToFile         = true;
                soaConfig.enableLogEventsToFile   = logEvents;
                soaConfig.enableLogToUnityConsole = logToUnityConsole;

                // Simulation configuration
                soaConfig.simulationRandomSeed     = simulationRandomSeed;
                soaConfig.gameDurationHr           = gameDurationHr;
                soaConfig.probRedDismountHasWeapon = probRedDismountHasWeapon;
                soaConfig.probRedTruckHasWeapon    = probRedTruckHasWeapon;
                soaConfig.probRedTruckHasJammer    = probRedTruckHasJammer;

                // Populate fuel defaults
                soaConfig.defaultSmallUAVFuelTankSize_s = defaultSmallUAVFuelTankSize_s;
                soaConfig.defaultHeavyUAVFuelTankSize_s = defaultHeavyUAVFuelTankSize_s;

                // Populate storage defaults
                soaConfig.defaultHeavyUAVNumStorageSlots    = defaultHeavyUAVStorageSlots;
                soaConfig.defaultRedDismountNumStorageSlots = defaultRedDismountStorageSlots;
                soaConfig.defaultRedTruckNumStorageSlots    = defaultRedTruckStorageSlots;

                // Set sensor and classifier defaults
                SetSensorDefaults(soaConfig);
                SetClassifierDefaults(soaConfig);

                // Set comms and jammer defaults
                SetCommsDefaults(soaConfig);
                SetJammerDefaults(soaConfig);

                // Initialize and set site locations
                SetSiteLocations(soaConfig);

                // Initialize platform laydown
                InitializeLocalLaydown();
                InitializeRemoteLaydown();

                // Local units: Red Dismount
                randomizedPositions = redDismountLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.localPlatforms.Add(new RedDismountConfig(
                                                     randomizedPositions[i].first,  // x
                                                     randomizedPositions[i].second, // y
                                                     randomizedPositions[i].third,  // z
                                                     new Optional <int>(),          // id
                                                     new Optional <float>(),        // sensorBeamwidth_deg
                                                     new Optional <string>(),       // initialWaypoint
                                                     new Optional <bool>(),         // hasWeapon
                                                     new Optional <float>(),        // commsRange_km
                                                     new Optional <int>()           // numStorageSlots
                                                     ));
                }

                // Local units: Red Truck
                randomizedPositions = redTruckLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.localPlatforms.Add(new RedTruckConfig(
                                                     randomizedPositions[i].first,  // x
                                                     randomizedPositions[i].second, // y
                                                     randomizedPositions[i].third,  // z
                                                     new Optional <int>(),          // id
                                                     new Optional <float>(),        // sensorBeamwidth_deg
                                                     new Optional <string>(),       // initialWaypoint
                                                     new Optional <bool>(),         // hasWeapon
                                                     new Optional <bool>(),         // hasJammer
                                                     new Optional <float>(),        // commsRange_km
                                                     new Optional <float>(),        // jammerRange_km
                                                     new Optional <int>()           // numStorageSlots
                                                     ));
                }

                // Local units: Neutral Dismount
                randomizedPositions = neutralDismountLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.localPlatforms.Add(new NeutralDismountConfig(
                                                     randomizedPositions[i].first,  // x
                                                     randomizedPositions[i].second, // y
                                                     randomizedPositions[i].third,  // z
                                                     new Optional <int>(),          // id
                                                     new Optional <float>()         // sensorBeamwidth_deg
                                                     ));
                }

                // Local units: Neutral Truck
                randomizedPositions = neutralTruckLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.localPlatforms.Add(new NeutralTruckConfig(
                                                     randomizedPositions[i].first,  // x
                                                     randomizedPositions[i].second, // y
                                                     randomizedPositions[i].third,  // z
                                                     new Optional <int>(),          // id
                                                     new Optional <float>()         // sensorBeamwidth_deg
                                                     ));
                }

                // Local units: Blue Police
                randomizedPositions = bluePoliceLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.localPlatforms.Add(new BluePoliceConfig(
                                                     randomizedPositions[i].first,  // x
                                                     randomizedPositions[i].second, // y
                                                     randomizedPositions[i].third,  // z
                                                     new Optional <int>(),          // id
                                                     new Optional <float>(),        // sensorBeamwidth_deg
                                                     new Optional <float>()         // commsRange_km
                                                     ));
                }

                // Remote units: Heavy UAV
                randomizedPositions = heavyUAVLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.remotePlatforms.Add(new HeavyUAVConfig(
                                                      randomizedPositions[i].first,  // x
                                                      randomizedPositions[i].second, // y
                                                      randomizedPositions[i].third,  // z
                                                      availableRemoteID++,           // id
                                                      new Optional <float>(),        // sensorBeamwidth_deg
                                                      new Optional <float>(),        // commsRange_km
                                                      new Optional <float>(),        // fuelTankSize_s
                                                      new Optional <int>()           // numStorageSlots
                                                      ));
                }

                // Remote units: Small UAV
                randomizedPositions = smallUAVLaydown.Generate(gridMath, rand);
                for (int i = 0; i < randomizedPositions.Count; i++)
                {
                    soaConfig.remotePlatforms.Add(new SmallUAVConfig(
                                                      randomizedPositions[i].first,  // x
                                                      randomizedPositions[i].second, // y
                                                      randomizedPositions[i].third,  // z
                                                      availableRemoteID++,           // id
                                                      new Optional <float>(),        // sensorBeamwidth_deg
                                                      new Optional <float>(),        // commsRange_km
                                                      new Optional <float>()         // fuelTankSize_s
                                                      ));
                }

                // Remote units: Blue Balloon
                List <PrimitivePair <float, float> > balloonWaypoints = new List <PrimitivePair <float, float> >();
                balloonWaypoints.Add(new PrimitivePair <float, float>(-28, 0));
                balloonWaypoints.Add(new PrimitivePair <float, float>(29, 0));
                soaConfig.remotePlatforms.Add(new BlueBalloonConfig(
                                                  availableRemoteID++,    // id
                                                  new Optional <float>(), // sensorBeamwidth_deg
                                                  balloonWaypoints,
                                                  true
                                                  ));

                // Create output directory if it does not already exist and Write SoaConfig contents to a config file
                Directory.CreateDirectory(soaConfigOutputPath);
                SoaConfigXMLWriter.Write(soaConfig, Path.Combine(soaConfigOutputPath, soaConfigFileHeader + trial.ToString(toStringFormat) + ".xml"));
            } // End current trial
        }