Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.Designer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.Designer.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.Designer.cs	(revision 6177)
@@ -0,0 +1,73 @@
+﻿namespace HeuristicLab.Problems.Scheduling.Views {
+  partial class GanttChart {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      chartArea1.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea1);
+      legend1.Name = "Legend";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 0);
+      this.chart.Name = "chart";
+      series1.ChartArea = "ChartArea1";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeBar;
+      series1.CustomProperties = "DrawingStyle=Cylinder";
+      series1.IsVisibleInLegend = false;
+      series1.Legend = "Legend";
+      series1.Name = "Series1";
+      series1.YValuesPerPoint = 2;
+      series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
+      this.chart.Series.Add(series1);
+      this.chart.Size = new System.Drawing.Size(687, 347);
+      this.chart.TabIndex = 0;
+      this.chart.Text = "chart";
+      // 
+      // GanttChart
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chart);
+      this.Name = "GanttChart";
+      this.Size = new System.Drawing.Size(687, 347);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private Visualization.ChartControlsExtensions.EnhancedChart chart;
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.cs	(revision 6177)
@@ -0,0 +1,54 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  public partial class GanttChart : UserControl {
+
+    private IDictionary<string, Color> categories = new Dictionary<string, Color>();
+    private IDictionary<string, int> rowNames = new Dictionary<string, int>();
+
+    public GanttChart() {
+      InitializeComponent();
+    }
+
+    public void AddCategory(string name, Color color) {
+      if (!categories.ContainsKey(name)) {
+        categories[name] = color;
+        chart.Legends[0].CustomItems.Add(color, name);
+      }
+    }
+
+    public void AddData(string rowName, string category, double start, double end, string tooltip, bool showLabel = true) {
+      AddRowName(rowName);
+      var point = CreateDataPoint(rowNames[rowName], rowName, start, end, showLabel ? category : string.Empty, categories[category]);
+      point.ToolTip = tooltip;
+      chart.Series[0].Points.Add(point);
+    }
+
+    private void AddRowName(string rowName) {
+      if (!rowNames.ContainsKey(rowName)) {
+        int nextId = rowNames.Count == 0 ? 1 : rowNames.Values.Max() + 1;
+        rowNames.Add(rowName, nextId);
+      }
+    }
+
+    private static DataPoint CreateDataPoint(double x, string axisLabel, double start, double end, string text, Color color) {
+      var point = new DataPoint(x, new double[] { start, end });
+      point.Color = color;
+      point.Label = text;
+      point.AxisLabel = axisLabel;
+      return point;
+    }
+
+    public void Reset() {
+      chart.Series[0].Points.Clear();
+      categories.Clear();
+      chart.Legends[0].CustomItems.Clear();
+      rowNames.Clear();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.resx
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.resx	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/GanttChart.resx	(revision 6177)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 6177)
@@ -36,4 +36,5 @@
     <Reference Include="System.Drawing" />
     <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -43,4 +44,10 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="GanttChart.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GanttChart.Designer.cs">
+      <DependentUpon>GanttChart.cs</DependentUpon>
+    </Compile>
     <Compile Include="JobShopSchedulingProblemView.cs">
       <SubType>UserControl</SubType>
@@ -154,6 +161,13 @@
       <Name>HeuristicLab.Problems.VehicleRouting-3.3</Name>
     </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Visualization.ChartControlsExtensions\3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj">
+      <Project>{315BDA09-3F4F-49B3-9790-B37CFC1C5750}</Project>
+      <Name>HeuristicLab.Visualization.ChartControlsExtensions-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="GanttChart.resx">
+      <DependentUpon>GanttChart.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="JobShopSchedulingProblemView.resx">
       <DependentUpon>JobShopSchedulingProblemView.cs</DependentUpon>
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 6177)
@@ -29,5 +29,5 @@
       this.tabPage1 = new System.Windows.Forms.TabPage();
       this.tabPage2 = new System.Windows.Forms.TabPage();
-      this.scheduleView1 = new HeuristicLab.Problems.Scheduling.Views.ScheduleView();
+      this.ganttChart = new HeuristicLab.Problems.Scheduling.Views.GanttChart();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl1.SuspendLayout();
@@ -98,5 +98,5 @@
       // tabPage2
       // 
-      this.tabPage2.Controls.Add(this.scheduleView1);
+      this.tabPage2.Controls.Add(this.ganttChart);
       this.tabPage2.Location = new System.Drawing.Point(4, 22);
       this.tabPage2.Name = "tabPage2";
@@ -107,16 +107,10 @@
       this.tabPage2.UseVisualStyleBackColor = true;
       // 
-      // scheduleView1
+      // ganttChart
       // 
-      this.scheduleView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.scheduleView1.Caption = "Schedule View";
-      this.scheduleView1.Content = null;
-      this.scheduleView1.Location = new System.Drawing.Point(0, 6);
-      this.scheduleView1.Name = "scheduleView1";
-      this.scheduleView1.ReadOnly = false;
-      this.scheduleView1.Size = new System.Drawing.Size(716, 381);
-      this.scheduleView1.TabIndex = 0;
+      this.ganttChart.Location = new System.Drawing.Point(0, 3);
+      this.ganttChart.Name = "ganttChart";
+      this.ganttChart.Size = new System.Drawing.Size(716, 384);
+      this.ganttChart.TabIndex = 0;
       // 
       // JobShopSchedulingProblemView
@@ -149,5 +143,5 @@
     private System.Windows.Forms.TabPage tabPage1;
     private System.Windows.Forms.TabPage tabPage2;
-    private ScheduleView scheduleView1;
+    private GanttChart ganttChart;
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs	(revision 6177)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.PluginInfrastructure;
+using System.Drawing;
 
 namespace HeuristicLab.Problems.Scheduling.Views {
@@ -47,8 +48,28 @@
       if (Content == null) {
         parameterCollectionView.Content = null;
-        scheduleView1.Content = null;
+        ganttChart.Reset();
       } else {
         parameterCollectionView.Content = ((IParameterizedNamedItem)Content).Parameters;
-        //TODO: display the current best solution in the view
+        FillGanttChart(Content);
+      }
+    }
+
+    private void FillGanttChart(JobShopSchedulingProblem content) {
+      //Add Jobs as Categories
+      int jobCount = 0;
+      Random random = new Random();
+      foreach (JSSPJob j in content.Jobs) {
+        foreach (JSSPTask t in content.Jobs[jobCount].Tasks) {
+          string categoryName = "ScheduleTasks";
+          categoryName = "Job" + t.Job.Index;
+          ganttChart.AddCategory(categoryName, Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)));
+          ganttChart.AddData(categoryName,
+            categoryName,
+            t.StartTime.Value,
+            t.EndTime.Value,
+            "Job" + t.Job.Index + " - " + "Task#" + t.TaskNr.Value.ToString(), 
+            false);
+        }
+        jobCount++;
       }
     }
@@ -75,4 +96,5 @@
             Content.ImportSolution(spImportDialog.OptimalScheduleFileName);
            * */
+          OnContentChanged();
         }
         catch (Exception ex) {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.resx
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.resx	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.resx	(revision 6177)
@@ -121,7 +121,4 @@
     <value>107, 17</value>
   </metadata>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>107, 17</value>
-  </metadata>
   <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs	(revision 6177)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Scheduling.Views {
-  [Plugin("HeuristicLab.Problems.Scheduling.Views", "3.3.3.0")]
+  [Plugin("HeuristicLab.Problems.Scheduling.Views", "3.3.3.6121")]
   [PluginFile("HeuristicLab.Problems.Scheduling.Views-3.3.dll", PluginFileType.Assembly)]
   public class HeuristicLabProblemsSchedulingViewsPlugin : PluginBase {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs	(revision 6177)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.6121")]
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.Designer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.Designer.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.Designer.cs	(revision 6177)
@@ -24,5 +24,5 @@
     /// </summary>
     private void InitializeComponent() {
-      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.ganttChart = new HeuristicLab.Problems.Scheduling.Views.GanttChart();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
@@ -38,17 +38,13 @@
       this.infoLabel.Location = new System.Drawing.Point(510, 3);
       // 
-      // parameterCollectionView
+      // ganttChart
       // 
-      this.parameterCollectionView.AllowEditingOfHiddenParameters = true;
-      this.parameterCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      this.ganttChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.parameterCollectionView.Caption = "ParameterCollection View";
-      this.parameterCollectionView.Content = null;
-      this.parameterCollectionView.Location = new System.Drawing.Point(6, 29);
-      this.parameterCollectionView.Name = "parameterCollectionView";
-      this.parameterCollectionView.ReadOnly = false;
-      this.parameterCollectionView.Size = new System.Drawing.Size(498, 313);
-      this.parameterCollectionView.TabIndex = 3;
+      this.ganttChart.Location = new System.Drawing.Point(6, 22);
+      this.ganttChart.Name = "ganttChart";
+      this.ganttChart.Size = new System.Drawing.Size(520, 320);
+      this.ganttChart.TabIndex = 3;
       // 
       // ScheduleView
@@ -56,8 +52,8 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.parameterCollectionView);
+      this.Controls.Add(this.ganttChart);
       this.Name = "ScheduleView";
       this.Size = new System.Drawing.Size(529, 345);
-      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      this.Controls.SetChildIndex(this.ganttChart, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
@@ -71,5 +67,6 @@
     #endregion
 
-    private Core.Views.ParameterCollectionView parameterCollectionView;
+    private GanttChart ganttChart;
+
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.cs	(revision 6177)
@@ -48,7 +48,35 @@
       base.OnContentChanged();
       if (Content == null) {
-        parameterCollectionView.Content = null;
+        ResetGanttChart();
       } else {
-        parameterCollectionView.Content = ((IParameterizedNamedItem)Content).Parameters;
+        FillGanttChart(Content);
+      }
+    }
+
+    private void ResetGanttChart() {
+      ganttChart.Reset();
+    }
+
+    private void FillGanttChart(Schedule content) {
+      //Add Resources as Categories
+      int resCount = 0;
+      Random random = new Random ();
+      foreach (Resource r in content.Resources) {
+        foreach (JSSPTask t in content.Resources[resCount].Tasks) {
+          string categoryName = "ScheduleTasks";
+          string toolTip = "Task#" + t.TaskNr.Value.ToString();
+          if (t is JSSPTask) {
+            categoryName = "Job" + ((JSSPTask)t).Job.Index;
+            toolTip = categoryName + " - " + toolTip;
+          }
+          ganttChart.AddCategory(categoryName, Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)));
+          ganttChart.AddData("Resource" + r.Index, 
+            categoryName, 
+            t.StartTime.Value, 
+            t.EndTime.Value, 
+            toolTip, 
+            false);
+        }
+        resCount++;
       }
     }
@@ -56,5 +84,5 @@
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      parameterCollectionView.Enabled = Content != null;
+      ganttChart.Enabled = Content != null;
     }
   }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs	(revision 6177)
@@ -36,5 +36,5 @@
   [Item("BestSchedulingSolutionAnalyzer", "An operator for analyzing the best solution of Scheduling Problems given in schedule-representation.")]
   [StorableClass]
