Index: trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 8015)
+++ trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 8016)
@@ -144,4 +144,6 @@
     [Storable]
     private QualityAnalyzer qualityAnalyzer;
+    [Storable]
+    private SingleValueAnalyzer temperatureAnalyzer;
     #endregion
 
@@ -150,4 +152,12 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      if (temperatureAnalyzer == null) {
+        temperatureAnalyzer = new SingleValueAnalyzer();
+        temperatureAnalyzer.Name = "TemperatureAnalyzer";
+        temperatureAnalyzer.ResultsParameter.ActualName = "Results";
+        temperatureAnalyzer.ValueParameter.ActualName = "Temperature";
+        temperatureAnalyzer.ValuesParameter.ActualName = "Temperature Chart";
+        Analyzer.Operators.Add(temperatureAnalyzer);
+      }
       Initialize();
     }
@@ -155,4 +165,5 @@
       : base(original, cloner) {
       qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
+      temperatureAnalyzer = cloner.Clone(original.temperatureAnalyzer);
       Initialize();
     }
@@ -205,4 +216,5 @@
       mainLoop.AnnealingOperatorParameter.ActualName = AnnealingOperatorParameter.Name;
       mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
+      mainLoop.TemperatureParameter.ActualName = "Temperature";
       mainLoop.StartTemperatureParameter.ActualName = StartTemperatureParameter.Name;
       mainLoop.EndTemperatureParameter.ActualName = EndTemperatureParameter.Name;
@@ -218,4 +230,6 @@
 
       qualityAnalyzer = new QualityAnalyzer();
+      temperatureAnalyzer = new SingleValueAnalyzer();
+      temperatureAnalyzer.Name = "TemperatureAnalyzer";
       ParameterizeAnalyzers();
       UpdateAnalyzers();
@@ -348,4 +362,7 @@
         qualityAnalyzer.QualityParameter.Hidden = false;
         qualityAnalyzer.BestKnownQualityParameter.Hidden = false;
+        temperatureAnalyzer.ResultsParameter.ActualName = "Results";
+        temperatureAnalyzer.ValueParameter.ActualName = "Temperature";
+        temperatureAnalyzer.ValuesParameter.ActualName = "Temperature Chart";
       }
     }
@@ -470,4 +487,5 @@
       }
       Analyzer.Operators.Add(qualityAnalyzer, qualityAnalyzer.EnabledByDefault);
+      Analyzer.Operators.Add(temperatureAnalyzer, temperatureAnalyzer.EnabledByDefault);
     }
     private SimulatedAnnealingMainLoop FindMainLoop(IOperator start) {
Index: trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 8015)
+++ trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 8016)
@@ -51,4 +51,7 @@
       get { return (LookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
     }
+    public ILookupParameter<DoubleValue> TemperatureParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Temperature"]; }
+    }
     public ValueLookupParameter<DoubleValue> StartTemperatureParameter {
       get { return (ValueLookupParameter<DoubleValue>)Parameters["StartTemperature"]; }
@@ -109,4 +112,5 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The value which represents the quality of a move."));
+      Parameters.Add(new LookupParameter<DoubleValue>("Temperature", "The current temperature."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("StartTemperature", "The initial temperature."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("EndTemperature", "The end temperature."));
@@ -126,5 +130,5 @@
 
       #region Create operators
-      VariableCreator variableCreator = new VariableCreator();
+      Assigner temperatureInitializer = new Assigner();
       ResultsCollector resultsCollector1 = new ResultsCollector();
       SubScopesProcessor subScopesProcessor0 = new SubScopesProcessor();
@@ -148,8 +152,8 @@
       ConditionalBranch iterationsTermination = new ConditionalBranch();
 
-      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Temperature", new DoubleValue(double.MaxValue)));
+      temperatureInitializer.LeftSideParameter.ActualName = TemperatureParameter.ActualName;
+      temperatureInitializer.RightSideParameter.ActualName = StartTemperatureParameter.Name;
 
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>(IterationsParameter.Name));
-      resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Temperature"));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
@@ -199,6 +203,6 @@
 
       #region Create operator graph
-      OperatorGraph.InitialOperator = variableCreator;
-      variableCreator.Successor = resultsCollector1;
+      OperatorGraph.InitialOperator = temperatureInitializer;
+      temperatureInitializer.Successor = resultsCollector1;
       resultsCollector1.Successor = subScopesProcessor0;
       subScopesProcessor0.Operators.Add(analyzer1);
@@ -237,4 +241,6 @@
       if (!Parameters.ContainsKey("Iterations"))
         Parameters.Add(new LookupParameter<IntValue>("Iterations", "The number of iterations."));
+      if (!Parameters.ContainsKey("Temperature"))
+        Parameters.Add(new LookupParameter<DoubleValue>("Temperature", "The current temperature."));
       #endregion
     }
Index: trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 8015)
+++ trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 8016)
@@ -148,4 +148,5 @@
     <Compile Include="QualityAnalysis\QualityDistributionAnalyzer.cs" />
     <Compile Include="QualityAnalysis\ScaledQualityDifferenceAnalyzer.cs" />
