Changeset 17175


Ignore:
Timestamp:
07/26/19 15:13:36 (4 weeks ago)
Author:
abeham
Message:

#2457: branched integer encoding, some changes

Location:
branches/2457_ExpertSystem
Files:
1 added
6 edited
7 copied

Legend:

Unmodified
Added
Removed
  • branches/2457_ExpertSystem/HeuristicLab.OptimizationExpertSystem.Common/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj

    r16958 r17175  
    151151    <Reference Include="System.Core" />
    152152    <Reference Include="System.Drawing" />
     153    <Reference Include="System.IO.Compression" />
    153154    <Reference Include="System.Runtime.Serialization" />
    154155    <Reference Include="System.Xml.Linq" />
  • branches/2457_ExpertSystem/HeuristicLab.OptimizationExpertSystem.Common/3.3/KnowledgeCenter.cs

    r16958 r17175  
    2424using System.Drawing;
    2525using System.IO;
     26using System.IO.Compression;
    2627using System.Linq;
    2728using System.Threading;
    2829using System.Threading.Tasks;
     30using HEAL.Attic;
    2931using HeuristicLab.Algorithms.DataAnalysis;
    3032using HeuristicLab.Analysis;
     
    296298
    297299    private static readonly HashSet<string> InterestingValueNames = new HashSet<string>() {
    298       "QualityPerEvaluations", "Problem Name", "Problem Type", "Algorithm Name", "Algorithm Type", "Maximization", "BestKnownQuality"
     300      "QualityPerEvaluations", "QualityPerClock", "Problem Name", "Problem Type", "Algorithm Name", "Algorithm Type", "Maximization", "BestKnownQuality"
    299301    };
    300302
     
    517519
    518520          IItem bkParam;
    519           if (!prob.Parameters.TryGetValue("BestKnownQuality", out bkParam) || !(bkParam is DoubleValue)) {
    520             var list = kvp.Value.SelectMany(x => x.Value)
    521               .Where(x => x.Results.ContainsKey("QualityPerEvaluations"))
    522               .Select(x => ((IndexedDataTable<double>)x.Results["QualityPerEvaluations"]).Rows.First().Values.Last().Item2);
    523             if (!list.Any()) continue;
    524             bkParam = new DoubleValue(maximization ? list.Max() : list.Min());
     521          if (!prob.Parameters.TryGetValue("BestKnownQuality", out bkParam) || !(bkParam is DoubleValue) || double.IsNaN(((DoubleValue)bkParam).Value)) {
     522            var best = double.NaN;
     523            foreach (var x in kvp.Value.SelectMany(x => x.Value)) {
     524              double? lastVal = null;
     525              if (x.Results.TryGetValue("QualityPerEvaluations", out var item)) {
     526                lastVal = ((IndexedDataTable<double>)item).Rows.FirstOrDefault()?.Values.LastOrDefault()?.Item2;
     527              }
     528              if (x.Results.TryGetValue("QualityPerClock", out item)) {
     529                lastVal = ((IndexedDataTable<double>)item).Rows.FirstOrDefault()?.Values.LastOrDefault()?.Item2;
     530              }
     531              if (lastVal.HasValue && (double.IsNaN(best)
     532                || maximization && best < lastVal.Value
     533                || !maximization && best > lastVal.Value))
     534                best = lastVal.Value;
     535            }
     536            if (double.IsNaN(best)) continue;
     537            bkParam = new DoubleValue(best);
    525538            prob.Parameters["BestKnownQuality"] = bkParam;
    526539          }
     
    600613      var total = hashSet.Count;
    601614      try {
    602         var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "HeuristicLab.OKB", "cache", "runs");
    603         Parallel.ForEach(Directory.EnumerateDirectories(path).Select((d, i) => new { Index = i, Directory = d }).GroupBy(x => x.Index / 100), new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount },
    604           (folderGroup) => {
    605           var localRunList = new List<Tuple<long, long, IRun>>();
    606           foreach (var runPath in folderGroup.Select(x => x.Directory)) {
    607             long runId;
    608             var runFolder = new DirectoryInfo(runPath).Name;
    609             if (!long.TryParse(runFolder, out runId) || !hashSet.Contains(runId)) continue;
    610             var runFilePath = Directory.EnumerateFiles(runPath).Single();
    611             var runFileName = Path.GetFileNameWithoutExtension(runFilePath);
    612             long algId;
    613             if (!long.TryParse(runFileName, out algId)) continue;
    614             IRun run = null;
    615             try {
    616               using (var file = File.OpenRead(runFilePath))
    617                 run = XmlParser.Deserialize<IRun>(file);
    618             } catch {
    619               File.Delete(runFilePath);
    620               Directory.Delete(runPath);
    621             }
    622             if (run != null) localRunList.Add(Tuple.Create(algId, runId, run));
    623           }
    624           lock (runList) {
    625             foreach (var r in localRunList) {
    626               hashSet.Remove(r.Item2);
    627               algorithmId2RunMapping.Add(r.Item1, r.Item3);
    628               runList.Add(r.Item3);
    629             }
    630             progress.Message = string.Format("Retrieved {0} of {1} from cache", runList.Count, total);
    631             progress.ProgressValue = (double)runList.Count / total;
    632           }
    633         });
     615        var updateCount = 0;
     616        var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "HeuristicLab.OKB", "cache", "runsperalg");
     617        Parallel.ForEach(Directory.EnumerateFiles(path), new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount },
     618          (algPath) => {
     619            var serializer = new ProtoBufSerializer();
     620            var algId = long.Parse(Path.GetFileName(algPath));
     621            using (var stream = File.Open(algPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) {
     622              using (var archive = new ZipArchive(stream, ZipArchiveMode.Read)) {
     623                foreach (var entry in archive.Entries) {
     624                  var runId = long.Parse(entry.Name);
     625                  var useEntry = false;
     626                  lock (hashSet) {
     627                    useEntry = hashSet.Remove(runId);
     628                  }
     629                  if (useEntry) {
     630                    //using (var df = new DeflateStream(entry.Open(), CompressionMode.Decompress)) {
     631                      var run = (Tuple<long, long, IRun>)serializer.Deserialize(entry.Open());
     632                      if (run.Item1 != algId || run.Item2 != runId) {
     633                        lock (hashSet) hashSet.Add(runId);
     634                        continue;
     635                      }
     636                      lock (runList) {
     637                        algorithmId2RunMapping.Add(algId, run.Item3);
     638                        runList.Add(run.Item3);
     639                        updateCount++;
     640                        if (total < 100 || updateCount % (total / 100) == 0) {
     641                          progress.Message = string.Format("Retrieved {0} of {1} from cache", updateCount, total);
     642                          progress.ProgressValue = (double)runList.Count / total;
     643                        }
     644                      }
     645                    //}
     646                  }
     647                }
     648              }
     649            }
     650          });
    634651      } catch { }
    635652      return hashSet.ToList();
     
    638655    private void SaveToCache(IEnumerable<Tuple<long, long, IRun>> runs) {
    639656      try {
    640         var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "HeuristicLab.OKB", "cache", "runs");
     657        var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "HeuristicLab.OKB", "cache", "runsperalg");
    641658        if (!Directory.Exists(path)) Directory.CreateDirectory(path);
    642         foreach (var r in runs) {
    643           var runPath = Path.Combine(path, r.Item2.ToString());
    644           if (!Directory.Exists(runPath)) Directory.CreateDirectory(runPath);
    645           using (var file = File.Open(Path.Combine(runPath, r.Item1.ToString()), FileMode.Create, FileAccess.ReadWrite)) {
    646             XmlGenerator.Serialize(r.Item3, file);
     659        var serializer = new ProtoBufSerializer();
     660        foreach (var runsOfAlg in runs.GroupBy(x => x.Item1)) {
     661          var runPath = Path.Combine(path, runsOfAlg.Key.ToString());
     662          using (var stream = File.Open(runPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) {
     663            using (var archive = new ZipArchive(stream, ZipArchiveMode.Update)) {
     664              foreach (var run in runsOfAlg) {
     665                var entry = archive.CreateEntry(run.Item2.ToString(), CompressionLevel.NoCompression);
     666                using (var entrystream = entry.Open()) {
     667                  serializer.Serialize(run, entrystream, disposeStream: false);
     668                }
     669              }
     670            }
    647671          }
    648672        }
     
    764788      var target = GetTarget(((DoubleValue)problemInstance.Parameters["BestKnownQuality"]).Value, MinimumTarget.Value, Maximization);
    765789      return knowledgeBase.Where(x => ((StringValue)x.Parameters["Problem Name"]).Value == ((StringValue)problemInstance.Parameters["Problem Name"]).Value)
    766                           .GroupBy(x => algorithmId2AlgorithmInstanceMapping.GetByFirst(algorithmId2RunMapping.GetBySecond(x).Single()))
    767                           .ToDictionary(x => x.Key, x => ExpectedRuntimeHelper.CalculateErt(x.ToList(), "QualityPerEvaluations", target, Maximization).ExpectedRuntime);
     790                          .Select(x => {
     791                            IItem item = null;
     792                            if (x.Results.TryGetValue("QualityPerEvaluations", out item)) {
     793                              var idt = (IndexedDataTable<double>)item;
     794                              return Tuple.Create(x, idt.Rows.First().Values.AsEnumerable());
     795                            }
     796                            if (x.Results.TryGetValue("QualityPerClock", out item)) {
     797                              var idt = (IndexedDataTable<double>)item;
     798                              return Tuple.Create(x, idt.Rows.First().Values.AsEnumerable());
     799                            }
     800                            return null;
     801                          })
     802                          .Where(x => x != null)
     803                          .GroupBy(x => algorithmId2AlgorithmInstanceMapping.GetByFirst(algorithmId2RunMapping.GetBySecond(x.Item1).Single()))
     804                          .ToDictionary(x => x.Key, x => ExpectedRuntimeHelper.CalculateErt(x.Select(y => y.Item2), target, Maximization).ExpectedRuntime);
    768805    }
    769806
     
    772809      var target = GetTarget(((DoubleValue)problemInstance.Parameters["BestKnownQuality"]).Value, MinimumTarget.Value, Maximization);
    773810      return knowledgeBase.Where(x => ((StringValue)x.Parameters["Problem Name"]).Value == ((StringValue)problemInstance.Parameters["Problem Name"]).Value)
    774                           .GroupBy(x => algorithmId2AlgorithmInstanceMapping.GetByFirst(algorithmId2RunMapping.GetBySecond(x).Single()))
    775                           .ToDictionary(x => x.Key, x => Math.Log10(ExpectedRuntimeHelper.CalculateErt(x.ToList(), "QualityPerEvaluations", target, Maximization).ExpectedRuntime));
     811                          .Select(x => {
     812                            IItem item = null;
     813                            if (x.Results.TryGetValue("QualityPerEvaluations", out item)) {
     814                              var idt = (IndexedDataTable<double>)item;
     815                              return Tuple.Create(x, idt.Rows.First().Values.AsEnumerable());
     816                            }
     817                            if (x.Results.TryGetValue("QualityPerClock", out item)) {
     818                              var idt = (IndexedDataTable<double>)item;
     819                              return Tuple.Create(x, idt.Rows.First().Values.AsEnumerable());
     820                            }
     821                            return null;
     822                          })
     823                          .Where(x => x != null)
     824                          .GroupBy(x => algorithmId2AlgorithmInstanceMapping.GetByFirst(algorithmId2RunMapping.GetBySecond(x.Item1).Single()))
     825                          .ToDictionary(x => x.Key, x => Math.Log10(ExpectedRuntimeHelper.CalculateErt(x.Select(y => y.Item2), target, Maximization).ExpectedRuntime));
    776826    }
    777827
     
    871921        result[problemMap[pr.Key]] = new Dictionary<long, int>();
    872922
    873         var values = pr.GroupBy(x => algorithmId2RunMapping.GetBySecond(x).Single())
    874                        .ToDictionary(x => x.Key, x => Math.Log10(ExpectedRuntimeHelper.CalculateErt(x.ToList(), "QualityPerEvaluations", GetTarget(bkq, target, max), max).ExpectedRuntime));
     923        var values = pr.Select(x => {
     924                          IItem item = null;
     925                          if (x.Results.TryGetValue("QualityPerEvaluations", out item)) {
     926                            var idt = (IndexedDataTable<double>)item;
     927                            return Tuple.Create(x, idt.Rows.First().Values.AsEnumerable());
     928                          }
     929                          if (x.Results.TryGetValue("QualityPerClock", out item)) {
     930                            var idt = (IndexedDataTable<double>)item;
     931                            return Tuple.Create(x, idt.Rows.First().Values.AsEnumerable());
     932                          }
     933                          return null;
     934                        })
     935                       .Where(x => x != null)
     936                       .GroupBy(x => algorithmId2RunMapping.GetBySecond(x.Item1).Single())
     937                       .ToDictionary(x => x.Key, x => Math.Log10(ExpectedRuntimeHelper.CalculateErt(x.Select(y => y.Item2), GetTarget(bkq, target, max), max).ExpectedRuntime));
    875938        var ranks = ClusteringHelper<long>.Cluster(nClasses, values, x => double.IsInfinity(x.Value))
    876939          .GetByCluster().ToList();
  • branches/2457_ExpertSystem/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3.csproj

    r16728 r17175  
    111111  </ItemGroup>
    112112  <ItemGroup>
    113     <Compile Include="CPLEX\CplexSolver.cs" />
    114     <Compile Include="CPLEX\GQAP-FY.cs" />
    115     <Compile Include="CPLEX\GQAP-KB.cs" />
    116     <Compile Include="CPLEX\GQAPDataSource.cs" />
    117     <Compile Include="CPLEX\CplexContext.cs" />
    118113    <Compile Include="Evolutionary\ESContext.cs" />
    119114    <Compile Include="Evolutionary\ESGQAPSolution.cs" />
     
    135130    <Compile Include="LocalSearch\IteratedLS.cs" />
    136131    <Compile Include="LocalSearch\MultistartLS.cs" />
    137     <Compile Include="LocalSolverNet\GQAPListSolver.cs" />
    138     <Compile Include="LocalSolverNet\GQAPIntegerSolver.cs" />
    139     <Compile Include="LocalSolverNet\LocalSolverContext.cs" />
    140     <Compile Include="LocalSolverNet\GQAPBinarySolver.cs" />
    141132    <Compile Include="Plugin.cs" />
    142133    <Compile Include="Infrastructure\Contexts\SingleSolutionContext.cs" />
  • branches/2457_ExpertSystem/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs

    r15574 r17175  
    4040  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
    4141  [PluginDependency("HeuristicLab.Random", "3.3")]
    42   [PluginDependency("CPLEX Transport", "12.7.0")]
    43   [PluginDependency("LocalSolver 7.5 Transport", "7.5")]
     42  //[PluginDependency("CPLEX Transport", "12.7.0")]
     43  //[PluginDependency("LocalSolver 7.5 Transport", "7.5")]
    4444  public class Plugin : PluginBase {
    4545  }
  • branches/2457_ExpertSystem/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj

    r16728 r17175  
    117117    <Compile Include="Moves\ExhaustiveOneMoveGenerator.cs" />
    118118    <Compile Include="Operators\Crossovers\CordeauCrossover.cs" />
     119    <Compile Include="Operators\GQAPQualitySimilarityReducer.cs" />
    119120    <Compile Include="Operators\LocalImprovers\OneOptLocalSearch.cs" />
    120121    <Compile Include="SolutionCreators\SlackMinimizationSolutionCreator.cs" />
  • branches/2457_ExpertSystem/PerformanceComparison.sln

    r16955 r17175  
    3333EndProject
    3434Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WalkExporter", "WalkExporter\WalkExporter.csproj", "{EE6BD7D3-8012-4A5D-ABAE-356B3D1E4573}"
     35EndProject
     36Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj", "{C739E6D2-5680-4804-A810-8017DA0C238F}"
     37EndProject
     38Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Instances-3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Instances\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Instances-3.3.csproj", "{0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}"
     39EndProject
     40Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3.csproj", "{577239EC-7D7F-4505-A0A4-572E34010DBA}"
     41EndProject
     42Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.csproj", "{BFAAC00C-B884-458D-BD74-98C94BFAFA41}"
     43EndProject
     44Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.IntegerVectorEncoding-3.3", "HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj", "{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}"
    3545EndProject
    3646Global
     
    224234    {EE6BD7D3-8012-4A5D-ABAE-356B3D1E4573}.Release|x86.ActiveCfg = Release|Any CPU
    225235    {EE6BD7D3-8012-4A5D-ABAE-356B3D1E4573}.Release|x86.Build.0 = Release|Any CPU
     236    {C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     237    {C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|Any CPU.Build.0 = Debug|Any CPU
     238    {C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|x64.ActiveCfg = Debug|Any CPU
     239    {C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|x64.Build.0 = Debug|Any CPU
     240    {C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|x86.ActiveCfg = Debug|Any CPU
     241    {C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|x86.Build.0 = Debug|Any CPU
     242    {C739E6D2-5680-4804-A810-8017DA0C238F}.Release|Any CPU.ActiveCfg = Release|Any CPU
     243    {C739E6D2-5680-4804-A810-8017DA0C238F}.Release|Any CPU.Build.0 = Release|Any CPU
     244    {C739E6D2-5680-4804-A810-8017DA0C238F}.Release|x64.ActiveCfg = Release|Any CPU
     245    {C739E6D2-5680-4804-A810-8017DA0C238F}.Release|x64.Build.0 = Release|Any CPU
     246    {C739E6D2-5680-4804-A810-8017DA0C238F}.Release|x86.ActiveCfg = Release|Any CPU
     247    {C739E6D2-5680-4804-A810-8017DA0C238F}.Release|x86.Build.0 = Release|Any CPU
     248    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     249    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
     250    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Debug|x64.ActiveCfg = Debug|Any CPU
     251    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Debug|x64.Build.0 = Debug|Any CPU
     252    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Debug|x86.ActiveCfg = Debug|Any CPU
     253    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Debug|x86.Build.0 = Debug|Any CPU
     254    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
     255    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Release|Any CPU.Build.0 = Release|Any CPU
     256    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Release|x64.ActiveCfg = Release|Any CPU
     257    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Release|x64.Build.0 = Release|Any CPU
     258    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Release|x86.ActiveCfg = Release|Any CPU
     259    {0EB9AB8E-D0D2-4A63-9353-BD5CE57DBDFE}.Release|x86.Build.0 = Release|Any CPU
     260    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     261    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
     262    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Debug|x64.ActiveCfg = Debug|Any CPU
     263    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Debug|x64.Build.0 = Debug|Any CPU
     264    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Debug|x86.ActiveCfg = Debug|Any CPU
     265    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Debug|x86.Build.0 = Debug|Any CPU
     266    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
     267    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Release|Any CPU.Build.0 = Release|Any CPU
     268    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Release|x64.ActiveCfg = Release|Any CPU
     269    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Release|x64.Build.0 = Release|Any CPU
     270    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Release|x86.ActiveCfg = Release|Any CPU
     271    {577239EC-7D7F-4505-A0A4-572E34010DBA}.Release|x86.Build.0 = Release|Any CPU
     272    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     273    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|Any CPU.Build.0 = Debug|Any CPU
     274    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|x64.ActiveCfg = Debug|Any CPU
     275    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|x64.Build.0 = Debug|Any CPU
     276    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|x86.ActiveCfg = Debug|Any CPU
     277    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|x86.Build.0 = Debug|Any CPU
     278    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|Any CPU.ActiveCfg = Release|Any CPU
     279    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|Any CPU.Build.0 = Release|Any CPU
     280    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|x64.ActiveCfg = Release|Any CPU
     281    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|x64.Build.0 = Release|Any CPU
     282    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|x86.ActiveCfg = Release|Any CPU
     283    {BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|x86.Build.0 = Release|Any CPU
     284    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     285    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
     286    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Debug|x64.ActiveCfg = Debug|x64
     287    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Debug|x64.Build.0 = Debug|x64
     288    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Debug|x86.ActiveCfg = Debug|x86
     289    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Debug|x86.Build.0 = Debug|x86
     290    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
     291    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Release|Any CPU.Build.0 = Release|Any CPU
     292    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Release|x64.ActiveCfg = Release|x64
     293    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Release|x64.Build.0 = Release|x64
     294    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Release|x86.ActiveCfg = Release|x86
     295    {DDFB14DD-2A85-493C-A52D-E69729BBAEB0}.Release|x86.Build.0 = Release|x86
    226296  EndGlobalSection
    227297  GlobalSection(SolutionProperties) = preSolution
Note: See TracChangeset for help on using the changeset viewer.