-  public sealed class BestSchedulingSolutionAnalyzer : SchedulingOperator, IAnalyzer, IStochasticOperator {
+  public sealed class BestSchedulingSolutionAnalyzer : JSSPOperator, IAnalyzer, IStochasticOperator {
     [StorableConstructor]
     private BestSchedulingSolutionAnalyzer(bool deserializing) : base(deserializing) { }
@@ -61,6 +61,6 @@
       get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
-    public LookupParameter<JSSPEncoding> BestSolutionParameter {
-      get { return (LookupParameter<JSSPEncoding>)Parameters["BestSolution"]; }
+    public LookupParameter<Schedule> BestSolutionParameter {
+      get { return (LookupParameter<Schedule>)Parameters["BestSolution"]; }
     }
     public ValueLookupParameter<ResultCollection> ResultsParameter {
@@ -70,9 +70,9 @@
       get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
     }
-    public LookupParameter<JSSPEncoding> BestKnownSolutionParameter {
-      get { return (LookupParameter<JSSPEncoding>)Parameters["BestKnownSolution"]; }
+    public LookupParameter<Schedule> BestKnownSolutionParameter {
+      get { return (LookupParameter<Schedule>)Parameters["BestKnownSolution"]; }
     }
-    public ScopeTreeLookupParameter<JSSPEncoding> SchedulingSolutionParameter {
-      get { return (ScopeTreeLookupParameter<JSSPEncoding>)Parameters["SchedulingSolution"]; }
+    public ScopeTreeLookupParameter<Schedule> SchedulingSolutionParameter {
+      get { return (ScopeTreeLookupParameter<Schedule>)Parameters["DecodedSchedulingSolution"]; }
     }
 
@@ -84,17 +84,16 @@
       Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the JSSP solutions which should be analyzed."));
-      Parameters.Add(new ScopeTreeLookupParameter<JSSPEncoding>("SchedulingSolution", "The solutions from which the best solution has to be chosen from."));
-      Parameters.Add(new LookupParameter<JSSPEncoding>("BestSolution", "The best JSSP solution."));
+      Parameters.Add(new ScopeTreeLookupParameter<Schedule>("DecodedSchedulingSolution", "The solutions from which the best solution has to be chosen from."));
+      Parameters.Add(new LookupParameter<Schedule>("BestSolution", "The best JSSP solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best JSSP solution should be stored."));
       Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this JSSP instance."));
-      Parameters.Add(new LookupParameter<JSSPEncoding>("BestKnownSolution", "The best known solution of this JSSP instance."));
+      Parameters.Add(new LookupParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance."));
     }
 
 
     public override IOperation Apply() {
-      IntValue nrOfResources = NrOfResources;
       ItemList<JSSPJob> jobs = Jobs;
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
-      ItemArray<JSSPEncoding> solutions = SchedulingSolutionParameter.ActualValue;
+      ItemArray<Schedule> solutions = SchedulingSolutionParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
       bool max = MaximizationParameter.ActualValue.Value;
@@ -110,10 +109,10 @@
           !max && qualities[i].Value < bestKnownQuality.Value) {
         BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
-        BestKnownSolutionParameter.ActualValue = (JSSPEncoding)solutions[i].Clone();
+        BestKnownSolutionParameter.ActualValue = (Schedule)solutions[i].Clone();
       }
 
-      JSSPEncoding bestSolution = BestSolutionParameter.ActualValue;
+      Schedule bestSolution = BestSolutionParameter.ActualValue;
       if (bestSolution == null) {
-        bestSolution = (JSSPEncoding)solutions[i].Clone();
+        bestSolution = (Schedule)solutions[i].Clone();
         bestSolution.Quality.Value = qualities [i].Value;
         BestSolutionParameter.ActualValue = bestSolution;
@@ -122,5 +121,5 @@
         if (max && bestSolution.Quality.Value < qualities[i].Value ||
           !max && bestSolution.Quality.Value > qualities[i].Value) {
-            bestSolution = (JSSPEncoding)solutions[i].Clone();
+            bestSolution = (Schedule)solutions[i].Clone();
           bestSolution.Quality.Value = qualities[i].Value;
         }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCreator.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCreator.cs	(revision 6177)
@@ -29,9 +29,10 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Problems.Scheduling.Encodings;
+using HeuristicLab.Problems.Scheduling.Interfaces;
 
 namespace HeuristicLab.Problems.Scheduling.Encodings {
   [Item("JobShop Scheduling Problem Creator", "Represents the generalized form of creators for JobShop Scheduling Problems.")]
   [StorableClass]
-  public abstract class JSSPCreator<T> : SchedulingCreator where T : JSSPEncoding{
+  public abstract class JSSPCreator<T> :JSSPOperator, IJSSPCreator where T : Item, IJSSPEncoding{
     [StorableConstructor]
     protected JSSPCreator(bool deserializing) : base(deserializing) { }
@@ -48,12 +49,10 @@
     }
 
+    protected abstract T CreateSolution();
+
     public override IOperation Apply() {
       SchedulingSolutionParameter.ActualValue = CreateSolution();
       return base.Apply();
     } 
-
-
-    protected abstract T CreateSolution();
-    
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCrossover.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCrossover.cs	(revision 6177)
@@ -25,18 +25,23 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Problems.Scheduling.Encodings {
   [Item("JSSPCrossover", "A scheduling crossover operation.")]
   [StorableClass]
-  public abstract class JSSPCrossover : SchedulingOperator, IJSSPCrossover {
+  public abstract class JSSPCrossover : JSSPOperator, IJSSPCrossover, IStochasticOperator {
     #region IJSSPCrossover Members
-    public ILookupParameter<ItemArray<JSSPEncoding>> ParentsParameter {
-      get { return (ScopeTreeLookupParameter<JSSPEncoding>)Parameters["Parents"]; }
+    public ILookupParameter<ItemArray<IJSSPEncoding>> ParentsParameter {
+      get { return (ScopeTreeLookupParameter<IJSSPEncoding>)Parameters["Parents"]; }
     }
 
-    public ILookupParameter<JSSPEncoding> ChildParameter {
-      get { return (ILookupParameter<JSSPEncoding>)Parameters["Child"]; }
+    public ILookupParameter<IJSSPEncoding> ChildParameter {
+      get { return (ILookupParameter<IJSSPEncoding>)Parameters["Child"]; }
     }
     #endregion
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
 
     [StorableConstructor]
@@ -47,7 +52,8 @@
     public JSSPCrossover()
       : base() {
-      Parameters.Add(new ScopeTreeLookupParameter<JSSPEncoding>("Parents", "The parent permutations which should be crossed."));
+        Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+      Parameters.Add(new ScopeTreeLookupParameter<IJSSPEncoding>("Parents", "The parent solution which should be crossed."));
       ParentsParameter.ActualName = "SchedulingSolution";
-      Parameters.Add(new LookupParameter<JSSPEncoding>("Child", "The child permutation resulting from the crossover."));
+      Parameters.Add(new LookupParameter<IJSSPEncoding>("Child", "The child solution resulting from the crossover."));
       ChildParameter.ActualName = "SchedulingSolution";
     }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPDecoder.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPDecoder.cs	(revision 6177)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Parameters;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  public abstract class JSSPDecoder<T> : JSSPOperator, IJSSPDecoder where T : Item, IJSSPEncoding {
+    [StorableConstructor]
+    protected JSSPDecoder(bool deserializing) : base(deserializing) { }
+    protected JSSPDecoder(JSSPDecoder<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public ILookupParameter<T> SchedulingSolutionParameter {
+      get { return (ILookupParameter<T>)Parameters["SchedulingSolution"]; }
+    }
+    public ILookupParameter<Schedule> DecodedSchedulingSolutionParameter {
+      get { return (ILookupParameter<Schedule>)Parameters["DecodedSchedulingSolution"]; }
+    }
+
+    public JSSPDecoder()
+      : base() {
+      Parameters.Add(new LookupParameter<T>("SchedulingSolution", "The new scheduling solution represented as encoding."));
+      Parameters.Add(new LookupParameter<Schedule>("DecodedSchedulingSolution", "The decoded scheduling solution represented as generalized schedule."));
+    }
+
+    public abstract Schedule CreateScheduleFromEncoding(T solution);
+
+    public override IOperation Apply() {
+      Schedule result = CreateScheduleFromEncoding(SchedulingSolutionParameter.ActualValue);
+      DecodedSchedulingSolutionParameter.ActualValue = result;
+      return base.Apply();
+    } 
+  }
+}
Index: anches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncoding.cs	(revision 6176)
+++ 	(revision )
@@ -1,57 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Data;
-using HeuristicLab.Parameters;
-
-namespace HeuristicLab.Problems.Scheduling.Encodings {
-  [Item("JobShop Scheduling Encoding", "An abstract class that holds all necessary data for solving the standard JobShop Scheduling problem.")]
-  [StorableClass]
-  public abstract class JSSPEncoding : ParameterizedNamedItem {
-    [StorableConstructor]
-    protected JSSPEncoding(bool deserializing) : base(deserializing) { }
-    protected JSSPEncoding(JSSPEncoding original, Cloner cloner)
-      : base(original, cloner) {
-        this.Quality = cloner.Clone(original.Quality);
-    }
-
-    public JSSPEncoding() : base() {
-      Quality = new DoubleValue();
-    }
-
-    [Storable]
-    public DoubleValue Quality {
-      get;
-      set;
-    }
-
-    public abstract Schedule ToSchedule(IntValue nrOfResources, ItemList<JSSPJob> jobs, IRandom random);
-
-  }
-}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncodingTypes.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncodingTypes.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncodingTypes.cs	(revision 6177)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  public enum JSSPEncodingTypes {
+    JSMEncoding,
+    PRVEncoding
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPManipulator.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPManipulator.cs	(revision 6177)
@@ -25,16 +25,21 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Problems.Scheduling.Encodings {
   [Item("JSSPManipulator", "A JSSP manipulation operation.")]
   [StorableClass]
-  public abstract class JSSPManipulator : SchedulingOperator, IJSSPManipulator {
+  public abstract class JSSPManipulator : JSSPOperator, IJSSPManipulator, IStochasticOperator {
     #region IJSSPManipulator Members
 
-    public ILookupParameter<JSSPEncoding> SchedulingSolutionParameter {
-      get { return (ILookupParameter<JSSPEncoding>)Parameters["SchedulingSolution"]; }
+    public ILookupParameter<IJSSPEncoding> SchedulingSolutionParameter {
+      get { return (ILookupParameter<IJSSPEncoding>)Parameters["SchedulingSolution"]; }
     }
 
     #endregion
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
 
     [StorableConstructor]
@@ -45,5 +50,6 @@
     public JSSPManipulator()
       : base() {
-        Parameters.Add(new LookupParameter<JSSPEncoding>("SchedulingEncoding", "The JSSP solution to be manipulated."));
+        Parameters.Add(new LookupParameter<IJSSPEncoding>("SchedulingSolution", "The JSSP solution to be manipulated."));
+        Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     }
 
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPOperator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPOperator.cs	(revision 6177)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Operators;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  [Item("SchedulingOperator", "A scheduling operator.")]
+  [StorableClass]
+  public abstract class JSSPOperator : SingleSuccessorOperator, IJSSPOperator{
+    [StorableConstructor]
+    protected JSSPOperator(bool deserializing) : base(deserializing) { }
+    protected JSSPOperator(JSSPOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    #region Parameter Properties
+    public ILookupParameter<ItemList<JSSPJob>> JobsParameter {
+      get { return (ILookupParameter<ItemList<JSSPJob>>)Parameters["Jobs"]; }
+    }
+    #endregion
+
+    #region Properties
+    public ItemList<JSSPJob> Jobs {
+      get { return JobsParameter.ActualValue; }
+    }
+    #endregion
+
+    public JSSPOperator()
+      : base() {
+      Parameters.Add(new LookupParameter<ItemList<JSSPJob>>("Jobs", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance."));
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 6177)
@@ -30,8 +30,5 @@
   [Item("JSMCrossover", "An operator which crosses two JSM representations.")]
   [StorableClass]
-  public abstract class JSMCrossover : JSSPCrossover, IStochasticOperator, IJSMOperator {
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
-    }
+  public abstract class JSMCrossover : JSSPCrossover, IJSMOperator {
 
     [StorableConstructor]
@@ -40,11 +37,10 @@
     public JSMCrossover()
       : base() {
-      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     }
 
-    protected abstract JSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2);
+    public abstract IJSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2);
 
     public override IOperation Apply() {
-      ItemArray<JSSPEncoding> parents = ParentsParameter.ActualValue;
+      ItemArray<IJSSPEncoding> parents = ParentsParameter.ActualValue;
 
       ChildParameter.ActualValue =
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 6177)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers {
+  [Item("JSM Jobbased Order Crossover", "Represents a crossover operation swapping subsequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class JSMJOXCrossover : JSMCrossover {
+    [StorableConstructor]
+    protected JSMJOXCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMJOXCrossover(JSMJOXCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMJOXCrossover(this, cloner);
+    }
+
+    public JSMJOXCrossover() : base() { }
+
+    public static IJSSPEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      JSMEncoding result = new JSMEncoding();
+
+      int nrOfResources = parent1.JobSequenceMatrix.Count;
+      int nrOfJobs = parent1.JobSequenceMatrix[0].Length;
+
+      //Determine randomly which jobindexes persist
+      BoolArray persist = new BoolArray(nrOfJobs);
+      for (int i = 0; i < persist.Length; i++) {
+        persist[i] = random.Next(2) == 1;
+      }
+
+      //Fill childmatrix with values
+      for (int resIndex = 0; resIndex < nrOfResources; resIndex++) {
+        result.JobSequenceMatrix.Add(new Permutation (PermutationTypes.Absolute, nrOfJobs));
+        int parent2index = 0;
+        for (int jobIndex = 0; jobIndex < nrOfJobs; jobIndex++) {
+          if (persist[parent1.JobSequenceMatrix[resIndex][jobIndex]])
+            result.JobSequenceMatrix[resIndex][jobIndex] = parent1.JobSequenceMatrix[resIndex][jobIndex];
+          else {
+            while (persist[parent2.JobSequenceMatrix[resIndex][parent2index]])
+              parent2index++;
+            result.JobSequenceMatrix[resIndex][jobIndex] = parent2.JobSequenceMatrix[resIndex][parent2index];
+            parent2index++;
+          }
+        }
+      }
+
+      return result;
+    }
+
+    public override IJSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    } 
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMOrderCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMOrderCrossover.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMOrderCrossover.cs	(revision 6177)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers {
+  [Item("JSM Swap Crossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class JSMOrderCrossover : JSMCrossover {
+    [StorableConstructor]
+    protected JSMOrderCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMOrderCrossover(JSMOrderCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMOrderCrossover(this, cloner);
+    }
+
+    public JSMOrderCrossover() : base() { }
+
+    public static IJSSPEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      JSMEncoding result = new JSMEncoding ();
+
+      for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
+        result.JobSequenceMatrix.Add (
+          HeuristicLab.Encodings.PermutationEncoding.OrderCrossover.Apply(random, 
+          parent1.JobSequenceMatrix[i], parent2.JobSequenceMatrix[i]));
+      }
+
+      return result;
+    }
+
+    public override IJSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    } 
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 6177)
@@ -27,7 +27,9 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Encodings.PermutationEncoding;
 
 namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers {
-  [Item("JSM Subsequence Exchange Crossover", "Represents a crossover operation swapping subsequences of the parents to generate offspring.")]
+  [Item("JSM Subsequence Exchange Crossover", "Represents a crossover operation identifiying and exchanging equal subsequences of the parents to generate offspring.")]
   [StorableClass]
   public class JSMSXXCrossover : JSMCrossover {
@@ -43,10 +45,64 @@
     public JSMSXXCrossover () : base () {}
 
-    protected override JSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
-      JSSPEncoding result = parent1;
+    public static IJSSPEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      JSMEncoding result = new JSMEncoding();
 
+      int subSequenceLength = 3;
+
+      for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
+        Permutation p1 = (Permutation)parent1.JobSequenceMatrix[i].Clone();
+        Permutation p2 = (Permutation)parent2.JobSequenceMatrix[i].Clone();
+        FindAndExchangeSubsequences(p1, p2, subSequenceLength);
+        //parent1.JobSequenceMatrix[i] = p1;
+        //parent2.JobSequenceMatrix[i] = p2;
+
+        result.JobSequenceMatrix.Add(p1);
+      }
 
       return result;
     }
+
+    private static void FindAndExchangeSubsequences(Permutation p1, Permutation p2, int subSequenceLength) {
+      for (int i = 0; i <= p1.Length - subSequenceLength; i++) {
+        for (int j = 0; j <= p2.Length - subSequenceLength; j++) {
+          int[] ss1 = GetSubSequenceAtPosition(p1, i, subSequenceLength);
+          int[] ss2 = GetSubSequenceAtPosition(p2, j, subSequenceLength);
+          if (AreEqualSubsequences(ss1, ss2)) {
+            ExchangeSubsequences(p1, i, p2, j, subSequenceLength);
+            break;
+          }
+        }
+      }
+    }
+    private static void ExchangeSubsequences(Permutation p1, int index1, Permutation p2, int index2, int subSequenceLength) {
+      Permutation aux = (Permutation)p1.Clone();
+      for (int i = 0; i < subSequenceLength; i++) {
+        p1[i + index1] = p2[i + index2];
+        p2[i + index2] = aux[i + index1];
+      }
+    }
+    private static bool AreEqualSubsequences(int[] ss1, int[] ss2) {
+      int counter = 0;
+      for (int i = 0; i < ss1.Length; i++) {
+        for (int j = 0; j < ss2.Length; j++) {
+          if (ss1[i] == ss2[j])
+            counter++;
+        }
+      }
+      return counter == ss1.Length;
+    }
+    private static int[] GetSubSequenceAtPosition(Permutation p1, int index, int subSequenceLength) {
+      int[] result = new int[subSequenceLength];
+      for (int i = 0; i < subSequenceLength; i++)
+        result[i] = p1[i + index];
+
+      return result;
+    }
+
+
+
+    public override IJSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    } 
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecoder.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecoder.cs	(revision 6177)
@@ -35,5 +35,5 @@
   [Item("Job Sequencing Matrix Decoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
   [StorableClass]
-  public class JSMDecoder : NamedItem {
+  public class JSMDecoder : JSSPDecoder<JSMEncoding>, IStochasticOperator {
     [StorableConstructor]
     protected JSMDecoder(bool deserializing) : base(deserializing) { }
@@ -41,4 +41,6 @@
       : base(original, cloner) {
         this.resultingSchedule = cloner.Clone(original.resultingSchedule);
+        this.decodingErrorPolicy = original.decodingErrorPolicy;
+        this.forcingStrategy = original.forcingStrategy;
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -46,47 +48,22 @@
     }
 
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
     [Storable]
     private Schedule resultingSchedule;
 
     [Storable]
-    private IRandom random;
-
-    public JSMDecoder(IntValue nrOfResources, IRandom r)
+    private JSMDecodingErrorPolicyTypes decodingErrorPolicy = JSMDecodingErrorPolicyTypes.GuidedPolicy;
+
+    [Storable]
+    private JSMForcingStrategyTypes forcingStrategy = JSMForcingStrategyTypes.ShiftForcing;
+
+    public JSMDecoder()
       : base() {
-      resultingSchedule = new Schedule(nrOfResources);
-      random = r;
-    }
-
-
-    public Schedule CreateScheduleFromJSM(ItemList<JSSPJob> jobs, ItemList<Permutation> jobSequenceMatrix) {
-      //Reset scheduled tasks in result
-      foreach (JSSPJob j in jobs) {
-        foreach (JSSPTask t in j.Tasks) {
-          t.IsScheduled.Value = false;
-        }
-      }
-
-      //GT-Algorithm
-      //STEP 0 - Compute a list of "earliest operations"
-      ItemList<JSSPTask> earliestTasksList = GetEarliestNotScheduledTasks(jobs);
-      while (earliestTasksList.Count > 0) {
-        //STEP 1 - Get earliest not scheduled operation with minimal earliest completing time
-        JSSPTask minimal = GetTaskWithMinimalEC(earliestTasksList);
-
-        //STEP 2 - Compute a conflict set of all operations that can be scheduled on the machine the previously selected operation runs on
-        ItemList<JSSPTask> conflictSet = GetConflictSetForTask(minimal, earliestTasksList);
-
-        //STEP 3 - Select an operation from the conflict set (various methods depending on how the algorithm should work..)
-        JSSPTask selectedTask = SelectTaskFromConflictSet(minimal.ResourceNr, conflictSet, jobSequenceMatrix);
-
-        //STEP 4 - Adding the selected operation to the current schedule
-        AddTaskToSchedule(selectedTask);
-
-        //STEP 5 - Back to STEP 1
-        earliestTasksList = GetEarliestNotScheduledTasks(jobs);
-      }
-
-      return resultingSchedule;
-    }
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
     private ItemList<JSSPTask> GetEarliestNotScheduledTasks(ItemList<JSSPJob> jobs) {
       ItemList<JSSPTask> result = new ItemList<JSSPTask>();
@@ -132,5 +109,5 @@
         IntValue solutionCandidateJobNr = new IntValue(jsm[conflictedResource.Value][progressOnResource.Value]);
         foreach (JSSPTask t in conflictSet) {
-          if (t.Job.JobIndex == solutionCandidateJobNr)
+          if (t.Job.Index.Value == solutionCandidateJobNr.Value)
             result = t;
         }
@@ -141,17 +118,45 @@
       //Repairing happens here
       if (result == null) {
-        result = conflictSet[random.Next(conflictSet.Count - 1)];
+        //Decoding Error Policy BEGIN
+        //CHOOSE OTHER RESOLUTION FOR CONFLICT SET
+        result = ApplyDecodingErrorPolicy(conflictSet);
+        //result = conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
+        //Decoding Error Policy END
+
+
+        //Determine index of new resolution
         int index = 0;
-        foreach (int jobAssignment in jsm[conflictedResource.Value]) {
-          if (jobAssignment == result.Job.JobIndex.Value)
-            break;
+        while (index < jsm[conflictedResource.Value].Length && 
+          jsm[conflictedResource.Value][index] != result.Job.Index.Value)
           index++;
-        }
-        jsm[conflictedResource.Value][index] = jsm[conflictedResource.Value][progressOnResource.Value];
-        jsm[conflictedResource.Value][progressOnResource.Value] = result.Job.JobIndex.Value;
-      }
-       
-
-      return result;
+
+
+        //Forcing Strategy BEGIN
+        ApplyForcingStrategy(jsm, conflictedResource.Value, index, progressOnResource.Value, result.Job.Index.Value);
+        
+        //ForcingStrategy END
+      }
+      return result;
+    }
+
+    private void ApplyForcingStrategy(ItemList<Permutation> jsm, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
+      //if (forcingStrategy == JSMForcingStrategyTypes.SwapForcing) {
+        //SwapForcing
+        jsm[conflictedResource][newResolutionIndex] = jsm[conflictedResource][progressOnResource];
+        jsm[conflictedResource][progressOnResource] = newResolution;
+      /*} else {
+        //ShiftForcing
+
+      } */
+    }
+
+    private JSSPTask ApplyDecodingErrorPolicy(ItemList<JSSPTask> conflictSet) {
+      //if (decodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) { 
+        //Random
+        return conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
+      /*} else {
+        //Guided
+
+      }    */
     }
     private DoubleValue ComputeEarliestStartTime(JSSPTask t) {
@@ -174,4 +179,43 @@
       affectedResource.Tasks.Add(selectedTask);
     }
+
+    public override Schedule CreateScheduleFromEncoding(JSMEncoding solution) {
+      ItemList<Permutation> jobSequenceMatrix = solution.JobSequenceMatrix;
+
+      resultingSchedule = new Schedule(new IntValue(Jobs[0].Tasks.Count));
+
+      //Reset scheduled tasks in result
+      foreach (JSSPJob j in Jobs) {
+        foreach (JSSPTask t in j.Tasks) {
+          t.IsScheduled.Value = false;
+        }
+      }
+
+      //GT-Algorithm
+      //STEP 0 - Compute a list of "earliest operations"
+      ItemList<JSSPTask> earliestTasksList = GetEarliestNotScheduledTasks(Jobs);
+      while (earliestTasksList.Count > 0) {
+        //STEP 1 - Get earliest not scheduled operation with minimal earliest completing time
+        JSSPTask minimal = GetTaskWithMinimalEC(earliestTasksList);
+
+        //STEP 2 - Compute a conflict set of all operations that can be scheduled on the machine the previously selected operation runs on
+        ItemList<JSSPTask> conflictSet = GetConflictSetForTask(minimal, earliestTasksList);
+
+        //STEP 3 - Select an operation from the conflict set (various methods depending on how the algorithm should work..)
+        JSSPTask selectedTask = SelectTaskFromConflictSet(minimal.ResourceNr, conflictSet, jobSequenceMatrix);
+
+        //STEP 4 - Adding the selected operation to the current schedule
+        AddTaskToSchedule(selectedTask);
+
+        //STEP 5 - Back to STEP 1
+        earliestTasksList = GetEarliestNotScheduledTasks(Jobs);
+      }
+
+      return resultingSchedule;
+    }
+
+    public override IOperation Apply() {
+      return base.Apply();
+    } 
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecodingErrorPolicyTypes.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecodingErrorPolicyTypes.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecodingErrorPolicyTypes.cs	(revision 6177)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix {
+  public enum JSMDecodingErrorPolicyTypes {
+    RandomPolicy,
+    GuidedPolicy
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMEncoding.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMEncoding.cs	(revision 6177)
@@ -29,10 +29,12 @@
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Data;
-using HeuristicLab.Problems.Scheduling.Encodings;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators;
 
 namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix {
   [Item("Job Sequencing Matrix Encoding", "Represents a solution for a standard JobShop Scheduling Problem.")]
   [StorableClass]
-  public class JSMEncoding : JSSPEncoding{
+  public class JSMEncoding : ParameterizedNamedItem, IJSSPEncoding{
     [StorableConstructor]
     protected JSMEncoding(bool deserializing) : base(deserializing) { }
@@ -52,9 +54,4 @@
     }
 
-    public override Schedule ToSchedule(IntValue nrOfResources, ItemList<JSSPJob> jobs, IRandom random) {
-      JSMDecoder decoder = new JSMDecoder(nrOfResources, random);
-      return decoder.CreateScheduleFromJSM (jobs, JobSequenceMatrix);
-    }
-
     public override string ToString() {
       StringBuilder sb = new StringBuilder();
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMForcingStrategyTypes.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMForcingStrategyTypes.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMForcingStrategyTypes.cs	(revision 6177)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix {
+  public enum JSMForcingStrategyTypes {
+    ShiftForcing,
+    SwapForcing
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMRandomCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMRandomCreator.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMRandomCreator.cs	(revision 6177)
@@ -64,5 +64,5 @@
       JSMEncoding solution = new JSMEncoding();
       IntValue nrOfJobs = new IntValue (Jobs.Count);
-      IntValue nrOfResources = NrOfResources;
+      IntValue nrOfResources = new IntValue (Jobs[0].Tasks.Count);
 
       for (int i = 0; i < nrOfResources.Value; i++) {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMInsertionManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMInsertionManipulator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMInsertionManipulator.cs	(revision 6177)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators {
+
+  [Item("JSM Insert Manipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
+  [StorableClass]
+  public class JSMInsertionManipulator : JSMManipulator {
+    [StorableConstructor]
+    protected JSMInsertionManipulator(bool deserializing) : base(deserializing) { }
+    protected JSMInsertionManipulator(JSMInsertionManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMInsertionManipulator(this, cloner);
+    }
+
+    public JSMInsertionManipulator () : base () {}
+
+    protected override JSMEncoding Manipulate(IRandom random, JSMEncoding individual) {
+      JSMEncoding result = (JSMEncoding)individual.Clone();
+      int resourceIndex = random.Next(result.JobSequenceMatrix.Count);
+      Permutation p = result.JobSequenceMatrix[resourceIndex];
+      int seqIndex1 = random.Next(p.Length);
+      int seqIndex2 = random.Next(p.Length);
+      int aux = p[seqIndex1];
+      p[seqIndex1] = p[seqIndex2];
+      p[seqIndex2] = aux;
+      return result;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 6177)
@@ -32,9 +32,5 @@
   [Item("AlbaManipulator", "An operator which manipulates a VRP representation.")]
   [StorableClass]
-  public abstract class JSMManipulator : JSSPManipulator, IStochasticOperator, IJSMOperator {
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
-    }
-
+  public abstract class JSMManipulator : JSSPManipulator, IJSMOperator {
     [StorableConstructor]
     protected JSMManipulator(bool deserializing) : base(deserializing) { }
@@ -42,5 +38,4 @@
     public JSMManipulator()
       : base() {
-      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     }
 
@@ -49,5 +44,5 @@
 
     public override IOperation Apply() {
-      JSSPEncoding solution = SchedulingSolutionParameter.ActualValue;
+      IJSSPEncoding solution = SchedulingSolutionParameter.ActualValue;
 
       SchedulingSolutionParameter.ActualValue = Manipulate(RandomParameter.ActualValue, solution as JSMEncoding);
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 6177)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators {
+
+  [Item("JSM Shift Change Manipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
+  [StorableClass]
+  public class JSMShiftChangeManipulator : JSMManipulator {
+    [StorableConstructor]
+    protected JSMShiftChangeManipulator(bool deserializing) : base(deserializing) { }
+    protected JSMShiftChangeManipulator(JSMShiftChangeManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMShiftChangeManipulator(this, cloner);
+    }
+
+    public JSMShiftChangeManipulator() : base() { }
+
+    protected override JSMEncoding Manipulate(IRandom random, JSMEncoding individual) {
+      JSMEncoding result = (JSMEncoding)individual.Clone();
+
+      int nrOfJobs = individual.JobSequenceMatrix[0].Length;
+
+      int jobIndex = random.Next(nrOfJobs);
+
+      int signedFactor = random.Next (2);
+
+      for (int permutationIndex = 0; permutationIndex < result.JobSequenceMatrix.Count; permutationIndex++ ) {
+        int i = 0;
+        Permutation currentPermutation = result.JobSequenceMatrix[permutationIndex];
+        while (i < currentPermutation.Length && currentPermutation[i] != jobIndex)
+          i++;
+
+        int shift = (signedFactor == 0) ? random.Next(nrOfJobs / 2) * -1 : random.Next(nrOfJobs / 2);
+        int newIndex = shift + i;
+        if (newIndex < 0) newIndex = 0;
+        if (newIndex >= nrOfJobs) newIndex = nrOfJobs - 1;
+
+        List<int> aux = currentPermutation.ToList<int>();
+        int swap = currentPermutation[i];
+        aux.RemoveAt(i);
+        aux.Insert(newIndex, swap);
+
+        result.JobSequenceMatrix[permutationIndex] = new Permutation(PermutationTypes.Absolute, aux.ToArray());
+      }
+
+      return result;
+    }
+  }
+}
Index: anches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 6176)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.PermutationEncoding;
-
-namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators {
-
-  [Item("JSM Subsequence Exchange Crossover", "Represents a crossover operation swapping subsequences of the parents to generate offspring.")]
-  [StorableClass]
-  public class JSMSwapManipulator : JSMManipulator {
-    [StorableConstructor]
-    protected JSMSwapManipulator(bool deserializing) : base(deserializing) { }
-    protected JSMSwapManipulator(JSMSwapManipulator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new JSMSwapManipulator(this, cloner);
-    }
-
-    public JSMSwapManipulator () : base () {}
-
-    protected override JSMEncoding Manipulate(IRandom random, JSMEncoding individual) {
-      int resourceIndex = random.Next(individual.JobSequenceMatrix.Count - 1);
-      Permutation p = individual.JobSequenceMatrix[resourceIndex];
-      int seqIndex1 = random.Next(p.Length);
-      int seqIndex2 = random.Next(p.Length);
-      int aux = p[seqIndex1];
-      p[seqIndex1] = p[seqIndex2];
-      p[seqIndex2] = aux;
-      return individual;
-    }
-  }
-}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 6177)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Crossovers {
+  [Item("JSMCrossover", "An operator which crosses two JSM representations.")]
+  [StorableClass]
+  public abstract class PRVCrossover : JSSPCrossover, IPRVOperator {
+
+    [StorableConstructor]
+    protected PRVCrossover(bool deserializing) : base(deserializing) { }
+    protected PRVCrossover(PRVCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PRVCrossover()
+      : base() {
+    }
+
+    public abstract IJSSPEncoding Crossover(IRandom random, PRVEncoding parent1, PRVEncoding parent2);
+
+    public override IOperation Apply() {
+      ItemArray<IJSSPEncoding> parents = ParentsParameter.ActualValue;
+
+      ChildParameter.ActualValue =
+        Crossover(RandomParameter.ActualValue, parents[0] as PRVEncoding, parents[1] as PRVEncoding);
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 6177)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Crossovers {
+  [Item("PRV Discrete Crossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class PRVDiscreteCrossover : PRVCrossover {
+    [StorableConstructor]
+    protected PRVDiscreteCrossover(bool deserializing) : base(deserializing) { }
+    protected PRVDiscreteCrossover(PRVDiscreteCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVDiscreteCrossover(this, cloner);
+    }
+
+    public PRVDiscreteCrossover() : base() { }
+
+    public static IJSSPEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return new PRVEncoding(DiscreteCrossover.Apply(random, parent1, parent2), parent1.NrOfRules);
+    }
+
+    public override IJSSPEncoding Crossover(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    } 
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 6177)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Crossovers {
+  [Item("PRV SinglePoint Crossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class PRVSinglePointCrossover : PRVCrossover {
+    [StorableConstructor]
+    protected PRVSinglePointCrossover(bool deserializing) : base(deserializing) { }
+    protected PRVSinglePointCrossover(PRVSinglePointCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVSinglePointCrossover(this, cloner);
+    }
+
+    public PRVSinglePointCrossover() : base() { }
+
+    public static IJSSPEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return new PRVEncoding(SinglePointCrossover.Apply(random, parent1, parent2), parent1.NrOfRules);
+    }
+
+    public override IJSSPEncoding Crossover(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    } 
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Manipulators/PRVManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 6177)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Encodings;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Manipulators {
+  [Item("AlbaManipulator", "An operator which manipulates a VRP representation.")]
+  [StorableClass]
+  public abstract class PRVManipulator : JSSPManipulator, IPRVOperator {
+    [StorableConstructor]
+    protected PRVManipulator(bool deserializing) : base(deserializing) { }
+    protected PRVManipulator(PRVManipulator original, Cloner cloner) : base(original, cloner) { }
+    public PRVManipulator()
+      : base() {
+    }
+
+    protected abstract PRVEncoding Manipulate(IRandom random, PRVEncoding individual);
+
+
+    public override IOperation Apply() {
+      IJSSPEncoding solution = SchedulingSolutionParameter.ActualValue;
+
+      SchedulingSolutionParameter.ActualValue = Manipulate(RandomParameter.ActualValue, solution as PRVEncoding);
+
+      return base.Apply();
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 6177)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Manipulators {
+
+  [Item("PRV Uniform One Position Manipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
+  [StorableClass]
+  public class PRVUniformOnePositionManipulator : PRVManipulator {
+    [StorableConstructor]
+    protected PRVUniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected PRVUniformOnePositionManipulator(PRVUniformOnePositionManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVUniformOnePositionManipulator(this, cloner);
+    }
+
+    public PRVUniformOnePositionManipulator() : base() { }
+
+    protected override PRVEncoding Manipulate(IRandom random, PRVEncoding individual) {
+      UniformOnePositionManipulator.Apply(random, individual, new IntValue(0), new IntValue(3));
+      return individual;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVDecoder.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVDecoder.cs	(revision 6177)
@@ -0,0 +1,302 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector {
+  [Item("Job Sequencing Matrix Decoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
+  [StorableClass]
+  public class PRVDecoder : JSSPDecoder<PRVEncoding>, IStochasticOperator {
+    [StorableConstructor]
+    protected PRVDecoder(bool deserializing) : base(deserializing) { }
+    protected PRVDecoder(PRVDecoder original, Cloner cloner)
+      : base(original, cloner) {
+        this.resultingSchedule = cloner.Clone(original.resultingSchedule);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVDecoder(this, cloner);
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [Storable]
+    private Schedule resultingSchedule;
+
+    public PRVDecoder()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    #region Priority Rules
+    //smallest number of remaining tasks
+    private JSSPTask FILORule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[tasks.Count-1];
+      return currentResult;
+    }
+
+    //earliest start time
+    private JSSPTask ESTRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      double currentEST = double.MaxValue;
+      foreach (JSSPTask t in tasks) {
+        double est = ComputeEarliestStartTime(t).Value;
+        if (est < currentEST) {
+          currentEST = est;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+   
+    //shortest processingtime
+    private JSSPTask SPTRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      foreach (JSSPTask t in tasks) {
+        if (t.Duration.Value < currentResult.Duration.Value)
+          currentResult = t;
+      }
+      return currentResult;
+    }
+
+    //longest processing time    
+    private JSSPTask LPTRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      foreach (JSSPTask t in tasks) {
+        if (t.Duration.Value > currentResult.Duration.Value)
+          currentResult = t;
+      }
+      return currentResult;
+    } 
+
+    //most work remaining
+    private JSSPTask MWRRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      double currentLargestRemainingProcessingTime = 0;
+      foreach (JSSPTask t in tasks) {
+        double remainingProcessingTime = 0;
+        foreach (JSSPTask jt in t.Job.Tasks) {
+          if (!jt.IsScheduled.Value)
+            remainingProcessingTime += jt.Duration.Value;
+        }
+        if (remainingProcessingTime > currentLargestRemainingProcessingTime) {
+          currentLargestRemainingProcessingTime = remainingProcessingTime;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+   
+    //least work remaining
+    private JSSPTask LWRRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      double currentSmallestRemainingProcessingTime = double.MaxValue;
+      foreach (JSSPTask t in tasks) {
+        double remainingProcessingTime = 0;
+        foreach (JSSPTask jt in t.Job.Tasks) {
+          if (!jt.IsScheduled.Value)
+            remainingProcessingTime += jt.Duration.Value;
+        }
+        if (remainingProcessingTime < currentSmallestRemainingProcessingTime) {
+          currentSmallestRemainingProcessingTime = remainingProcessingTime;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+
+    //most operations remaining
+    private JSSPTask MORRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      int currentLargestNrOfRemainingTasks = 0;
+      foreach (JSSPTask t in tasks) {
+        int nrOfRemainingTasks = 0;
+        foreach (JSSPTask jt in t.Job.Tasks) {
+          if (!jt.IsScheduled.Value)
+            nrOfRemainingTasks++;
+        }
+        if (currentLargestNrOfRemainingTasks < nrOfRemainingTasks) {
+          currentLargestNrOfRemainingTasks = nrOfRemainingTasks;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+    
+    //least operationsremaining
+    private JSSPTask LORRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      int currentSmallestNrOfRemainingTasks = int.MaxValue;
+      foreach (JSSPTask t in tasks) {
+        int nrOfRemainingTasks = 0;
+        foreach (JSSPTask jt in t.Job.Tasks) {
+          if (!jt.IsScheduled.Value)
+            nrOfRemainingTasks++;
+        }
+        if (currentSmallestNrOfRemainingTasks > nrOfRemainingTasks) {
+          currentSmallestNrOfRemainingTasks = nrOfRemainingTasks;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+                
+    //first operation in Queue
+    private JSSPTask FIFORule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[0];
+      return currentResult;
+    }
+                  
+    //random
+    private JSSPTask RandomRule(ItemList<JSSPTask> tasks) {
+      JSSPTask currentResult = tasks[RandomParameter.ActualValue.Next(tasks.Count)];
+      return currentResult;
+    }
+
+    #endregion
+
+    private ItemList<JSSPTask> GetEarliestNotScheduledTasks(ItemList<JSSPJob> jobs) {
+      ItemList<JSSPTask> result = new ItemList<JSSPTask>();
+      foreach (JSSPJob j in jobs) {
+        foreach (JSSPTask t in j.Tasks) {
+          if (!t.IsScheduled.Value) {
+            result.Add(t);
+            break;
+          }
+        }
+      }
+      return result;
+    }
+    private JSSPTask GetTaskWithMinimalEC(ItemList<JSSPTask> earliestTasksList) {
+      DoubleValue minEct = new DoubleValue(Double.MaxValue);
+      JSSPTask result = null;
+      foreach (JSSPTask t in earliestTasksList) {
+        DoubleValue ect = ComputeEarliestCompletionTime(t);
+        if (ect.Value < minEct.Value) {
+          result = t;
+          minEct = ect;
+        }
+      }
+      return result;
+    }
+    private ItemList<JSSPTask> GetConflictSetForTask(JSSPTask conflictedTask, ItemList<JSSPTask> earliestTasksList) {
+      ItemList<JSSPTask> result = new ItemList<JSSPTask>();
+      DoubleValue conflictedCompletionTime = ComputeEarliestCompletionTime(conflictedTask);
+      //result.Add(conflictedTask);
+      foreach (JSSPTask t in earliestTasksList) {
+        if (t.ResourceNr.Value == conflictedTask.ResourceNr.Value) {
+          if (ComputeEarliestStartTime(t).Value < conflictedCompletionTime.Value)
+            result.Add(t);
+        }
+      }
+      return result;
+    }
+    private JSSPTask SelectTaskFromConflictSet(ItemList<JSSPTask> conflictSet, int ruleIndex, int nrOfRules) {
+      if (conflictSet.Count == 1)
+        return conflictSet[0];
+      
+      ruleIndex = ruleIndex % nrOfRules;
+      switch (ruleIndex) {
+        case 0: return FILORule(conflictSet);
+        case 1: return ESTRule(conflictSet);
+        case 2: return SPTRule(conflictSet);
+        case 3: return LPTRule(conflictSet);
+        case 4: return MWRRule(conflictSet);
+        case 5: return LWRRule(conflictSet);
+        case 6: return MORRule(conflictSet);
+        case 7: return LORRule(conflictSet);
+        case 8: return FIFORule(conflictSet);
+        case 9: return RandomRule(conflictSet);
+        default: return RandomRule(conflictSet);
+      }  
+    }
+    private DoubleValue ComputeEarliestStartTime(JSSPTask t) {
+      Resource affectedResource = resultingSchedule.Resources[t.ResourceNr.Value];
+
+      DoubleValue lastMachineEndTime = affectedResource.TotalDuration;
+      DoubleValue previousJoboperationEndTime = new DoubleValue(double.MinValue);
+      if (t.PreviousTask != null)
+        previousJoboperationEndTime = t.PreviousTask.EndTime;
+
+      return new DoubleValue(Math.Max(previousJoboperationEndTime.Value, lastMachineEndTime.Value));
+    }
+    private DoubleValue ComputeEarliestCompletionTime(JSSPTask t) {
+      return new DoubleValue(ComputeEarliestStartTime(t).Value + t.Duration.Value);
+    }
+    private void AddTaskToSchedule(JSSPTask selectedTask) {
+      Resource affectedResource = resultingSchedule.Resources[selectedTask.ResourceNr.Value];
+      selectedTask.StartTime = ComputeEarliestStartTime(selectedTask);
+      selectedTask.IsScheduled.Value = true;
+      affectedResource.Tasks.Add(selectedTask);
+    }
+
+    public override Schedule CreateScheduleFromEncoding(PRVEncoding solution) {
+      PRVEncoding priorityRulesVector = solution;
+
+      resultingSchedule = new Schedule(new IntValue(Jobs[0].Tasks.Count));
+
+      //Reset scheduled tasks in result
+      foreach (JSSPJob j in Jobs) {
+        foreach (JSSPTask t in j.Tasks) {
+          t.IsScheduled.Value = false;
+        }
+      }
+
+      //GT-Algorithm
+      //STEP 0 - Compute a list of "earliest operations"
+      ItemList<JSSPTask> earliestTasksList = GetEarliestNotScheduledTasks(Jobs);
+      int currentDecisionIndex = 0;
+      while (earliestTasksList.Count > 0) {
+        //STEP 1 - Get earliest not scheduled operation with minimal earliest completing time
+        JSSPTask minimal = GetTaskWithMinimalEC(earliestTasksList);
+
+        //STEP 2 - Compute a conflict set of all operations that can be scheduled on the machine the previously selected operation runs on
+        ItemList<JSSPTask> conflictSet = GetConflictSetForTask(minimal, earliestTasksList);
+
+        //STEP 3 - Select an operation from the conflict set (various methods depending on how the algorithm should work..)
+        JSSPTask selectedTask = SelectTaskFromConflictSet(conflictSet, priorityRulesVector [currentDecisionIndex++], solution.NrOfRules.Value);
+
+        //STEP 4 - Adding the selected operation to the current schedule
+        AddTaskToSchedule(selectedTask);
+
+        //STEP 5 - Back to STEP 1
+        earliestTasksList = GetEarliestNotScheduledTasks(Jobs);
+      }
+
+      return resultingSchedule;
+    }
+
+    public override IOperation Apply() {
+      return base.Apply();
+    } 
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVEncoding.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVEncoding.cs	(revision 6177)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Crossovers;
+using HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector.Manipulators;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector {
+  [Item("Priority Rules Vector Encoding", "Represents a solution for a standard JobShop Scheduling Problem.")]
+  [StorableClass]
+  public class PRVEncoding : IntegerVector, IJSSPEncoding{
+    [StorableConstructor]
+    protected PRVEncoding(bool deserializing) : base(deserializing) { }
+    protected PRVEncoding(PRVEncoding original, Cloner cloner)
+      : base(original, cloner) {
+        this.nrOfRules = (IntValue)cloner.Clone(original.NrOfRules);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVEncoding(this, cloner);
+    }
+
+    [Storable]
+    private IntValue nrOfRules;
+    public IntValue NrOfRules { 
+      get {
+        return nrOfRules;
+      } 
+    }
+
+
+    public PRVEncoding(IntValue nrOfRules)
+      : base() {
+        this.nrOfRules = (IntValue)nrOfRules.Clone();
+    }
+
+    public PRVEncoding (IntegerVector iv, IntValue nrOfRules) : base (iv.Length) {
+      this.nrOfRules = (IntValue)nrOfRules.Clone();
+      foreach (int i in iv) {
+        this[i] = iv[i];
+      }
+    }
+
+    public PRVEncoding(int length, IRandom random, int min, int max, IntValue nrOfRules) : base(length, random, min, max) {
+      this.nrOfRules = (IntValue)nrOfRules.Clone();
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+
+      foreach (int i in this) {
+        sb.Append(i.ToString() + " ");
+      }
+
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVRandomCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVRandomCreator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/PriorityRulesVector/PRVRandomCreator.cs	(revision 6177)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector {
+  [Item("Priority Rules Random Creator", "Creator class used to create PRV solutions for standard JobShop scheduling problems.")]
+  [StorableClass]
+  public class PRVRandomCreator : JSSPCreator<PRVEncoding>, IStochasticOperator {
+    [StorableConstructor]
+    protected PRVRandomCreator(bool deserializing) : base(deserializing) { }
+    protected PRVRandomCreator(PRVRandomCreator original, Cloner cloner)
+      : base(original, cloner) {
+        this.NrOfRules = cloner.Clone(original.NrOfRules);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVRandomCreator(this, cloner);
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    public IRandom Random {
+      get { return RandomParameter.ActualValue; }
+    }
+
+    [Storable]
+    public IntValue NrOfRules { get; set; }
+
+    public PRVRandomCreator()
+      : base() {
+      NrOfRules = new IntValue(10);
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+    }
+
+
+    protected override PRVEncoding CreateSolution() {
+      IntValue nrOfJobs = new IntValue (Jobs.Count);
+      IntValue nrOfResources = new IntValue (Jobs[0].Tasks.Count);
+      PRVEncoding solution = new PRVEncoding(nrOfJobs.Value * nrOfResources.Value, Random, 0, NrOfRules.Value, NrOfRules);
+      return solution;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/JSSPEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/JSSPEvaluator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/JSSPEvaluator.cs	(revision 6177)
@@ -0,0 +1,75 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Optimization;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using System;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Problems.Scheduling.Encodings;
+using HeuristicLab.Operators;
+
+
+namespace HeuristicLab.Problems.Scheduling.Evaluators {
+  [Item("JSSP Evaluator", "Represents a evaluator class for standard job shop scheduling problems.")]
+  [StorableClass]
+  public abstract class JSSPEvaluator : JSSPOperator, ISingleObjectiveEvaluator {
+    [StorableConstructor]
+    protected JSSPEvaluator(bool deserializing) : base(deserializing) { }
+    protected JSSPEvaluator(JSSPEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { 
+        if (Parameters.ContainsKey("Quality"))
+          return (ILookupParameter<DoubleValue>)Parameters["Quality"];
+        else
+          return null;
+      }
+    }
+    public ILookupParameter<Schedule> DecodedSchedulingSolutionParameter {
+      get { return (ILookupParameter<Schedule>)Parameters["DecodedSchedulingSolution"]; }
+    }
+
+    public JSSPEvaluator () : base () {
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
+      Parameters.Add(new LookupParameter<Schedule>("DecodedSchedulingSolution", "The decoded scheduling solution represented as generalized schedule."));
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+    }
+
+    protected abstract DoubleValue evaluate(Schedule schedule);
+    
+    public override IOperation Apply() {
+      Schedule decodedSchedulingSolution = DecodedSchedulingSolutionParameter.ActualValue;
+      QualityParameter.ActualValue = evaluate(decodedSchedulingSolution);
+      return base.Apply();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 6177)
@@ -34,5 +34,5 @@
   [Item("Makespan Evaluator", "Represents an evaluator using the maximum makespan of a schedule.")]
   [StorableClass]
-  public class MakespanEvaluator : JSSPEvaluator, IStochasticOperator {
+  public class MakespanEvaluator : JSSPEvaluator {
     [StorableConstructor]
     protected MakespanEvaluator(bool deserializing) : base(deserializing) { }
@@ -44,8 +44,5 @@
     }
 
-    
-
     public MakespanEvaluator () : base () { }
-
 
     protected override DoubleValue evaluate(Schedule schedule) {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs	(revision 6177)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Operators;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Optimization;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Evaluators {
+  [Item("Scheduling Evaluator", "Represents a general evaluator class for scheduling problems.")]
+  [StorableClass]
+  public class SchedulingEvaluator : AlgorithmOperator, ISchedulingEvaluator {
+    [StorableConstructor]
+    protected SchedulingEvaluator(bool deserializing) : base(deserializing) { }
+    protected SchedulingEvaluator(SchedulingEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SchedulingEvaluator(this, cloner);
+    }
+
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get {
+        if (Parameters.ContainsKey("Quality"))
+          return (ILookupParameter<DoubleValue>)Parameters["Quality"];
+        else
+          return null;
+      }
+    }
+
+    public void InitializeOperatorGraph<T>(JSSPDecoder<T> decoder, JSSPEvaluator evaluator) where T: Item, IJSSPEncoding{
+      OperatorGraph.InitialOperator = decoder;
+      decoder.Successor = evaluator;
+    }
+
+    public SchedulingEvaluator()
+      : base() {
+        Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
+        InitializeOperatorGraph<JSMEncoding>(new JSMDecoder(), new MakespanEvaluator());
+    }
+
+    public override IOperation Apply() {
+      return base.Apply();
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 6177)
@@ -49,28 +49,49 @@
   <ItemGroup>
     <Compile Include="Analyzers\BestSchedulingSolutionAnalyzer.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\JSMDecodingErrorPolicyTypes.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Crossovers\JSMJOXCrossover.cs" />
     <Compile Include="Encodings\JobSequenceMatrix\Crossovers\JSMCrossover.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Crossovers\JSMOrderCrossover.cs" />
     <Compile Include="Encodings\JobSequenceMatrix\Crossovers\JSMSXXCrossover.cs" />
     <Compile Include="Encodings\JobSequenceMatrix\JSMDecoder.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\JSMForcingStrategyTypes.cs" />
     <Compile Include="Encodings\JobSequenceMatrix\JSMRandomCreator.cs" />
     <Compile Include="Encodings\JobSequenceMatrix\JSMEncoding.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Manipulators\JSMShiftChangeManipulator.cs" />
     <Compile Include="Encodings\JobSequenceMatrix\Manipulators\JSMManipulator.cs" />
-    <Compile Include="Encodings\JobSequenceMatrix\Manipulators\JSMSwapManipulator.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Manipulators\JSMInsertionManipulator.cs" />
     <Compile Include="Encodings\JSSPCrossover.cs" />
-    <Compile Include="Encodings\JSSPEncoding.cs" />
+    <Compile Include="Encodings\JSSPDecoder.cs" />
+    <Compile Include="Encodings\JSSPEncodingTypes.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\Crossovers\PRVSinglePointCrossover.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\Crossovers\PRVDiscreteCrossover.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\Manipulators\PRVUniformOnePositionManipulator.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\PRVEncoding.cs" />
+    <Compile Include="Interfaces\IJSSPDecoder.cs" />
+    <Compile Include="Interfaces\IJSSPOperator.cs" />
+    <Compile Include="Interfaces\IPRVOperator.cs" />
+    <Compile Include="Interfaces\IJSSPEncoding.cs" />
     <Compile Include="Encodings\JSSPCreator.cs" />
     <Compile Include="Encodings\JSSPManipulator.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\Crossovers\PRVCrossover.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\PRVDecoder.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\PRVRandomCreator.cs" />
+    <Compile Include="Encodings\PriorityRulesVector\Manipulators\PRVManipulator.cs" />
     <Compile Include="Evaluators\MakespanEvaluator.cs" />
+    <Compile Include="IndexedTaskList.cs" />
     <Compile Include="Interfaces\IJSMOperator.cs" />
     <Compile Include="Interfaces\IJSSPCrossover.cs" />
     <Compile Include="Interfaces\IJSSPManipulator.cs" />
+    <Compile Include="Interfaces\ISchedulingCreator.cs" />
+    <Compile Include="Interfaces\ISchedulingEvaluator.cs" />
     <Compile Include="Resource.cs" />
-    <Compile Include="JSSPEvaluator.cs" />
-    <Compile Include="SchedulingCreator.cs" />
+    <Compile Include="Evaluators\JSSPEvaluator.cs" />
+    <Compile Include="Interfaces\IJSSPCreator.cs" />
     <Compile Include="JSSPJob.cs" />
     <Compile Include="JobShopSchedulingProblem.cs" />
     <Compile Include="JSSPTask.cs" />
-    <Compile Include="SchedulingOperator.cs" />
+    <Compile Include="Encodings\JSSPOperator.cs" />
+    <Compile Include="Evaluators\SchedulingEvaluator.cs" />
     <Compile Include="SchedulingProblem.cs" />
-    <Compile Include="Task.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -103,4 +124,8 @@
       <Name>HeuristicLab.Data-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj">
+      <Project>{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}</Project>
+      <Name>HeuristicLab.Encodings.IntegerVectorEncoding-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj">
       <Project>{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}</Project>
@@ -128,7 +153,5 @@
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Encodings\PriorityRulesVector\" />
-  </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/IndexedTaskList.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/IndexedTaskList.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/IndexedTaskList.cs	(revision 6177)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Indexed Tasklist", "Represents a list of tasks.")]
+  [StorableClass]
+  public class IndexedTaskList : ParameterizedNamedItem {
+    [StorableConstructor]
+    protected IndexedTaskList(bool deserializing) : base(deserializing) { }
+    protected IndexedTaskList(IndexedTaskList original, Cloner cloner)
+      : base(original, cloner) {
+      this.Index = cloner.Clone(original.Index);
+      this.Tasks = cloner.Clone(original.Tasks);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IndexedTaskList(this, cloner);
+    }
+
+    #region Parameter Properties
+    public ValueParameter<IntValue> IndexParameter {
+      get { return (ValueParameter<IntValue>)Parameters["Index"]; }
+    }
+    public ValueParameter<ItemList<JSSPTask>> TasksParameter {
+      get { return (ValueParameter<ItemList<JSSPTask>>)Parameters["Tasks"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IntValue Index {
+      get { return IndexParameter.Value; }
+      set { IndexParameter.Value = value; }
+    }
+    public ItemList<JSSPTask> Tasks {
+      get { return TasksParameter.Value; }
+      set { TasksParameter.Value = value; }
+    }
+    #endregion
+
+    public IndexedTaskList (IntValue index) : base (){
+      Parameters.Add(new ValueParameter<IntValue>("Index", "The index of the resource in the associated Scheduling Problem.", new IntValue()));
+      Parameters.Add(new ValueParameter<ItemList<JSSPTask>>("Tasks", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<JSSPTask>()));
+      Index = index;
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("TaskList#" + Index + " [ ");
+      foreach (JSSPTask t in Tasks) {
+        sb.Append(t.ToString() + " ");
+      }
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCreator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCreator.cs	(revision 6177)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface IJSSPCreator : IJSSPOperator, ISchedulingCreator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCrossover.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCrossover.cs	(revision 6177)
@@ -8,7 +8,7 @@
 
 namespace HeuristicLab.Problems.Scheduling.Interfaces {
-  interface IJSSPCrossover : ICrossover{
-    ILookupParameter<ItemArray<JSSPEncoding>> ParentsParameter { get; }
-    ILookupParameter<JSSPEncoding> ChildParameter { get; }
+  public interface IJSSPCrossover : ICrossover{
+    ILookupParameter<ItemArray<IJSSPEncoding>> ParentsParameter { get; }
+    ILookupParameter<IJSSPEncoding> ChildParameter { get; }
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPDecoder.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPDecoder.cs	(revision 6177)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface IJSSPDecoder : IOperator {
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPEncoding.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPEncoding.cs	(revision 6177)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface IJSSPEncoding : IItem {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPManipulator.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPManipulator.cs	(revision 6177)
@@ -26,5 +26,5 @@
 namespace HeuristicLab.Problems.Scheduling.Interfaces {
   public interface IJSSPManipulator : IManipulator {
-    ILookupParameter<JSSPEncoding> SchedulingSolutionParameter { get; }
+    ILookupParameter<IJSSPEncoding> SchedulingSolutionParameter { get; }
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs	(revision 6177)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface IJSSPOperator : IOperator {
+    ILookupParameter<ItemList<JSSPJob>> JobsParameter { get; }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IPRVOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IPRVOperator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IPRVOperator.cs	(revision 6177)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  interface IPRVOperator : IOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingCreator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingCreator.cs	(revision 6177)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface ISchedulingCreator : ISolutionCreator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs	(revision 6177)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs	(revision 6177)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface ISchedulingEvaluator : ISingleObjectiveEvaluator {
+  }
+}
Index: anches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPEvaluator.cs	(revision 6176)
+++ 	(revision )
@@ -1,81 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Optimization;
-using HeuristicLab.Data;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-using System;
-using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
-using HeuristicLab.Problems.Scheduling.Encodings;
-
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("Scheduling Evaluator", "Represents a general evaluator class for scheduling problems.")]
-  [StorableClass]
-  public abstract class JSSPEvaluator : SchedulingOperator, ISingleObjectiveEvaluator {
-    [StorableConstructor]
-    protected JSSPEvaluator(bool deserializing) : base(deserializing) { }
-    protected JSSPEvaluator(JSSPEvaluator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
-    }
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get { 
-        if (Parameters.ContainsKey("Quality"))
-          return (ILookupParameter<DoubleValue>)Parameters["Quality"];
-        else
-          return null;
-      }
-    }
-    public ILookupParameter<JSSPEncoding> ScheduleParameter {
-      get { 
-        if (Parameters.ContainsKey("SchedulingSolution"))
-          return (ILookupParameter<JSSPEncoding>)Parameters["SchedulingSolution"];
-        else
-          return null;
-      }
-    }
-    
-    protected abstract DoubleValue evaluate(Schedule schedule);
-
-
-    public JSSPEvaluator () : base () {
-      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
-      Parameters.Add(new LookupParameter<JSSPEncoding>("SchedulingSolution", "The object containing all necessary schedule solution data.")); 
-      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
-    }
-    
-
-    public override IOperation Apply() {
-      JSSPEncoding schedulingSolution = ScheduleParameter.ActualValue;
-      QualityParameter.ActualValue = evaluate (schedulingSolution.ToSchedule (NrOfResources, Jobs, RandomParameter.ActualValue));
-      return base.Apply();
-    }
-  }
-}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPJob.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPJob.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPJob.cs	(revision 6177)
@@ -33,11 +33,9 @@
   [Item("Job Class", "Represents a composition of tasks that require processing in a job shop scheduling problem.")]
   [StorableClass]
-  public class JSSPJob : ParameterizedNamedItem {
+  public class JSSPJob : IndexedTaskList {
     [StorableConstructor]
     protected JSSPJob(bool deserializing) : base(deserializing) { }
     protected JSSPJob(JSSPJob original, Cloner cloner)
       : base(original, cloner) {
-      this.JobIndex = cloner.Clone(original.JobIndex);
-      this.Tasks = cloner.Clone(original.Tasks);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -45,39 +43,10 @@
     }
 
-    #region Parameter Properties
-    public ValueParameter<IntValue> JobIndexParameter {
-      get { return (ValueParameter<IntValue>)Parameters["JobIndex"]; }
-    }
-
-    public ValueParameter<ItemList<Task>> TasksParameter {
-      get { return (ValueParameter<ItemList<Task>>)Parameters["Tasks"]; }
-    }
-    #endregion
-
-    #region Properties
-    public IntValue JobIndex {
-      get { return JobIndexParameter.Value; }
-      set { JobIndexParameter.Value = value; }
-    }
-    public ItemList<Task> Tasks {
-      get { return TasksParameter.Value; }
-      set { TasksParameter.Value = value; }
-    }
-    #endregion
-
-
-    public JSSPJob(IntValue ji) {
-      Parameters.Add(new ValueParameter<IntValue>("JobIndex", "The index of the job in the associated JSSP-Instance.", new IntValue()));
-      Parameters.Add(new ValueParameter<ItemList<Task>>("Tasks", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<Task>()));
-
-      JobIndex = ji;
-      Tasks = new ItemList<Task>();
-    }
-
+    public JSSPJob(IntValue index) : base (index) {}
 
     public override string ToString() {
       StringBuilder sb = new StringBuilder();
-      sb.Append("Job" + JobIndex + " [ ");
-      foreach (Task t in Tasks) {
+      sb.Append("Job#" + Index + " [ ");
+      foreach (JSSPTask t in Tasks) {
         sb.Append(t.ToString () + " ");
       }
@@ -85,5 +54,4 @@
       return sb.ToString();
     }
-
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPTask.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPTask.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPTask.cs	(revision 6177)
@@ -32,11 +32,17 @@
   [Item("Job Shop Scheduling Task Class", "Represents smallest unit for a job shop scheduling problem.")]
   [StorableClass]
-  public class JSSPTask : Task {
+  public class JSSPTask : Item {
     [StorableConstructor]
     protected JSSPTask(bool deserializing) : base(deserializing) { }
     protected JSSPTask(JSSPTask original, Cloner cloner)
       : base(original, cloner) {
+      this.ResourceNr = cloner.Clone(original.ResourceNr);
+      this.Duration = cloner.Clone(original.Duration);
+      this.StartTime = cloner.Clone(original.StartTime);
+      this.TaskNr = cloner.Clone(original.TaskNr);
+      this.IsScheduled = cloner.Clone(original.IsScheduled);
       this.Job = cloner.Clone(original.Job);
       this.PreviousTask = cloner.Clone(original.PreviousTask);
+      this.NextTask = cloner.Clone(original.NextTask);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -45,9 +51,24 @@
 
 
+    public BoolValue IsScheduled { get; set; }
+    public IntValue TaskNr { get; set; }
+    public IntValue ResourceNr { get; set; }
+    public DoubleValue Duration { get; set; }
+    public DoubleValue StartTime { get; set; }
+    public DoubleValue EndTime {
+      get {
+        return new DoubleValue(Duration.Value + StartTime.Value);
+      }
+    }
+    public JSSPJob Job { get; set; }
+    public JSSPTask PreviousTask { get; set; }
+    public JSSPTask NextTask { get; set; }
 
-    public JSSPJob Job { get; set; }
-    public Task PreviousTask { get; set; }
-
-    public JSSPTask (IntValue taskNr, IntValue resNr, DoubleValue duration, JSSPJob j) : base (taskNr, resNr, duration) {
+    public JSSPTask (IntValue taskNr, IntValue resNr, DoubleValue duration, JSSPJob j) : base () {
+      Duration = duration;
+      ResourceNr = resNr;
+      TaskNr = taskNr;
+      StartTime = new DoubleValue(0);
+      IsScheduled = new BoolValue(false);
       Job = j;
     }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 6177)
@@ -41,4 +41,6 @@
 using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers;
 using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Problems.Scheduling.Encodings.PriorityRulesVector;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
 
 namespace HeuristicLab.Problems.Scheduling {
@@ -52,4 +54,6 @@
       : base(original, cloner) {
         operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
+        this.encodingType = original.encodingType;
+        AttachEventHandlers();
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -59,25 +63,18 @@
 
     #region Parameter Properties
-    public ValueParameter<IntValue> NrOfResourcesParameter {
-      get { return (ValueParameter<IntValue>)Parameters["NrOfResources"]; }
-    }
     public ValueParameter<ItemList<JSSPJob>> JobsParameter {
       get { return (ValueParameter<ItemList<JSSPJob>>)Parameters["Jobs"]; }
     }
-    public OptionalValueParameter<JSSPEncoding> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<JSSPEncoding>)Parameters["BestKnownSolution"]; }
+    public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; }
     }
     #endregion
 
     #region Properties
-    public IntValue NrOfResources {
-      get { return NrOfResourcesParameter.Value; }
-      set { NrOfResourcesParameter.Value = value; }
-    }
     public ItemList<JSSPJob> Jobs {
       get { return JobsParameter.Value; }
       set { JobsParameter.Value = value; }
     }
-    public JSSPEncoding BestKnownSolution {
+    public Schedule BestKnownSolution {
       get { return BestKnownSolutionParameter.Value; }
       set { BestKnownSolutionParameter.Value = value; }
@@ -89,24 +86,47 @@
     private List<IOperator> operators;
 
+    [Storable]
+    private JSSPEncodingTypes encodingType;
 
     public JobShopSchedulingProblem()
-      : base(new MakespanEvaluator (), new JSMRandomCreator ()) {
-        Parameters.Add(new ValueParameter<IntValue>("NrOfResources", "Number of Resources used in this JSSP-Instance.", new IntValue()));
+      : base(new SchedulingEvaluator (), new JSMRandomCreator ()) {
         Parameters.Add(new ValueParameter<ItemList<JSSPJob>>("Jobs", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<JSSPJob>()));
-        Parameters.Add(new OptionalValueParameter<JSSPEncoding>("BestKnownSolution", "The best known solution of this JSSP instance."));
-
+        Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance.")); 
+        encodingType = JSSPEncodingTypes.JSMEncoding;
         InitializeOperators();
+        AttachEventHandlers();
     }
 
     #region Events
     //TODO: Implement event handlers for problem specific events!
+    protected override void OnSolutionCreatorChanged() {
+      if (SolutionCreator.GetType().Equals(typeof(JSMRandomCreator)))
+        encodingType = JSSPEncodingTypes.JSMEncoding;
+      else
+        encodingType = JSSPEncodingTypes.PRVEncoding;
+
+      InitializeOperators();
+    }
     #endregion
 
     #region Helpers
     private void InitializeOperators() {
-      Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
+      Operators.Clear();
+      ApplyEncoding();
       Operators.Add(new BestSchedulingSolutionAnalyzer());
       //ParameterizeAnalyzer();
       //ParameterizeOperators();
+    }
+
+    private void ApplyEncoding() {
+      if (encodingType == JSSPEncodingTypes.JSMEncoding) {
+        Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
+        ((SchedulingEvaluator)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<JSMEncoding>(new JSMDecoder(), new MakespanEvaluator());
+      } else {
+        if (encodingType == JSSPEncodingTypes.PRVEncoding) {
+          Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>());
+          ((SchedulingEvaluator)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<PRVEncoding>(new PRVDecoder(), new MakespanEvaluator());
+        }
+      }
     }
 
@@ -148,8 +168,10 @@
         string line = problemFile.ReadLine();
         List<string> data = SplitString(line);
-        int taskCount = 0;
         if (data.Count > 0 && ((int)data[0][0] >= 48 && (int)data[0][0] <= 57)) {
-          NrOfResources = new IntValue(Int32.Parse(data[1]));
           int jobCount = 0;
+          //data[0] = nrOfJobs
+          //data[1] = nrOfResources
+          if (data.Count > 2)
+            BestKnownQualityParameter.ActualValue = new DoubleValue(Double.Parse (data[2]));
           line = problemFile.ReadLine();
           data = SplitString(line);
@@ -157,8 +179,10 @@
             JSSPJob j = new JSSPJob(new IntValue(jobCount));
             for (int i = 0; i < data.Count; i++) {
-              JSSPTask t = new JSSPTask(new IntValue (taskCount), new IntValue(Int32.Parse(data[i])), new DoubleValue(Double.Parse(data[i + 1])), j);
-              taskCount++;
-              if (j.Tasks.Count > 0)
+              JSSPTask t = new JSSPTask(new IntValue (i / 2), new IntValue(Int32.Parse(data[i])), new DoubleValue(Double.Parse(data[i + 1])), j);
+              if (j.Tasks.Count > 0) {
                 t.PreviousTask = j.Tasks[j.Tasks.Count - 1];
+                j.Tasks[j.Tasks.Count - 1].NextTask = t;
+                t.StartTime = new DoubleValue (t.PreviousTask.EndTime.Value + 2);
+              }
               j.Tasks.Add(t);
               i++;
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Resource.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Resource.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Resource.cs	(revision 6177)
@@ -30,16 +30,12 @@
 using HeuristicLab.Common;
 
-//ATTENTION! This class may have lots of parallels with the HeuristicLab.Problems.Scheduling.JSSPJob class.
-
 namespace HeuristicLab.Problems.Scheduling {
   [Item("Resource Class", "Represents a resource used in scheduling problems.")]
   [StorableClass]
-  public class Resource : ParameterizedNamedItem {
+  public class Resource : IndexedTaskList {
     [StorableConstructor]
     protected Resource(bool deserializing) : base(deserializing) { }
     protected Resource(Resource original, Cloner cloner)
       : base(original, cloner) {
-      this.ResourceIndex = cloner.Clone(original.ResourceIndex);
-      this.Tasks = cloner.Clone(original.Tasks);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -47,22 +43,4 @@
     }
 
-    #region Parameter Properties
-    public ValueParameter<IntValue> ResourceIndexParameter {
-      get { return (ValueParameter<IntValue>)Parameters["ResourceIndex"]; }
-    }
-    public ValueParameter<ItemList<Task>> TasksParameter {
-      get { return (ValueParameter<ItemList<Task>>)Parameters["Tasks"]; }
-    }
-    #endregion
-
-    #region Properties
-    public IntValue ResourceIndex {
-      get { return ResourceIndexParameter.Value; }
-      set { ResourceIndexParameter.Value = value; }
-    }
-    public ItemList<Task> Tasks {
-      get { return TasksParameter.Value; }
-      set { TasksParameter.Value = value; }
-    }
     public DoubleValue TotalDuration {
       get {
@@ -73,20 +51,11 @@
       }
     }
-    #endregion
 
-
-    public Resource(IntValue ri) {
-      Parameters.Add(new ValueParameter<IntValue>("ResourceIndex", "The index of the resource in the associated Scheduling Problem.", new IntValue()));
-      Parameters.Add(new ValueParameter<ItemList<Task>>("Tasks", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<Task>()));
-
-      ResourceIndex = ri;
-      Tasks = new ItemList<Task>();
-    }
-
+    public Resource(IntValue index) : base (index) { }
 
     public override string ToString() {
       StringBuilder sb = new StringBuilder();
-      sb.Append("Job" + ResourceIndex + " [ ");
-      foreach (Task t in Tasks) {
+      sb.Append("Resource#" + Index + " [ ");
+      foreach (JSSPTask t in Tasks) {
         sb.Append(t.ToString() + " ");
       }
@@ -94,5 +63,4 @@
       return sb.ToString();
     }
-
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Schedule.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Schedule.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Schedule.cs	(revision 6177)
@@ -35,5 +35,5 @@
   [Item("Schedule Class", "Represents the general solution for scheduling problems.")]
   [StorableClass]
-  public class Schedule : ParameterizedNamedItem{
+  public class Schedule : NamedItem{
     [StorableConstructor]
     protected Schedule(bool deserializing) : base(deserializing) { }
@@ -41,4 +41,5 @@
       : base(original, cloner) {
         this.Resources = cloner.Clone (original.Resources);
+        this.Quality = cloner.Clone(original.Quality);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -46,21 +47,16 @@
     }
 
+    [Storable]
+    public ItemList<Resource> Resources;
 
-    #region Parameter Properties
-    public ValueParameter<ItemList<Resource>> ResourcesParameter {
-      get { return (ValueParameter<ItemList<Resource>>)Parameters["Resources"]; }
+    [Storable]
+    public DoubleValue Quality {
+      get;
+      set;
     }
-    #endregion
-
-    #region Properties
-    public ItemList<Resource> Resources {
-      get { return ResourcesParameter.Value; }
-      set { ResourcesParameter.Value = value; }
-    }
-    #endregion
-
 
     public Schedule(IntValue nrOfResources) {
-      Parameters.Add(new ValueParameter<ItemList<Resource>>("Resources", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<Resource>()));
+      Resources = new ItemList<Resource>();
+      Quality = new DoubleValue();
       for (int i = 0; i < nrOfResources.Value; i++) {
         Resources.Add(new Resource(new IntValue (i)));
@@ -68,24 +64,13 @@
     }
 
-
-    public event PropertyChangedEventHandler PropertyChanged;
-    private void OnPropertyChanged(string propertyName) {
-      var handler = PropertyChanged;
-      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
-    }
-
-
     public override string ToString() {
       StringBuilder sb = new StringBuilder();
       sb.Append("[ ");
-
       foreach (Resource r in Resources) {
         sb.Append(r.ToString () + " \n");
       }
-
       sb.Append("]");
       return sb.ToString();
     }
-
   }
 }
Index: anches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingCreator.cs	(revision 6176)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Optimization;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("Scheduling Problem Creator", "Represents the generalized form of creators for Scheduling Problems.")]
-  [StorableClass]
-  public abstract class SchedulingCreator : SchedulingOperator, ISolutionCreator {
-    [StorableConstructor]
-    protected SchedulingCreator(bool deserializing) : base(deserializing) { }
-    protected SchedulingCreator(SchedulingCreator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-
-    public SchedulingCreator() {
-    }
-  }
-}
Index: anches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingOperator.cs	(revision 6176)
+++ 	(revision )
@@ -1,69 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Operators;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("SchedulingOperator", "A scheduling operator.")]
-  [StorableClass]
-  public abstract class SchedulingOperator : SingleSuccessorOperator{
-    [StorableConstructor]
-    protected SchedulingOperator(bool deserializing) : base(deserializing) { }
-    protected SchedulingOperator(SchedulingOperator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    #region Parameter Properties
-    public ILookupParameter<IntValue> NrOfResourcesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["NrOfResources"]; }
-    }
-    public ILookupParameter<ItemList<JSSPJob>> JobsParameter {
-      get { return (ILookupParameter<ItemList<JSSPJob>>)Parameters["Jobs"]; }
-    }
-    #endregion
-
-    #region Properties
-    public IntValue NrOfResources {
-      get { return NrOfResourcesParameter.ActualValue; }
-    }
-    public ItemList<JSSPJob> Jobs {
-      get { return JobsParameter.ActualValue; }
-    }
-    #endregion
-
-    public SchedulingOperator()
-      : base() {
-      Parameters.Add(new LookupParameter<IntValue>("NrOfResources", "Number of Resources used in this JSSP-Instance."));
-      Parameters.Add(new LookupParameter<ItemList<JSSPJob>>("Jobs", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance."));
-    }
-
-
-  }
-}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 6176)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 6177)
@@ -28,9 +28,10 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Common;
+using HeuristicLab.Problems.Scheduling.Interfaces;
 
 namespace HeuristicLab.Problems.Scheduling {
   [Item("Scheduling Problem", "Abstract class that represents a Scheduling Problem")]
   [StorableClass]
-  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<JSSPEvaluator, SchedulingCreator> {
+  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<ISchedulingEvaluator, ISchedulingCreator> {
     [StorableConstructor]
     protected SchedulingProblem(bool deserializing) : base(deserializing) { }
@@ -39,5 +40,5 @@
     }
 
-    protected SchedulingProblem (JSSPEvaluator se, SchedulingCreator sc) : base (se, sc) {}
+    protected SchedulingProblem (ISchedulingEvaluator se, ISchedulingCreator sc) : base (se, sc) {}
 
   }
Index: anches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs	(revision 6176)
+++ 	(revision )
@@ -1,83 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("Task Class", "Represents the smallest unit of schedule definitions.")]
-  [StorableClass]
-  public class Task : Item {
-    [StorableConstructor]
-    protected Task(bool deserializing) : base(deserializing) { }
-    protected Task(Task original, Cloner cloner)
-      : base(original, cloner) {
-      this.ResourceNr = cloner.Clone(original.ResourceNr);
-      this.Duration = cloner.Clone(original.Duration);
-      this.StartTime = cloner.Clone(original.StartTime);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Task(this, cloner);
-    }
-
-    public Task () {
-
-    }
-
-    public Task (IntValue taskNr, IntValue resNr, DoubleValue duration) {
-      Duration = duration;
-      ResourceNr = resNr;
-      TaskNr = taskNr;
-      StartTime = new DoubleValue (0);
-      IsScheduled = new BoolValue (false);
-    }
-
-
-    public BoolValue IsScheduled { get; set; }
-    public IntValue TaskNr { get; set; }
-    public IntValue ResourceNr { get; set; }
-    public DoubleValue Duration { get; set; }
-    public DoubleValue StartTime { get; set; }
-    public DoubleValue EndTime { 
-      get { 
-        return new DoubleValue (Duration.Value + StartTime.Value); 
-      } 
-    }
-
-    public override string ToString() {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("[");
-      sb.Append(String.Format ("{0,4}", ResourceNr));
-      sb.Append(";");
-      sb.Append(String.Format ("{0,4}", Duration));
-      sb.Append("]");
-      return sb.ToString();
-    }
-  }
-}