+    <Compile Include="ValueAnalysis\SingleValueAnalyzer.cs" />
     <Compile Include="ValueAnalysis\MinAverageMaxValueAnalyzer.cs" />
     <Compile Include="ValueAnalysis\MinAverageMaxValueCalculator.cs" />
Index: trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalysis/SingleValueAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalysis/SingleValueAnalyzer.cs	(revision 8016)
+++ trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalysis/SingleValueAnalyzer.cs	(revision 8016)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Analysis {
+  /// <summary>
+  /// An operator which analyzes a value in the scope tree (current scope and parents).
+  /// </summary>
+  [Item("SingleValueAnalyzer", "An operator which analyzes a value in the scope tree (current scope and parents).")]
+  [StorableClass]
+  public sealed class SingleValueAnalyzer : AlgorithmOperator, IAnalyzer {
+    #region Parameter properties
+    public ILookupParameter<DoubleValue> ValueParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Value"]; }
+    }
+    public IValueLookupParameter<DataTable> ValuesParameter {
+      get { return (IValueLookupParameter<DataTable>)Parameters["Values"]; }
+    }
+    public IValueLookupParameter<VariableCollection> ResultsParameter {
+      get { return (IValueLookupParameter<VariableCollection>)Parameters["Results"]; }
+    }
+    #endregion
+
+    #region Properties
+    public bool EnabledByDefault {
+      get { return true; }
+    }
+    private DataTableValuesCollector DataTableValuesCollector {
+      get { return (DataTableValuesCollector)OperatorGraph.InitialOperator; }
+    }
+    private ResultsCollector ResultsCollector {
+      get { return (ResultsCollector)DataTableValuesCollector.Successor; }
+    }
+    #endregion
+
+    #region Storing & Cloning
+    [StorableConstructor]
+    private SingleValueAnalyzer(bool deserializing) : base(deserializing) { }
+    private SingleValueAnalyzer(SingleValueAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SingleValueAnalyzer(this, cloner);
+    }
+    #endregion
+    public SingleValueAnalyzer()
+      : base() {
+      #region Create parameters
+      Parameters.Add(new LookupParameter<DoubleValue>("Value", "The value contained in the scope tree which should be analyzed."));
+      Parameters.Add(new ValueLookupParameter<DataTable>("Values", "The data table to store the values."));
+      Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The results collection where the analysis values should be stored."));
+      #endregion
+
+      #region Create operators
+      DataTableValuesCollector dataTableValuesCollector = new DataTableValuesCollector();
+      ResultsCollector resultsCollector = new ResultsCollector();
+
+      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Value", null, ValueParameter.Name));
+      dataTableValuesCollector.DataTableParameter.ActualName = ValuesParameter.Name;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Value", null, ValueParameter.Name));
+      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(ValuesParameter.Name));
+      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
+      #endregion
+
+      #region Create operator graph
+      OperatorGraph.InitialOperator = dataTableValuesCollector;
+      dataTableValuesCollector.Successor = resultsCollector;
+      resultsCollector.Successor = null;
+      #endregion
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalysis/ValueAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalysis/ValueAnalyzer.cs	(revision 8015)
+++ trunk/sources/HeuristicLab.Analysis/3.3/ValueAnalysis/ValueAnalyzer.cs	(revision 8016)
@@ -34,5 +34,5 @@
   /// An operator which analyzes a value in the scope tree.
   /// </summary>
-  [Item("ValueAnalyzer", "An operator which analyzes a value in the scope tree.")]
+  [Item("ValueAnalyzer", "An operator which analyzes a value in the scope tree (current scope and children).")]
   [StorableClass]
   public sealed class ValueAnalyzer : AlgorithmOperator, IAnalyzer {
