Changeset 17786


Ignore:
Timestamp:
12/01/20 09:19:42 (4 months ago)
Author:
pfleck
Message:

#3040 Worked in DiffSharp for constant-opt.

Location:
branches/3040_VectorBasedGP
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • branches/3040_VectorBasedGP/HeuristicLab.DiffSharp/HeuristicLab.DiffSharp.csproj

    r17759 r17786  
    6868      <PrivateAssets>all</PrivateAssets>
    6969    </PackageReference>
     70    <PackageReference Include="StrongNamer">
     71      <Version>0.2.5</Version>
     72    </PackageReference>
    7073  </ItemGroup>
    7174  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs

    r17633 r17786  
    4646      btnVectorOptimizeConstants.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree);
    4747      nudLearningRate.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree);
     48      btnUnrollingVectorOptimizeConstants.Enabled = tree != null && VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.CanOptimizeConstants(tree);
     49      btnDiffSharpOptimizeConstants.Enabled = tree != null && NonlinearLeastSquaresVectorConstantOptimizationEvaluator.CanOptimizeConstants(tree);
    4850    }
    4951
     
    102104    }
    103105
     106    protected override ISymbolicExpressionTree UnrollingVectorOptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
     107      const int constOptIterations = 50;
     108      const int maxRepetitions = 100;
     109      const double minimumImprovement = 1e-10;
     110      var regressionProblemData = Content.ProblemData;
     111      var model = Content.Model;
     112      progress.CanBeStopped = true;
     113      double prevResult = 0.0, improvement = 0.0;
     114      var result = 0.0;
     115      int reps = 0;
     116      var interpreter = new SymbolicDataAnalysisExpressionTreeVectorInterpreter();
     117
     118      do {
     119        prevResult = result;
     120        tree = VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.OptimizeTree(
     121          tree, interpreter,
     122          regressionProblemData, regressionProblemData.TrainingIndices,
     123          applyLinearScaling: true, maxIterations: constOptIterations, updateVariableWeights: true,
     124          cancellationToken: cancellationToken, iterationCallback: (args, func, obj) => {
     125            double newProgressValue = progress.ProgressValue + (1.0 / (constOptIterations + 2) / maxRepetitions); // (constOptIterations + 2) iterations are reported
     126            progress.ProgressValue = Math.Min(newProgressValue, 1.0);
     127          });
     128        result = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(model.Interpreter, tree,
     129          model.LowerEstimationLimit, model.UpperEstimationLimit, regressionProblemData, regressionProblemData.TrainingIndices, applyLinearScaling: true);
     130        reps++;
     131        improvement = result - prevResult;
     132      } while (improvement > minimumImprovement && reps < maxRepetitions &&
     133               progress.ProgressState != ProgressState.StopRequested &&
     134               progress.ProgressState != ProgressState.CancelRequested);
     135      return tree;
     136    }
     137
     138
     139    protected override ISymbolicExpressionTree DiffSharpVectorOptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
     140      const int constOptIterations = 50;
     141      const int maxRepetitions = 100;
     142      const double minimumImprovement = 1e-10;
     143      var regressionProblemData = Content.ProblemData;
     144      var model = Content.Model;
     145      progress.CanBeStopped = true;
     146      double prevResult = 0.0, improvement = 0.0;
     147      var result = 0.0;
     148      int reps = 0;
     149
     150      do {
     151        prevResult = result;
     152        tree = NonlinearLeastSquaresVectorConstantOptimizationEvaluator.OptimizeTree(tree, regressionProblemData, regressionProblemData.TrainingIndices,
     153          applyLinearScaling: true, maxIterations: constOptIterations, updateVariableWeights: true,
     154          cancellationToken: cancellationToken, iterationCallback: (args, func, obj) => {
     155            double newProgressValue = progress.ProgressValue + (1.0 / (constOptIterations + 2) / maxRepetitions); // (constOptIterations + 2) iterations are reported
     156            progress.ProgressValue = Math.Min(newProgressValue, 1.0);
     157          });
     158        result = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(model.Interpreter, tree,
     159          model.LowerEstimationLimit, model.UpperEstimationLimit, regressionProblemData, regressionProblemData.TrainingIndices, applyLinearScaling: true);
     160        reps++;
     161        improvement = result - prevResult;
     162      } while (improvement > minimumImprovement && reps < maxRepetitions &&
     163               progress.ProgressState != ProgressState.StopRequested &&
     164               progress.ProgressState != ProgressState.CancelRequested);
     165      return tree;
     166    }
     167
     168
    104169    internal class SynchronousProgress<T> : IProgress<T> {
    105170      private readonly Action<T> callback;
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj

    r17726 r17786  
    110110      <Private>False</Private>
    111111    </Reference>
     112    <Reference Include="DiffSharp, Version=0.7.7.0, Culture=neutral, processorArchitecture=AMD64">
     113      <SpecificVersion>False</SpecificVersion>
     114      <HintPath>..\..\bin\DiffSharp.dll</HintPath>
     115    </Reference>
    112116    <Reference Include="MathNet.Numerics">
    113117      <HintPath>..\..\bin\MathNet.Numerics.dll</HintPath>
     
    141145    <Compile Include="Plugin.cs" />
    142146    <Compile Include="SingleObjective\ConstantOptimizationAnalyzer.cs" />
     147    <Compile Include="SingleObjective\Evaluators\NonlinearLeastSquaresVectorConstantOptimizationEvaluator.cs" />
    143148    <Compile Include="SingleObjective\Evaluators\VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.cs" />
    144149    <Compile Include="SingleObjective\Evaluators\NonlinearLeastSquaresConstantOptimizationEvaluator.cs" />
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/Plugin.cs.frame

    r17725 r17786  
    4343  [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")]
    4444  [PluginDependency("HeuristicLab.TensorFlowNet", "0.15.0")]
     45  [PluginDependency("HeuristicLab.DiffSharp", "0.7.7")]
    4546  public class HeuristicLabProblemsDataAnalysisSymbolicRegressionPlugin : PluginBase {
    4647  }
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionConstantOptimizationEvaluator.cs

    r17472 r17786  
    4242    private const string FunctionEvaluationsResultParameterName = "Constants Optimization Function Evaluations";
    4343    private const string GradientEvaluationsResultParameterName = "Constants Optimization Gradient Evaluations";
     44    private const string HessianEvaluationsResultParameterName = "Constants Optimization Hessian Evaluations";
    4445    private const string CountEvaluationsParameterName = "Count Function and Gradient Evaluations";
    4546
     
    6667    public IResultParameter<IntValue> GradientEvaluationsResultParameter {
    6768      get { return (IResultParameter<IntValue>)Parameters[GradientEvaluationsResultParameterName]; }
     69    }
     70    public IResultParameter<IntValue> HessianEvaluationsResultParameter {
     71      get { return (IResultParameter<IntValue>)Parameters[HessianEvaluationsResultParameterName]; }
    6872    }
    6973    public IFixedValueParameter<BoolValue> CountEvaluationsParameter {
     
    116120      Parameters.Add(new ResultParameter<IntValue>(FunctionEvaluationsResultParameterName, "The number of function evaluations performed by the constants optimization evaluator", "Results", new IntValue()));
    117121      Parameters.Add(new ResultParameter<IntValue>(GradientEvaluationsResultParameterName, "The number of gradient evaluations performed by the constants optimization evaluator", "Results", new IntValue()));
     122      Parameters.Add(new ResultParameter<IntValue>(HessianEvaluationsResultParameterName, "The number of hessian evaluations performed by the constants optimization evaluator", "Results", new IntValue()));
    118123    }
    119124
     
    132137      if (!Parameters.ContainsKey(GradientEvaluationsResultParameterName))
    133138        Parameters.Add(new ResultParameter<IntValue>(GradientEvaluationsResultParameterName, "The number of gradient evaluations performed by the constants optimization evaluator", "Results", new IntValue()));
     139      if (!Parameters.ContainsKey(HessianEvaluationsResultParameterName))
     140        Parameters.Add(new ResultParameter<IntValue>(HessianEvaluationsResultParameterName, "The number of hessian evaluations performed by the constants optimization evaluator", "Results", new IntValue()));
    134141    }
    135142
     
    164171            FunctionEvaluationsResultParameter.ActualValue.Value += counter.FunctionEvaluations;
    165172            GradientEvaluationsResultParameter.ActualValue.Value += counter.GradientEvaluations;
     173            HessianEvaluationsResultParameter.ActualValue.Value += counter.HessianEvaluations;
    166174          }
    167175        }
     
    184192      FunctionEvaluationsResultParameter.ExecutionContext = context;
    185193      GradientEvaluationsResultParameter.ExecutionContext = context;
     194      HessianEvaluationsResultParameter.ExecutionContext = context;
    186195
    187196      // Pearson R² evaluator is used on purpose instead of the const-opt evaluator,
     
    195204      FunctionEvaluationsResultParameter.ExecutionContext = null;
    196205      GradientEvaluationsResultParameter.ExecutionContext = null;
     206      HessianEvaluationsResultParameter.ExecutionContext = null;
    197207
    198208      return r2;
     
    206216      public int FunctionEvaluations = 0;
    207217      public int GradientEvaluations = 0;
     218      public int HessianEvaluations = 0;
    208219    }
    209220  }
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.Designer.cs

    r17633 r17786  
    5757      this.btnVectorOptimizeConstants = new System.Windows.Forms.Button();
    5858      this.nudLearningRate = new System.Windows.Forms.NumericUpDown();
     59      this.btnUnrollingVectorOptimizeConstants = new System.Windows.Forms.Button();
     60      this.btnDiffSharpOptimizeConstants = new System.Windows.Forms.Button();
    5961      this.grpViewHost = new System.Windows.Forms.GroupBox();
    6062      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
     
    131133      // flowLayoutPanel
    132134      //
    133       this.flowLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
     135      this.flowLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
    134136            | System.Windows.Forms.AnchorStyles.Right)));
    135137      this.flowLayoutPanel.Controls.Add(this.btnSimplify);
     
    137139      this.flowLayoutPanel.Controls.Add(this.btnVectorOptimizeConstants);
    138140      this.flowLayoutPanel.Controls.Add(this.nudLearningRate);
     141      this.flowLayoutPanel.Controls.Add(this.btnUnrollingVectorOptimizeConstants);
     142      this.flowLayoutPanel.Controls.Add(this.btnDiffSharpOptimizeConstants);
    139143      this.flowLayoutPanel.Location = new System.Drawing.Point(6, 370);
    140144      this.flowLayoutPanel.Name = "flowLayoutPanel";
     
    182186      this.btnVectorOptimizeConstants.Size = new System.Drawing.Size(107, 24);
    183187      this.btnVectorOptimizeConstants.TabIndex = 3;
    184       this.btnVectorOptimizeConstants.Text = "Vector-Optimize";
     188      this.btnVectorOptimizeConstants.Text = "Optimize (TensorFlow)";
    185189      this.btnVectorOptimizeConstants.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
    186190      this.toolTip.SetToolTip(this.btnVectorOptimizeConstants, "Optimizes the numerical constants of the model. \r\nIf the algorithm converges, opt" +
     
    211215            0,
    212216            -2147483648});
     217      //
     218      // btnUnrollingVectorOptimizeConstants
     219      //
     220      this.btnUnrollingVectorOptimizeConstants.AutoSize = true;
     221      this.btnUnrollingVectorOptimizeConstants.Enabled = false;
     222      this.btnUnrollingVectorOptimizeConstants.Image = HeuristicLab.Common.Resources.VSImageLibrary.Performance;
     223      this.btnUnrollingVectorOptimizeConstants.Location = new System.Drawing.Point(175, 3);
     224      this.btnUnrollingVectorOptimizeConstants.Name = "btnUnrollingVectorOptimizeConstants";
     225      this.btnUnrollingVectorOptimizeConstants.Size = new System.Drawing.Size(107, 24);
     226      this.btnUnrollingVectorOptimizeConstants.TabIndex = 3;
     227      this.btnUnrollingVectorOptimizeConstants.Text = "Unrolled-Vector-Optimize";
     228      this.btnUnrollingVectorOptimizeConstants.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
     229      this.btnUnrollingVectorOptimizeConstants.UseVisualStyleBackColor = true;
     230      this.btnUnrollingVectorOptimizeConstants.Click += new System.EventHandler(this.btnUnrollingVectorOptimizeConstants_Click);
     231      //
     232      // btnDiffSharpOptimizeConstants
     233      //
     234      this.btnDiffSharpOptimizeConstants.AutoSize = true;
     235      this.btnDiffSharpOptimizeConstants.Enabled = false;
     236      this.btnDiffSharpOptimizeConstants.Image = HeuristicLab.Common.Resources.VSImageLibrary.Performance;
     237      this.btnDiffSharpOptimizeConstants.Location = new System.Drawing.Point(89, 3);
     238      this.btnDiffSharpOptimizeConstants.Name = "btnDiffSharpOptimizeConstants";
     239      this.btnDiffSharpOptimizeConstants.Size = new System.Drawing.Size(80, 24);
     240      this.btnDiffSharpOptimizeConstants.TabIndex = 2;
     241      this.btnDiffSharpOptimizeConstants.Text = "Optimize (DiffSharp)";
     242      this.btnDiffSharpOptimizeConstants.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
     243      this.btnDiffSharpOptimizeConstants.UseVisualStyleBackColor = true;
     244      this.btnDiffSharpOptimizeConstants.Click += new System.EventHandler(this.btnDiffSharpOptimizeConstants_Click);
    213245      //
    214246      // grpViewHost
     
    276308    protected System.Windows.Forms.Button btnVectorOptimizeConstants;
    277309    protected System.Windows.Forms.NumericUpDown nudLearningRate;
     310    protected System.Windows.Forms.Button btnUnrollingVectorOptimizeConstants;
     311    protected System.Windows.Forms.Button btnDiffSharpOptimizeConstants;
    278312  }
    279313}
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs

    r17633 r17786  
    135135        btnVectorOptimizeConstants.Enabled = true;
    136136        nudLearningRate.Enabled = true;
     137        btnUnrollingVectorOptimizeConstants.Enabled = true;
     138        btnDiffSharpOptimizeConstants.Enabled = true;
    137139        btnSimplify.Enabled = true;
    138140        treeStatusValue.Visible = false;
     
    141143        btnVectorOptimizeConstants.Enabled = false;
    142144        nudLearningRate.Enabled = false;
     145        btnUnrollingVectorOptimizeConstants.Enabled = false;
     146        btnDiffSharpOptimizeConstants.Enabled = false;
    143147        btnSimplify.Enabled = false;
    144148        treeStatusValue.Visible = true;
     
    232236    }
    233237
    234     protected abstract void UpdateModel(ISymbolicExpressionTree tree);
     238    protected virtual void UpdateModel(ISymbolicExpressionTree tree) { }
    235239
    236240    protected virtual ISymbolicExpressionTree OptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
     
    238242    }
    239243    protected virtual ISymbolicExpressionTree VectorOptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
     244      return tree;
     245    }
     246    protected virtual ISymbolicExpressionTree UnrollingVectorOptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
     247      return tree;
     248    }
     249    protected virtual ISymbolicExpressionTree DiffSharpVectorOptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
    240250      return tree;
    241251    }
     
    364374      }
    365375    }
     376
     377    private async void btnUnrollingVectorOptimizeConstants_Click(object sender, EventArgs e) {
     378      progress.Start("Optimizing Constants ...");
     379      cancellationTokenSource = new CancellationTokenSource();
     380      progress.CanBeStopped = true;
     381      try {
     382        var tree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone();
     383
     384        var newTree = await Task.Run(() => UnrollingVectorOptimizeConstants(tree, cancellationTokenSource.Token, progress), cancellationTokenSource.Token);
     385        try {
     386          await Task.Delay(300, cancellationTokenSource.Token); // wait for progressbar to finish animation
     387        } catch (OperationCanceledException) { }
     388        UpdateModel(newTree); // triggers progress.Finish after calculating the node impacts when model is changed
     389      } catch {
     390        progress.Finish();
     391      }
     392    }
     393
     394    private async void btnDiffSharpOptimizeConstants_Click(object sender, EventArgs e) {
     395      progress.Start("Optimizing Constants ...");
     396      cancellationTokenSource = new CancellationTokenSource();
     397      progress.CanBeStopped = true;
     398      try {
     399        var tree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone();
     400
     401        var newTree = await Task.Run(() => DiffSharpVectorOptimizeConstants(tree, cancellationTokenSource.Token, progress), cancellationTokenSource.Token);
     402        try {
     403          await Task.Delay(300, cancellationTokenSource.Token); // wait for progressbar to finish animation
     404        } catch (OperationCanceledException) { }
     405        UpdateModel(newTree); // triggers progress.Finish after calculating the node impacts when model is changed
     406      } catch {
     407        progress.Finish();
     408      }
     409    }
    366410  }
    367411}
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj

    r17726 r17786  
    113113      <Private>False</Private>
    114114    </Reference>
     115    <Reference Include="DiffSharp, Version=0.7.7.0, Culture=neutral, processorArchitecture=AMD64">
     116      <SpecificVersion>False</SpecificVersion>
     117      <HintPath>..\..\bin\DiffSharp.dll</HintPath>
     118    </Reference>
    115119    <Reference Include="HEAL.Attic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    116120      <SpecificVersion>False</SpecificVersion>
     
    161165    </Compile>
    162166    <Compile Include="Converters\LinearModelToTreeConverter.cs" />
     167    <Compile Include="Converters\TreeToDiffSharpConverter.cs" />
    163168    <Compile Include="Converters\VectorUnrollingTreeToAutoDiffTermConverter.cs" />
    164169    <Compile Include="Converters\VectorTreeSimplifier.cs" />
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeVectorInterpreter.cs

    r17726 r17786  
    469469                (v1, v2) => v1 - v2);
    470470            }
     471            if (currentInstr.nArguments == 1)
     472              cur = FunctionApply(cur,
     473                s => -s,
     474                v => -v);
    471475            TraceEvaluation(currentInstr, cur);
    472476            return cur;
     
    497501                (v1, v2) => v1 / v2);
    498502            }
     503            if (currentInstr.nArguments == 1)
     504              cur = FunctionApply(cur,
     505                s => 1 / s,
     506                v => 1 / v);
    499507            TraceEvaluation(currentInstr, cur);
    500508            return cur;
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Plugin.cs.frame

    r17725 r17786  
    4949  [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")]
    5050  [PluginDependency("HeuristicLab.TensorFlowNet", "0.15.0")]
     51  [PluginDependency("HeuristicLab.DiffSharp", "0.7.7")]
    5152  public class HeuristicLabProblemsDataAnalysisSymbolicPlugin : PluginBase {
    5253  }
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs

    r17449 r17786  
    406406      var value = variableValues[variableNames[columnIndex]][rowIndex];
    407407      if (value is DoubleVector vector) {
    408         return $"[{vector.ToVectorString(10, 80)}]";
    409         //const int maxCount = 10;
    410         //string extension = vector.Count > maxCount ? ", ..." : "";
    411         //return $"[{string.Join(", ", vector.Cast<object>().Take(Math.Min(vector.Count, maxCount)))}{extension}]";
     408        return $"[{vector.ToVectorString(10, 80, "..", " ", " ", d => d.ToString("G6", null))}]";
    412409      }
    413410
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj

    r17785 r17786  
    2424    <WarningLevel>4</WarningLevel>
    2525    <Prefer32Bit>false</Prefer32Bit>
    26     <LangVersion>7</LangVersion>
     26    <LangVersion>default</LangVersion>
    2727  </PropertyGroup>
    2828  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     
    3434    <WarningLevel>4</WarningLevel>
    3535    <Prefer32Bit>false</Prefer32Bit>
    36     <LangVersion>7</LangVersion>
     36    <LangVersion>default</LangVersion>
    3737  </PropertyGroup>
    3838  <PropertyGroup>
     
    5656    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
    5757    <Prefer32Bit>false</Prefer32Bit>
    58     <LangVersion>7</LangVersion>
     58    <LangVersion>default</LangVersion>
    5959  </PropertyGroup>
    6060  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
     
    7474    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
    7575    <Prefer32Bit>false</Prefer32Bit>
    76     <LangVersion>7</LangVersion>
     76    <LangVersion>default</LangVersion>
    7777  </PropertyGroup>
    7878  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
     
    9090    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
    9191    <Prefer32Bit>false</Prefer32Bit>
    92     <LangVersion>7</LangVersion>
     92    <LangVersion>default</LangVersion>
    9393  </PropertyGroup>
    9494  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
     
    108108    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
    109109    <Prefer32Bit>false</Prefer32Bit>
    110     <LangVersion>7</LangVersion>
     110    <LangVersion>default</LangVersion>
    111111  </PropertyGroup>
    112112  <ItemGroup>
Note: See TracChangeset for help on using the changeset viewer.