示例#1
0
 void Start()
 {
     serialData = FindObjectOfType<SerialData>();
     if (!decisionSegment) {
         startSegment = transform.FindChild ("BeginSegment").GetComponent<SegmentZone> ();
         middleSegment = transform.FindChild ("MiddleSegment").GetComponent<SegmentZone> ();
         endSegment = transform.FindChild ("EndSegment").GetComponent<SegmentZone> ();
     }
 }
示例#2
0
        private static void RunExport(string path)
        {
            string directory = Path.GetDirectoryName(path);

            if (directory == null)
            {
                return;
            }

            string filename     = Path.GetFileNameWithoutExtension(path);
            string extension    = Path.GetExtension(path);
            int    segmentCount = Global.SegmentZones.GetLength(0);

            IPersisterReader <IZone> zoneReader =
                Global
                .ContainerDaySim.GetInstance <IPersistenceFactory <IZone> >()
                .Reader;

            for (int segment = 0; segment < segmentCount; segment++)
            {
                FileInfo file = new FileInfo(Path.Combine(directory, string.Format("{0}.{1}{2}", filename, segment, extension)));

                using (StreamWriter writer = new StreamWriter(file.Open(FileMode.Create, FileAccess.Write, FileShare.Read))) {
                    SegmentZone[] segmentZones = Global.SegmentZones[segment];
                    int           zoneCount    = segmentZones.GetLength(0);

                    FileInfo     sizesFile   = new FileInfo(Path.Combine(directory, string.Format("{0}.{1}.sizes{2}", filename, segment, extension)));
                    StreamWriter sizesWriter = new StreamWriter(sizesFile.Open(FileMode.Create, FileAccess.Write, FileShare.Read));

                    FileInfo     weightsFile   = new FileInfo(Path.Combine(directory, string.Format("{0}.{1}.weights{2}", filename, segment, extension)));
                    StreamWriter weightsWriter = new StreamWriter(weightsFile.Open(FileMode.Create, FileAccess.Write, FileShare.Read));

                    for (int zoneId = 0; zoneId < zoneCount; zoneId++)
                    {
                        SegmentZone segmentZone = segmentZones[zoneId];

                        if (segmentZone == null)
                        {
                            continue;
                        }

                        IZone zone = zoneReader.Seek(zoneId);

                        writer.Write(zone.Key);
                        writer.Write("\t");
                        writer.Write(segmentZone.TotalSize.ToString("f7"));
                        writer.Write("\t");
                        writer.Write(segmentZone.TotalWeight.ToString("f7"));
                        writer.WriteLine();

                        ExportRankedSizes(sizesWriter, zone.Key, segmentZone.RankedSizes);
                        ExportRankedWeights(weightsWriter, zone.Key, zoneReader, segmentZone.RankedWeights);

                        sizesWriter.Flush();
                        weightsWriter.Flush();
                    }

                    sizesWriter.Dispose();
                    weightsWriter.Dispose();
                }

                Global.PrintFile.WriteFileInfo(file, true);
            }
        }
        private SegmentZone[] ComputeSegment(int segment)
        {
            double[]      sizeFactors   = Global.ContainerDaySim.GetInstance <SamplingWeightsSettingsFactory>().SamplingWeightsSettings.SizeFactors[segment];
            double[]      weightFactors = Global.ContainerDaySim.GetInstance <SamplingWeightsSettingsFactory>().SamplingWeightsSettings.WeightFactors[segment];
            SegmentZone[] segmentZones  = new SegmentZone[_zoneCount];

            foreach (IParcelWrapper parcel in _eligibleParcels)
            {
                SegmentZone segmentZone = segmentZones[parcel.ZoneId];
                IZone       zone        = _eligibleZones[parcel.ZoneId];
                if (segmentZone == null)
                {
                    segmentZone = new SegmentZone(_parcelCounts[parcel.ZoneId], _zoneCount)
                    {
                        Id = parcel.ZoneId, Key = zone.Key
                    };

                    segmentZones[segmentZone.Id] = segmentZone;
                }

                double openSpace     = (Global.Configuration.UseParcelLandUseCodeAsSquareFeetOpenSpace) ? parcel.LandUseCode : parcel.OpenSpaceType2Buffer1;
                double openSpaceSize = (Global.Configuration.UseLogOfSquareFeetOpenSpaceInDestinationSampling ||
                                        Global.Configuration.UseParcelLandUseCodeAsSquareFeetOpenSpace) ? Math.Log(openSpace + 1.0) : openSpace;

                double factor = Math.Exp(sizeFactors[0]) * parcel.EmploymentEducation +
                                Math.Exp(sizeFactors[1]) * parcel.EmploymentFood +
                                Math.Exp(sizeFactors[2]) * parcel.EmploymentGovernment +
                                Math.Exp(sizeFactors[3]) * parcel.EmploymentIndustrial +
                                Math.Exp(sizeFactors[4]) * parcel.EmploymentMedical +
                                Math.Exp(sizeFactors[5]) * parcel.EmploymentOffice +
                                Math.Exp(sizeFactors[6]) * parcel.EmploymentAgricultureConstruction +
                                Math.Exp(sizeFactors[7]) * parcel.EmploymentRetail +
                                Math.Exp(sizeFactors[8]) * parcel.EmploymentService +
                                Math.Exp(sizeFactors[9]) * parcel.EmploymentTotal +
                                Math.Exp(sizeFactors[10]) * parcel.Households +
                                Math.Exp(sizeFactors[11]) * parcel.StudentsK8 +
                                Math.Exp(sizeFactors[12]) * parcel.StudentsUniversity +
                                Math.Exp(sizeFactors[13]) * parcel.GetLandUseCode19() +
                                Math.Exp(sizeFactors[14]) * parcel.OpenSpaceType1Buffer1 +
                                Math.Exp(sizeFactors[15]) * openSpaceSize +
                                Math.Exp(sizeFactors[16]) * parcel.StudentsHighSchool;

                double size = 100 * factor;

                if (size >= Global.Configuration.MinParcelSize)
                {
                    segmentZone.TotalSize += size;
                }

                segmentZone.SetSize(parcel.Sequence, parcel.Id, size);
            }

            foreach (SegmentZone origin in segmentZones.Where(o => o != null))
            {
                origin.RankSizes();

                foreach (SegmentZone destination in segmentZones.Where(d => d != null))
                {
                    SkimValue skimValue = ImpedanceRoster.GetValue(_variableName, _mode, _pathType, _vot, _minute, origin.Id, destination.Id);

                    //jb 20130707 mimic mb fix for 0 intrazonals
                    if (Global.Configuration.DestinationScale == Global.Settings.DestinationScales.Zone && origin.Id == destination.Id && skimValue.Variable < Constants.EPSILON)
                    {
                        if (_variableName == "distance")
                        {
                            skimValue.Variable = 0.25 * Global.Settings.DistanceUnitsPerMile;
                        }
                        else if (_variableName == "ivtime" || _variableName == "time" || _variableName == "ivtfree")
                        {
                            skimValue.Variable =
                                (_mode == Global.Settings.Modes.Walk) ? 5 :
                                (_mode == Global.Settings.Modes.Bike) ? 2 :
                                (_mode > Global.Settings.Modes.Bike && _mode < Global.Settings.Modes.Transit) ? 1 : 0;
                        }
                    }
                    double sovInVehicleTime = skimValue.Variable;

                    // give 0 weight if not connected in SOV matrix
                    double weight = sovInVehicleTime < Constants.EPSILON ? 0.0 : Math.Exp(-2 * sovInVehicleTime * 100 / weightFactors[0]) * destination.TotalSize;

                    origin.TotalWeight += weight;
                    origin.SetWeight(destination.Id, weight);
                }

                origin.RankWeights();
            }

            return(segmentZones);
        }
示例#4
0
 public void SetCurrentSegment(SegmentZone z)
 {
     serialData.currentSegment = z;
 }