Changeset 17786
- Timestamp:
- 12/01/20 09:19:42 (4 years ago)
- Location:
- branches/3040_VectorBasedGP
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3040_VectorBasedGP/HeuristicLab.DiffSharp/HeuristicLab.DiffSharp.csproj
r17759 r17786 68 68 <PrivateAssets>all</PrivateAssets> 69 69 </PackageReference> 70 <PackageReference Include="StrongNamer"> 71 <Version>0.2.5</Version> 72 </PackageReference> 70 73 </ItemGroup> 71 74 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
r17633 r17786 46 46 btnVectorOptimizeConstants.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree); 47 47 nudLearningRate.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree); 48 btnUnrollingVectorOptimizeConstants.Enabled = tree != null && VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.CanOptimizeConstants(tree); 49 btnDiffSharpOptimizeConstants.Enabled = tree != null && NonlinearLeastSquaresVectorConstantOptimizationEvaluator.CanOptimizeConstants(tree); 48 50 } 49 51 … … 102 104 } 103 105 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 104 169 internal class SynchronousProgress<T> : IProgress<T> { 105 170 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 110 110 <Private>False</Private> 111 111 </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> 112 116 <Reference Include="MathNet.Numerics"> 113 117 <HintPath>..\..\bin\MathNet.Numerics.dll</HintPath> … … 141 145 <Compile Include="Plugin.cs" /> 142 146 <Compile Include="SingleObjective\ConstantOptimizationAnalyzer.cs" /> 147 <Compile Include="SingleObjective\Evaluators\NonlinearLeastSquaresVectorConstantOptimizationEvaluator.cs" /> 143 148 <Compile Include="SingleObjective\Evaluators\VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.cs" /> 144 149 <Compile Include="SingleObjective\Evaluators\NonlinearLeastSquaresConstantOptimizationEvaluator.cs" /> -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/Plugin.cs.frame
r17725 r17786 43 43 [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")] 44 44 [PluginDependency("HeuristicLab.TensorFlowNet", "0.15.0")] 45 [PluginDependency("HeuristicLab.DiffSharp", "0.7.7")] 45 46 public class HeuristicLabProblemsDataAnalysisSymbolicRegressionPlugin : PluginBase { 46 47 } -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionConstantOptimizationEvaluator.cs
r17472 r17786 42 42 private const string FunctionEvaluationsResultParameterName = "Constants Optimization Function Evaluations"; 43 43 private const string GradientEvaluationsResultParameterName = "Constants Optimization Gradient Evaluations"; 44 private const string HessianEvaluationsResultParameterName = "Constants Optimization Hessian Evaluations"; 44 45 private const string CountEvaluationsParameterName = "Count Function and Gradient Evaluations"; 45 46 … … 66 67 public IResultParameter<IntValue> GradientEvaluationsResultParameter { 67 68 get { return (IResultParameter<IntValue>)Parameters[GradientEvaluationsResultParameterName]; } 69 } 70 public IResultParameter<IntValue> HessianEvaluationsResultParameter { 71 get { return (IResultParameter<IntValue>)Parameters[HessianEvaluationsResultParameterName]; } 68 72 } 69 73 public IFixedValueParameter<BoolValue> CountEvaluationsParameter { … … 116 120 Parameters.Add(new ResultParameter<IntValue>(FunctionEvaluationsResultParameterName, "The number of function evaluations performed by the constants optimization evaluator", "Results", new IntValue())); 117 121 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())); 118 123 } 119 124 … … 132 137 if (!Parameters.ContainsKey(GradientEvaluationsResultParameterName)) 133 138 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())); 134 141 } 135 142 … … 164 171 FunctionEvaluationsResultParameter.ActualValue.Value += counter.FunctionEvaluations; 165 172 GradientEvaluationsResultParameter.ActualValue.Value += counter.GradientEvaluations; 173 HessianEvaluationsResultParameter.ActualValue.Value += counter.HessianEvaluations; 166 174 } 167 175 } … … 184 192 FunctionEvaluationsResultParameter.ExecutionContext = context; 185 193 GradientEvaluationsResultParameter.ExecutionContext = context; 194 HessianEvaluationsResultParameter.ExecutionContext = context; 186 195 187 196 // Pearson R² evaluator is used on purpose instead of the const-opt evaluator, … … 195 204 FunctionEvaluationsResultParameter.ExecutionContext = null; 196 205 GradientEvaluationsResultParameter.ExecutionContext = null; 206 HessianEvaluationsResultParameter.ExecutionContext = null; 197 207 198 208 return r2; … … 206 216 public int FunctionEvaluations = 0; 207 217 public int GradientEvaluations = 0; 218 public int HessianEvaluations = 0; 208 219 } 209 220 } -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.Designer.cs
r17633 r17786 57 57 this.btnVectorOptimizeConstants = new System.Windows.Forms.Button(); 58 58 this.nudLearningRate = new System.Windows.Forms.NumericUpDown(); 59 this.btnUnrollingVectorOptimizeConstants = new System.Windows.Forms.Button(); 60 this.btnDiffSharpOptimizeConstants = new System.Windows.Forms.Button(); 59 61 this.grpViewHost = new System.Windows.Forms.GroupBox(); 60 62 this.toolTip = new System.Windows.Forms.ToolTip(this.components); … … 131 133 // flowLayoutPanel 132 134 // 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) 134 136 | System.Windows.Forms.AnchorStyles.Right))); 135 137 this.flowLayoutPanel.Controls.Add(this.btnSimplify); … … 137 139 this.flowLayoutPanel.Controls.Add(this.btnVectorOptimizeConstants); 138 140 this.flowLayoutPanel.Controls.Add(this.nudLearningRate); 141 this.flowLayoutPanel.Controls.Add(this.btnUnrollingVectorOptimizeConstants); 142 this.flowLayoutPanel.Controls.Add(this.btnDiffSharpOptimizeConstants); 139 143 this.flowLayoutPanel.Location = new System.Drawing.Point(6, 370); 140 144 this.flowLayoutPanel.Name = "flowLayoutPanel"; … … 182 186 this.btnVectorOptimizeConstants.Size = new System.Drawing.Size(107, 24); 183 187 this.btnVectorOptimizeConstants.TabIndex = 3; 184 this.btnVectorOptimizeConstants.Text = " Vector-Optimize";188 this.btnVectorOptimizeConstants.Text = "Optimize (TensorFlow)"; 185 189 this.btnVectorOptimizeConstants.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 186 190 this.toolTip.SetToolTip(this.btnVectorOptimizeConstants, "Optimizes the numerical constants of the model. \r\nIf the algorithm converges, opt" + … … 211 215 0, 212 216 -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); 213 245 // 214 246 // grpViewHost … … 276 308 protected System.Windows.Forms.Button btnVectorOptimizeConstants; 277 309 protected System.Windows.Forms.NumericUpDown nudLearningRate; 310 protected System.Windows.Forms.Button btnUnrollingVectorOptimizeConstants; 311 protected System.Windows.Forms.Button btnDiffSharpOptimizeConstants; 278 312 } 279 313 } -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r17633 r17786 135 135 btnVectorOptimizeConstants.Enabled = true; 136 136 nudLearningRate.Enabled = true; 137 btnUnrollingVectorOptimizeConstants.Enabled = true; 138 btnDiffSharpOptimizeConstants.Enabled = true; 137 139 btnSimplify.Enabled = true; 138 140 treeStatusValue.Visible = false; … … 141 143 btnVectorOptimizeConstants.Enabled = false; 142 144 nudLearningRate.Enabled = false; 145 btnUnrollingVectorOptimizeConstants.Enabled = false; 146 btnDiffSharpOptimizeConstants.Enabled = false; 143 147 btnSimplify.Enabled = false; 144 148 treeStatusValue.Visible = true; … … 232 236 } 233 237 234 protected abstract void UpdateModel(ISymbolicExpressionTree tree);238 protected virtual void UpdateModel(ISymbolicExpressionTree tree) { } 235 239 236 240 protected virtual ISymbolicExpressionTree OptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) { … … 238 242 } 239 243 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) { 240 250 return tree; 241 251 } … … 364 374 } 365 375 } 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 } 366 410 } 367 411 } -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r17726 r17786 113 113 <Private>False</Private> 114 114 </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> 115 119 <Reference Include="HEAL.Attic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 116 120 <SpecificVersion>False</SpecificVersion> … … 161 165 </Compile> 162 166 <Compile Include="Converters\LinearModelToTreeConverter.cs" /> 167 <Compile Include="Converters\TreeToDiffSharpConverter.cs" /> 163 168 <Compile Include="Converters\VectorUnrollingTreeToAutoDiffTermConverter.cs" /> 164 169 <Compile Include="Converters\VectorTreeSimplifier.cs" /> -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeVectorInterpreter.cs
r17726 r17786 469 469 (v1, v2) => v1 - v2); 470 470 } 471 if (currentInstr.nArguments == 1) 472 cur = FunctionApply(cur, 473 s => -s, 474 v => -v); 471 475 TraceEvaluation(currentInstr, cur); 472 476 return cur; … … 497 501 (v1, v2) => v1 / v2); 498 502 } 503 if (currentInstr.nArguments == 1) 504 cur = FunctionApply(cur, 505 s => 1 / s, 506 v => 1 / v); 499 507 TraceEvaluation(currentInstr, cur); 500 508 return cur; -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Plugin.cs.frame
r17725 r17786 49 49 [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")] 50 50 [PluginDependency("HeuristicLab.TensorFlowNet", "0.15.0")] 51 [PluginDependency("HeuristicLab.DiffSharp", "0.7.7")] 51 52 public class HeuristicLabProblemsDataAnalysisSymbolicPlugin : PluginBase { 52 53 } -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
r17449 r17786 406 406 var value = variableValues[variableNames[columnIndex]][rowIndex]; 407 407 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))}]"; 412 409 } 413 410 -
branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
r17785 r17786 24 24 <WarningLevel>4</WarningLevel> 25 25 <Prefer32Bit>false</Prefer32Bit> 26 <LangVersion> 7</LangVersion>26 <LangVersion>default</LangVersion> 27 27 </PropertyGroup> 28 28 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> … … 34 34 <WarningLevel>4</WarningLevel> 35 35 <Prefer32Bit>false</Prefer32Bit> 36 <LangVersion> 7</LangVersion>36 <LangVersion>default</LangVersion> 37 37 </PropertyGroup> 38 38 <PropertyGroup> … … 56 56 <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> 57 57 <Prefer32Bit>false</Prefer32Bit> 58 <LangVersion> 7</LangVersion>58 <LangVersion>default</LangVersion> 59 59 </PropertyGroup> 60 60 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> … … 74 74 <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules> 75 75 <Prefer32Bit>false</Prefer32Bit> 76 <LangVersion> 7</LangVersion>76 <LangVersion>default</LangVersion> 77 77 </PropertyGroup> 78 78 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> … … 90 90 <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> 91 91 <Prefer32Bit>false</Prefer32Bit> 92 <LangVersion> 7</LangVersion>92 <LangVersion>default</LangVersion> 93 93 </PropertyGroup> 94 94 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> … … 108 108 <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules> 109 109 <Prefer32Bit>false</Prefer32Bit> 110 <LangVersion> 7</LangVersion>110 <LangVersion>default</LangVersion> 111 111 </PropertyGroup> 112 112 <ItemGroup>
Note: See TracChangeset
for help on using the changeset viewer.