Free cookie consent management tool by TermsFeed Policy Generator

Changeset 5193


Ignore:
Timestamp:
01/03/11 00:46:55 (13 years ago)
Author:
swagner
Message:

Merged ParallelEngine branch back into trunk (#1333)

Location:
trunk/sources
Files:
25 edited
8 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources

  • trunk/sources/HeuristicLab 3.3.sln

    r5191 r5193  
    9090    {A51DA44F-CB35-4F6F-99F5-2A2E904AB93B} = {A51DA44F-CB35-4F6F-99F5-2A2E904AB93B}
    9191    {2C36CD4F-E5F5-43A4-801A-201EA895FE17} = {2C36CD4F-E5F5-43A4-801A-201EA895FE17}
     92    {00814351-4AB8-4088-9B99-F62787B89E93} = {00814351-4AB8-4088-9B99-F62787B89E93}
    9293    {3EAF1454-086D-44A2-8509-B1BA24DB1865} = {3EAF1454-086D-44A2-8509-B1BA24DB1865}
    9394    {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} = {3BD61258-31DA-4B09-89C0-4F71FEF5F05A}
     
    324325EndProject
    325326Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.NSGA2-3.3", "HeuristicLab.Algorithms.NSGA2\3.3\HeuristicLab.Algorithms.NSGA2-3.3.csproj", "{15452B9F-A436-4139-8EE7-DA72FB8D3664}"
     327EndProject
     328Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ParallelEngine-3.3", "HeuristicLab.ParallelEngine\3.3\HeuristicLab.ParallelEngine-3.3.csproj", "{00814351-4AB8-4088-9B99-F62787B89E93}"
    326329EndProject
    327330Global
     
    14661469    {15452B9F-A436-4139-8EE7-DA72FB8D3664}.Release|x86.ActiveCfg = Release|x86
    14671470    {15452B9F-A436-4139-8EE7-DA72FB8D3664}.Release|x86.Build.0 = Release|x86
     1471    {00814351-4AB8-4088-9B99-F62787B89E93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1472    {00814351-4AB8-4088-9B99-F62787B89E93}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1473    {00814351-4AB8-4088-9B99-F62787B89E93}.Debug|x64.ActiveCfg = Debug|x64
     1474    {00814351-4AB8-4088-9B99-F62787B89E93}.Debug|x64.Build.0 = Debug|x64
     1475    {00814351-4AB8-4088-9B99-F62787B89E93}.Debug|x86.ActiveCfg = Debug|x86
     1476    {00814351-4AB8-4088-9B99-F62787B89E93}.Debug|x86.Build.0 = Debug|x86
     1477    {00814351-4AB8-4088-9B99-F62787B89E93}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1478    {00814351-4AB8-4088-9B99-F62787B89E93}.Release|Any CPU.Build.0 = Release|Any CPU
     1479    {00814351-4AB8-4088-9B99-F62787B89E93}.Release|x64.ActiveCfg = Release|x64
     1480    {00814351-4AB8-4088-9B99-F62787B89E93}.Release|x64.Build.0 = Release|x64
     1481    {00814351-4AB8-4088-9B99-F62787B89E93}.Release|x86.ActiveCfg = Release|x86
     1482    {00814351-4AB8-4088-9B99-F62787B89E93}.Release|x86.Build.0 = Release|x86
    14681483  EndGlobalSection
    14691484  GlobalSection(SolutionProperties) = preSolution
  • trunk/sources/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj

    r5163 r5193  
    1212    <AssemblyName>HeuristicLab.Common-3.3</AssemblyName>
    1313    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    14     <TargetFrameworkProfile></TargetFrameworkProfile>
     14    <TargetFrameworkProfile>
     15    </TargetFrameworkProfile>
    1516    <FileAlignment>512</FileAlignment>
    1617    <SignAssembly>true</SignAssembly>
  • trunk/sources/HeuristicLab.Core/3.3/Engine.cs

    r4722 r5193  
    2323using System.Collections.Generic;
    2424using System.Threading;
     25using System.Threading.Tasks;
    2526using HeuristicLab.Common;
    2627using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    4243    }
    4344
    44     private bool pausePending, stopPending;
     45    #region Variables for communication between threads
     46    private CancellationTokenSource cancellationTokenSource;
     47    private bool stopPending;
    4548    private DateTime lastUpdateTime;
    46     private System.Timers.Timer timer;
     49    #endregion
    4750
    4851    [StorableConstructor]
    49     protected Engine(bool deserializing)
    50       : base(deserializing) {
    51       pausePending = stopPending = false;
    52       timer = new System.Timers.Timer(100);
    53       timer.AutoReset = true;
    54       timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    55     }
     52    protected Engine(bool deserializing) : base(deserializing) { }
    5653    protected Engine(Engine original, Cloner cloner)
    5754      : base(original, cloner) {
     
    6259      for (int i = contexts.Length - 1; i >= 0; i--)
    6360        executionStack.Push(cloner.Clone(contexts[i]));
    64       pausePending = original.pausePending;
    65       stopPending = original.stopPending;
    66       timer = new System.Timers.Timer(100);
    67       timer.AutoReset = true;
    68       timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    6961    }
    7062    protected Engine()
     
    7264      log = new Log();
    7365      executionStack = new Stack<IOperation>();
    74       pausePending = stopPending = false;
    75       timer = new System.Timers.Timer(100);
    76       timer.AutoReset = true;
    77       timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    7866    }
    7967
     
    9785    public override void Start() {
    9886      base.Start();
    99       ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
     87      cancellationTokenSource = new CancellationTokenSource();
     88      stopPending = false;
     89      Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token);
     90      task.ContinueWith(t => {
     91        try {
     92          t.Wait();
     93        }
     94        catch (AggregateException ex) {
     95          try {
     96            ex.Flatten().Handle(x => x is OperationCanceledException);
     97          }
     98          catch (AggregateException remaining) {
     99            if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]);
     100            else OnExceptionOccurred(remaining);
     101          }
     102        }
     103        cancellationTokenSource.Dispose();
     104        cancellationTokenSource = null;
     105        if (stopPending) executionStack.Clear();
     106        if (executionStack.Count == 0) OnStopped();
     107        else OnPaused();
     108      });
    100109    }
    101110    protected override void OnStarted() {
     
    106115    public override void Pause() {
    107116      base.Pause();
    108       pausePending = true;
     117      cancellationTokenSource.Cancel();
    109118    }
    110119    protected override void OnPaused() {
     
    115124    public override void Stop() {
    116125      base.Stop();
    117       stopPending = true;
    118       if (ExecutionState == ExecutionState.Paused) OnStopped();
     126      if (ExecutionState == ExecutionState.Paused) {
     127        executionStack.Clear();
     128        OnStopped();
     129      } else {
     130        stopPending = true;
     131        cancellationTokenSource.Cancel();
     132      }
    119133    }
    120134    protected override void OnStopped() {
     
    129143
    130144    private void Run(object state) {
     145      CancellationToken cancellationToken = (CancellationToken)state;
     146
    131147      OnStarted();
    132       pausePending = stopPending = false;
     148      lastUpdateTime = DateTime.Now;
     149      System.Timers.Timer timer = new System.Timers.Timer(100);
     150      timer.AutoReset = true;
     151      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
     152      timer.Start();
     153      try {
     154        Run(cancellationToken);
     155      }
     156      finally {
     157        timer.Stop();
     158        timer.Dispose();
     159        ExecutionTime += DateTime.Now - lastUpdateTime;
     160      }
    133161
    134       lastUpdateTime = DateTime.Now;
    135       timer.Start();
    136       while (!pausePending && !stopPending && (executionStack.Count > 0)) {
    137         ProcessNextOperation();
    138       }
    139       timer.Stop();
    140       ExecutionTime += DateTime.Now - lastUpdateTime;
    141 
    142       if (pausePending) OnPaused();
    143       else OnStopped();
     162      cancellationToken.ThrowIfCancellationRequested();
    144163    }
    145 
    146     protected abstract void ProcessNextOperation();
     164    protected abstract void Run(CancellationToken cancellationToken);
    147165
    148166    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
  • trunk/sources/HeuristicLab.Core/3.3/Interfaces/IOperator.cs

    r2845 r5193  
    2121
    2222using System;
     23using System.Threading;
    2324
    2425namespace HeuristicLab.Core {
    2526  /// <summary>
    26   /// Interface to represent an operator (e.g. GreaterThanComparator,...),
    27   /// a basic instruction of an algorithm.
     27  /// Interface to represent an operator.
    2828  /// </summary>
    2929  public interface IOperator : IParameterizedNamedItem {
    30     /// <summary>
    31     /// Gets or sets a boolean value whether the engine should stop here during the run.
    32     /// </summary>
    3330    bool Breakpoint { get; set; }
    3431
    35     /// <summary>
    36     /// Executes the current instance on the specified <paramref name="scope"/>.
    37     /// </summary>
    38     /// <param name="scope">The scope where to execute the current instance.</param>
    39     /// <returns>The next operation.</returns>
    40     IOperation Execute(IExecutionContext context);
    41     /// <summary>
    42     /// Aborts the current operator.
    43     /// </summary>
    44     void Abort();
     32    IOperation Execute(IExecutionContext context, CancellationToken cancellationToken);
    4533
    46     /// <summary>
    47     /// Occurs when the breakpoint flag of the current instance was changed.
    48     /// </summary>
    49     event EventHandler BreakpointChanged;
    50     /// <summary>
    51     /// Occurs when the current instance is executed.
    52     /// </summary>
     34    event EventHandler BreakpointChanged;
    5335    event EventHandler Executed;
    5436  }
  • trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngine.cs

    r5117 r5193  
    2323using System.Linq;
    2424using System.Threading;
     25using System.Threading.Tasks;
    2526using HeuristicLab.Common;
    2627using HeuristicLab.Core;
     
    3839    protected DebugEngine(bool deserializing)
    3940      : base(deserializing) {
    40       pausePending = stopPending = false;
    4141      InitializeTimer();
    4242    }
     
    4848      ExecutionStack = cloner.Clone(original.ExecutionStack);
    4949      OperatorTrace = cloner.Clone(original.OperatorTrace);
    50       pausePending = original.pausePending;
    51       stopPending = original.stopPending;
    5250      InitializeTimer();
    5351      currentOperation = cloner.Clone(original.currentOperation);
    54       currentOperator = cloner.Clone(original.currentOperator);
    5552    }
    5653    public DebugEngine()
     
    5956      ExecutionStack = new ExecutionStack();
    6057      OperatorTrace = new OperatorTrace();
    61       pausePending = stopPending = false;
    6258      InitializeTimer();
    6359    }
     
    8682    public OperatorTrace OperatorTrace { get; private set; }
    8783
    88     private bool pausePending, stopPending;
     84    private CancellationTokenSource cancellationTokenSource;
     85    private bool stopPending;
    8986    private DateTime lastUpdateTime;
    9087    private System.Timers.Timer timer;
    91 
    92     [Storable]
    93     private IOperator currentOperator;
    9488
    9589    [Storable]
     
    159153    public virtual void Step(bool skipStackOperations) {
    160154      OnStarted();
     155      cancellationTokenSource = new CancellationTokenSource();
     156      stopPending = false;
    161157      lastUpdateTime = DateTime.Now;
    162158      timer.Start();
    163       ProcessNextOperation(true);
    164       while (skipStackOperations && !(CurrentOperation is IAtomicOperation) && CanContinue)
    165         ProcessNextOperation(true);
     159      try {
     160        ProcessNextOperation(true, cancellationTokenSource.Token);
     161        while (skipStackOperations && !(CurrentOperation is IAtomicOperation) && CanContinue)
     162          ProcessNextOperation(true, cancellationTokenSource.Token);
     163      }
     164      catch (Exception ex) {
     165        OnExceptionOccurred(ex);
     166      }
    166167      timer.Stop();
    167168      ExecutionTime += DateTime.Now - lastUpdateTime;
    168       OnPaused();
     169      cancellationTokenSource.Dispose();
     170      cancellationTokenSource = null;
     171      if (stopPending) ExecutionStack.Clear();
     172      if (stopPending || !CanContinue) OnStopped();
     173      else OnPaused();
    169174    }
    170175
    171176    public override void Start() {
    172177      base.Start();
    173       ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
     178      cancellationTokenSource = new CancellationTokenSource();
     179      stopPending = false;
     180      Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token);
     181      task.ContinueWith(t => {
     182        try {
     183          t.Wait();
     184        }
     185        catch (AggregateException ex) {
     186          try {
     187            ex.Flatten().Handle(x => x is OperationCanceledException);
     188          }
     189          catch (AggregateException remaining) {
     190            if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]);
     191            else OnExceptionOccurred(remaining);
     192          }
     193        }
     194        cancellationTokenSource.Dispose();
     195        cancellationTokenSource = null;
     196
     197        if (stopPending) ExecutionStack.Clear();
     198        if (stopPending || !CanContinue) OnStopped();
     199        else OnPaused();
     200      });
    174201    }
    175202
     
    181208    public override void Pause() {
    182209      base.Pause();
    183       pausePending = true;
    184       if (currentOperator != null) currentOperator.Abort();
     210      cancellationTokenSource.Cancel();
    185211    }
    186212
     
    193219      CurrentOperation = null;
    194220      base.Stop();
    195       stopPending = true;
    196       if (currentOperator != null) currentOperator.Abort();
    197       if (ExecutionState == ExecutionState.Paused) OnStopped();
     221      if (ExecutionState == ExecutionState.Paused) {
     222        ExecutionStack.Clear();
     223        OnStopped();
     224      } else {
     225        stopPending = true;
     226        cancellationTokenSource.Cancel();
     227      }
    198228    }
    199229
     
    209239
    210240    private void Run(object state) {
     241      CancellationToken cancellationToken = (CancellationToken)state;
     242
    211243      OnStarted();
    212       pausePending = stopPending = false;
    213 
    214244      lastUpdateTime = DateTime.Now;
    215245      timer.Start();
    216       if (!pausePending && !stopPending && CanContinue)
    217         ProcessNextOperation(false);
    218       while (!pausePending && !stopPending && CanContinue && !IsAtBreakpoint)
    219         ProcessNextOperation(false);
    220       timer.Stop();
    221       ExecutionTime += DateTime.Now - lastUpdateTime;
    222 
    223       if (IsAtBreakpoint)
    224         Log.LogMessage(string.Format("Breaking before: {0}", CurrentAtomicOperation.Operator.Name));
    225       if (pausePending || IsAtBreakpoint)
    226         OnPaused();
    227       else
    228         OnStopped();
     246      try {
     247        if (!cancellationToken.IsCancellationRequested && CanContinue)
     248          ProcessNextOperation(false, cancellationToken);
     249        while (!cancellationToken.IsCancellationRequested && CanContinue && !IsAtBreakpoint)
     250          ProcessNextOperation(false, cancellationToken);
     251        cancellationToken.ThrowIfCancellationRequested();
     252      }
     253      finally {
     254        timer.Stop();
     255        ExecutionTime += DateTime.Now - lastUpdateTime;
     256
     257        if (IsAtBreakpoint)
     258          Log.LogMessage(string.Format("Breaking before: {0}", CurrentAtomicOperation.Operator.Name));
     259      }
    229260    }
    230261
     
    247278    /// is pushed on the stack again.<br/>
    248279    /// If the execution was successful <see cref="EngineBase.OnOperationExecuted"/> is called.</remarks>
    249     protected virtual void ProcessNextOperation(bool logOperations) {
    250       try {
    251         IAtomicOperation atomicOperation = CurrentOperation as IAtomicOperation;
    252         OperationCollection operations = CurrentOperation as OperationCollection;
    253         if (atomicOperation != null && operations != null)
    254           throw new InvalidOperationException("Current operation is both atomic and an operation collection");
    255 
    256         if (atomicOperation != null) {
    257           if (logOperations)
    258             Log.LogMessage(string.Format("Performing atomic operation {0}", Utils.Name(atomicOperation)));
    259           PerformAtomicOperation(atomicOperation);
    260         } else if (operations != null) {
    261           if (logOperations)
    262             Log.LogMessage("Expanding operation collection");
    263           ExecutionStack.AddRange(operations.Reverse());
    264           CurrentOperation = null;
    265         } else if (ExecutionStack.Count > 0) {
    266           if (logOperations)
    267             Log.LogMessage("Popping execution stack");
    268           CurrentOperation = ExecutionStack.Last();
    269           ExecutionStack.RemoveAt(ExecutionStack.Count - 1);
    270         } else {
    271           if (logOperations)
    272             Log.LogMessage("Nothing to do");
    273         }
    274         OperatorTrace.Regenerate(CurrentAtomicOperation);
    275       } catch (Exception x) {
    276         OnExceptionOccurred(x);
    277       }
    278     }
    279 
    280     protected virtual void PerformAtomicOperation(IAtomicOperation operation) {
     280    protected virtual void ProcessNextOperation(bool logOperations, CancellationToken cancellationToken) {
     281      IAtomicOperation atomicOperation = CurrentOperation as IAtomicOperation;
     282      OperationCollection operations = CurrentOperation as OperationCollection;
     283      if (atomicOperation != null && operations != null)
     284        throw new InvalidOperationException("Current operation is both atomic and an operation collection");
     285
     286      if (atomicOperation != null) {
     287        if (logOperations)
     288          Log.LogMessage(string.Format("Performing atomic operation {0}", Utils.Name(atomicOperation)));
     289        PerformAtomicOperation(atomicOperation, cancellationToken);
     290      } else if (operations != null) {
     291        if (logOperations)
     292          Log.LogMessage("Expanding operation collection");
     293        ExecutionStack.AddRange(operations.Reverse());
     294        CurrentOperation = null;
     295      } else if (ExecutionStack.Count > 0) {
     296        if (logOperations)
     297          Log.LogMessage("Popping execution stack");
     298        CurrentOperation = ExecutionStack.Last();
     299        ExecutionStack.RemoveAt(ExecutionStack.Count - 1);
     300      } else {
     301        if (logOperations)
     302          Log.LogMessage("Nothing to do");
     303      }
     304      OperatorTrace.Regenerate(CurrentAtomicOperation);
     305    }
     306
     307    protected virtual void PerformAtomicOperation(IAtomicOperation operation, CancellationToken cancellationToken) {
    281308      if (operation != null) {
    282309        try {
    283           currentOperator = operation.Operator;
    284           IOperation successor = operation.Operator.Execute((IExecutionContext)operation);
     310          IOperation successor = operation.Operator.Execute((IExecutionContext)operation, cancellationToken);
    285311          if (successor != null) {
    286312            OperatorTrace.RegisterParenthood(operation, successor);
    287313            ExecutionStack.Add(successor);
    288314          }
    289           currentOperator = null;
    290315          CurrentOperation = null;
    291         } catch (Exception ex) {
    292           OnExceptionOccurred(new OperatorExecutionException(operation.Operator, ex));
    293           Pause();
     316        }
     317        catch (Exception ex) {
     318          if (ex is OperationCanceledException) throw ex;
     319          else throw new OperatorExecutionException(operation.Operator, ex);
    294320        }
    295321      }
  • trunk/sources/HeuristicLab.Operators/3.3/Operator.cs

    r4722 r5193  
    2222using System;
    2323using System.Drawing;
     24using System.Threading;
    2425using HeuristicLab.Common;
    2526using HeuristicLab.Core;
     
    2829namespace HeuristicLab.Operators {
    2930  /// <summary>
    30   /// The base class for all operators.
     31  /// Base class for operators.
    3132  /// </summary>
    3233  [Item("Operator", "Base class for operators.")]
     
    4344    }
    4445
    45     [Storable]
    46     private IExecutionContext executionContext;
     46    private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
    4747    protected IExecutionContext ExecutionContext {
    48       get { return executionContext; }
     48      get { return executionContexts.Value.Value; }
    4949      private set {
    50         if (value != executionContext) {
    51           executionContext = value;
    52           OnExecutionContextChanged();
     50        if (value != executionContexts.Value.Value) {
     51          executionContexts.Value.Value = value;
    5352        }
    5453      }
    5554    }
    56 
    57     /// <summary>
    58     /// Flag whether the current instance has been canceled.
    59     /// </summary>
    60     private bool canceled;
    61     /// <inheritdoc/>
    62     protected bool Canceled {
    63       get { return canceled; }
    64       private set {
    65         if (value != canceled) {
    66           canceled = value;
    67           OnCanceledChanged();
    68         }
    69       }
     55    private CancellationToken cancellationToken;
     56    protected CancellationToken CancellationToken {
     57      get { return cancellationToken; }
    7058    }
    7159
    7260    [Storable]
    7361    private bool breakpoint;
    74     /// <inheritdoc/>
    75     /// <remarks>Calls <see cref="OnBreakpointChanged"/> in the setter.</remarks>
    7662    public bool Breakpoint {
    7763      get { return breakpoint; }
     
    8672
    8773    [StorableConstructor]
    88     protected Operator(bool deserializing) : base(deserializing) { }
     74    protected Operator(bool deserializing)
     75      : base(deserializing) {
     76      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     77    }
    8978    protected Operator(Operator original, Cloner cloner)
    9079      : base(original, cloner) {
    91       this.canceled = original.canceled;
     80      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    9281      this.breakpoint = original.breakpoint;
    93       this.executionContext = cloner.Clone<IExecutionContext>(original.executionContext);
    9482    }
    95     /// <summary>
    96     /// Initializes a new instance of <see cref="OperatorBase"/> setting the breakpoint flag and
    97     /// the canceled flag to <c>false</c> and the name of the operator to the type name.
    98     /// </summary>
    9983    protected Operator()
    10084      : base() {
    101       canceled = false;
     85      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    10286      breakpoint = false;
    10387    }
    10488    protected Operator(string name)
    10589      : base(name) {
    106       canceled = false;
     90      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    10791      breakpoint = false;
    10892    }
    10993    protected Operator(string name, ParameterCollection parameters)
    11094      : base(name, parameters) {
    111       canceled = false;
     95      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    11296      breakpoint = false;
    11397    }
    11498    protected Operator(string name, string description)
    11599      : base(name, description) {
    116       canceled = false;
     100      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    117101      breakpoint = false;
    118102    }
    119103    protected Operator(string name, string description, ParameterCollection parameters)
    120104      : base(name, description, parameters) {
    121       canceled = false;
     105      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    122106      breakpoint = false;
    123107    }
    124108
    125     /// <inheritdoc/>
    126     public virtual IOperation Execute(IExecutionContext context) {
     109    public virtual IOperation Execute(IExecutionContext context, CancellationToken cancellationToken) {
    127110      try {
    128         Canceled = false;
    129111        ExecutionContext = context;
     112        this.cancellationToken = cancellationToken;
    130113        foreach (IParameter param in Parameters)
    131114          param.ExecutionContext = context;
     
    140123      }
    141124    }
    142     /// <inheritdoc/>
    143     /// <remarks>Sets property <see cref="Canceled"/> to <c>true</c>.</remarks>
    144     public void Abort() {
    145       Canceled = true;
    146     }
    147     /// <summary>
    148     /// Performs the current operator on the specified <paramref name="scope"/>.
    149     /// </summary>
    150     /// <param name="scope">The scope where to execute the operator</param>
    151     /// <returns><c>null</c>.</returns>
    152125    public abstract IOperation Apply();
    153126
    154     protected virtual void OnExecutionContextChanged() { }
    155     protected virtual void OnCanceledChanged() { }
    156     /// <inheritdoc/>
    157127    public event EventHandler BreakpointChanged;
    158     /// <summary>
    159     /// Fires a new <c>BreakpointChanged</c> event.
    160     /// </summary>
    161128    protected virtual void OnBreakpointChanged() {
    162129      if (BreakpointChanged != null) {
     
    164131      }
    165132    }
    166     /// <inheritdoc/>
    167133    public event EventHandler Executed;
    168     /// <summary>
    169     /// Fires a new <c>Executed</c> event.
    170     /// </summary>
    171134    protected virtual void OnExecuted() {
    172135      if (Executed != null) {
  • trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedProblem.cs

    r4722 r5193  
    3030using HeuristicLab.Parameters;
    3131using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     32using System.Threading;
    3233
    3334namespace HeuristicLab.Optimization {
     
    248249      public bool Breakpoint { get; set; }
    249250
    250       public IOperation Execute(IExecutionContext context) {
    251         throw new InvalidOperationException("Please choose an appropriate evaluation operator.");
    252       }
    253 
    254       public void Abort() {
     251      public IOperation Execute(IExecutionContext context, CancellationToken cancellationToken) {
    255252        throw new InvalidOperationException("Please choose an appropriate evaluation operator.");
    256253      }
  • trunk/sources/HeuristicLab.Parameters/3.3/LookupParameter.cs

    r4722 r5193  
    5252    }
    5353    public new T ActualValue {
    54       get {
    55         if (cachedActualValue == null) cachedActualValue = GetActualValue();
    56         return (T)cachedActualValue;
    57       }
    58       set {
    59         cachedActualValue = value;
    60         SetActualValue(value);
    61       }
     54      get { return (T)base.ActualValue; }
     55      set { base.ActualValue = value; }
    6256    }
    6357
  • trunk/sources/HeuristicLab.Parameters/3.3/Parameter.cs

    r4722 r5193  
    2222using System;
    2323using System.Drawing;
     24using System.Threading;
    2425using HeuristicLab.Common;
    2526using HeuristicLab.Core;
     
    5354      get { return dataType; }
    5455    }
    55     protected IItem cachedActualValue;
     56
     57    private Lazy<ThreadLocal<IItem>> cachedActualValues;
    5658    public IItem ActualValue {
    5759      get {
    58         if (cachedActualValue == null) cachedActualValue = GetActualValue();
    59         return cachedActualValue;
     60        if (cachedActualValues.Value.Value == null) cachedActualValues.Value.Value = GetActualValue();
     61        return cachedActualValues.Value.Value;
    6062      }
    6163      set {
    62         cachedActualValue = value;
     64        cachedActualValues.Value.Value = value;
    6365        SetActualValue(value);
    6466      }
    6567    }
    66     [Storable]
    67     private IExecutionContext executionContext;
     68    private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
    6869    public IExecutionContext ExecutionContext {
    69       get { return executionContext; }
     70      get { return executionContexts.Value.Value; }
    7071      set {
    71         if (value != executionContext) {
    72           executionContext = value;
    73           cachedActualValue = null;
    74           OnExecutionContextChanged();
     72        if (value != executionContexts.Value.Value) {
     73          executionContexts.Value.Value = value;
     74          cachedActualValues.Value.Value = null;
    7575        }
    7676      }
     
    7878
    7979    [StorableConstructor]
    80     protected Parameter(bool deserializing) : base(deserializing) { }
     80    protected Parameter(bool deserializing)
     81      : base(deserializing) {
     82      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     83      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     84    }
    8185    protected Parameter(Parameter original, Cloner cloner)
    8286      : base(original, cloner) {
    8387      dataType = original.dataType;
    84       executionContext = cloner.Clone(original.executionContext);
     88      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     89      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    8590    }
    8691    protected Parameter()
    8792      : base("Anonymous") {
    8893      dataType = typeof(IItem);
     94      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     95      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    8996    }
    9097    protected Parameter(string name, Type dataType)
     
    9299      if (dataType == null) throw new ArgumentNullException();
    93100      this.dataType = dataType;
     101      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     102      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    94103    }
    95104    protected Parameter(string name, string description, Type dataType)
     
    97106      if (dataType == null) throw new ArgumentNullException();
    98107      this.dataType = dataType;
     108      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     109      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    99110    }
    100111
     
    105116    protected abstract IItem GetActualValue();
    106117    protected abstract void SetActualValue(IItem value);
    107 
    108     protected virtual void OnExecutionContextChanged() { }
    109118  }
    110119}
  • trunk/sources/HeuristicLab.Problems.DataAnalysis

  • trunk/sources/HeuristicLab.Problems.VehicleRouting

  • trunk/sources/HeuristicLab.Problems.VehicleRouting.Views

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs

    r4722 r5193  
    5454      IAtomicOperation op = this.ExecutionContext.CreateOperation(
    5555        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
    56       op.Operator.Execute((IExecutionContext)op);
     56      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    5757
    5858      string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs

    r4722 r5193  
    5151      IAtomicOperation op = this.ExecutionContext.CreateOperation(
    5252        InnerManipulatorParameter.ActualValue, this.ExecutionContext.Scope);
    53       op.Operator.Execute((IExecutionContext)op);
     53      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    5454    }
    5555  }
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaPermutationMoveOperator.cs

    r4722 r5193  
    4646      PermutationMoveOperatorParameter.PermutationParameter.ActualName = VRPToursParameter.ActualName;
    4747      IAtomicOperation op = this.ExecutionContext.CreateChildOperation(PermutationMoveOperatorParameter);
    48       op.Operator.Execute((IExecutionContext)op);
     48      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    4949
    5050      return next;
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs

    r5129 r5193  
    6868      moveMaker.PermutationParameter.ActualName = VRPToursParameter.ActualName;
    6969      IAtomicOperation op = this.ExecutionContext.CreateChildOperation(moveMaker);
    70       op.Operator.Execute((IExecutionContext)op);
     70      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    7171
    7272      return next;
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs

    r4722 r5193  
    2929  [Item("PrinsPermutationCrossover", "An operator which crosses two VRP representations using a standard permutation operator.  It is implemented as described in Prins, C. (2004). A simple and effective evolutionary algorithm for the vehicle routing problem. Computers & Operations Research, 12:1985-2002.")]
    3030  [StorableClass]
    31   public sealed class PrinsPermutationCrossover : PrinsCrossover, IPrinsOperator {   
     31  public sealed class PrinsPermutationCrossover : PrinsCrossover, IPrinsOperator {
    3232    public IValueLookupParameter<IPermutationCrossover> InnerCrossoverParameter {
    3333      get { return (IValueLookupParameter<IPermutationCrossover>)Parameters["InnerCrossover"]; }
     
    5252      IAtomicOperation op = this.ExecutionContext.CreateOperation(
    5353        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
    54       op.Operator.Execute((IExecutionContext)op);
     54      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    5555
    5656      string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs

    r4722 r5193  
    4242    public PrinsPermutationManipulator()
    4343      : base() {
    44         Parameters.Add(new ValueLookupParameter<IPermutationManipulator>("InnerManipulator", "The permutation manipulator.", new TranslocationManipulator()));
     44      Parameters.Add(new ValueLookupParameter<IPermutationManipulator>("InnerManipulator", "The permutation manipulator.", new TranslocationManipulator()));
    4545    }
    4646
     
    5050      IAtomicOperation op = this.ExecutionContext.CreateOperation(
    5151        InnerManipulatorParameter.ActualValue, this.ExecutionContext.Scope);
    52       op.Operator.Execute((IExecutionContext)op);
     52      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    5353    }
    5454  }
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs

    r4722 r5193  
    5454      IAtomicOperation op = this.ExecutionContext.CreateOperation(
    5555        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
    56       op.Operator.Execute((IExecutionContext)op);
     56      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    5757
    5858      string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
  • trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs

    r4722 r5193  
    5252      IAtomicOperation op = this.ExecutionContext.CreateOperation(
    5353        InnerManipulatorParameter.ActualValue, this.ExecutionContext.Scope);
    54       op.Operator.Execute((IExecutionContext)op);
     54      op.Operator.Execute((IExecutionContext)op, CancellationToken);
    5555    }
    5656  }
  • trunk/sources/HeuristicLab.SequentialEngine/3.3/SequentialEngine.cs

    r4722 r5193  
    2121
    2222using System;
     23using System.Threading;
    2324using HeuristicLab.Common;
    2425using HeuristicLab.Core;
     
    2728namespace HeuristicLab.SequentialEngine {
    2829  /// <summary>
    29   /// Represents an engine that executes its steps sequentially, also if they could be executed
    30   /// in parallel.
     30  /// Engine for sequential execution of algorithms.
    3131  /// </summary>
    3232  [StorableClass]
    3333  [Item("Sequential Engine", "Engine for sequential execution of algorithms.")]
    3434  public class SequentialEngine : Engine {
    35     private IOperator currentOperator;
    36 
    3735    [StorableConstructor]
    3836    protected SequentialEngine(bool deserializing) : base(deserializing) { }
     
    4442    }
    4543
    46     /// <summary>
    47     /// Deals with the next operation, if it is an <see cref="AtomicOperation"/> it is executed,
    48     /// if it is a <see cref="CompositeOperation"/> its single operations are pushed on the execution stack.
    49     /// </summary>
    50     /// <remarks>If an error occurs during the execution the operation is aborted and the operation
    51     /// is pushed on the stack again.<br/>
    52     /// If the execution was successful <see cref="EngineBase.OnOperationExecuted"/> is called.</remarks>
    53     protected override void ProcessNextOperation() {
    54       currentOperator = null;
    55       IOperation next = ExecutionStack.Pop();
    56       OperationCollection coll = next as OperationCollection;
    57       while (coll != null) {
    58         for (int i = coll.Count - 1; i >= 0; i--)
    59           ExecutionStack.Push(coll[i]);
    60         next = ExecutionStack.Count > 0 ? ExecutionStack.Pop() : null;
    61         coll = next as OperationCollection;
    62       }
    63       IAtomicOperation operation = next as IAtomicOperation;
    64       if (operation != null) {
    65         try {
    66           currentOperator = operation.Operator;
    67           ExecutionStack.Push(operation.Operator.Execute((IExecutionContext)operation));
    68         }
    69         catch (Exception ex) {
    70           ExecutionStack.Push(operation);
    71           OnExceptionOccurred(new OperatorExecutionException(operation.Operator, ex));
    72           Pause();
    73         }
    74         if (operation.Operator.Breakpoint) {
    75           Log.LogMessage(string.Format("Breakpoint: {0}", operation.Operator.Name != string.Empty ? operation.Operator.Name : operation.Operator.ItemName));
    76           Pause();
     44    protected override void Run(CancellationToken cancellationToken) {
     45      IOperation next;
     46      OperationCollection coll;
     47      IAtomicOperation operation;
     48
     49      while (ExecutionStack.Count > 0) {
     50        cancellationToken.ThrowIfCancellationRequested();
     51
     52        next = ExecutionStack.Pop();
     53        if (next is OperationCollection) {
     54          coll = (OperationCollection)next;
     55          for (int i = coll.Count - 1; i >= 0; i--)
     56            if (coll[i] != null) ExecutionStack.Push(coll[i]);
     57        } else if (next is IAtomicOperation) {
     58          operation = (IAtomicOperation)next;
     59          try {
     60            next = operation.Operator.Execute((IExecutionContext)operation, cancellationToken);
     61          }
     62          catch (Exception ex) {
     63            ExecutionStack.Push(operation);
     64            if (ex is OperationCanceledException) throw ex;
     65            else throw new OperatorExecutionException(operation.Operator, ex);
     66          }
     67          if (next != null) ExecutionStack.Push(next);
     68
     69          if (operation.Operator.Breakpoint) {
     70            Log.LogMessage(string.Format("Breakpoint: {0}", operation.Operator.Name != string.Empty ? operation.Operator.Name : operation.Operator.ItemName));
     71            Pause();
     72          }
    7773        }
    7874      }
    7975    }
    80 
    81     public override void Pause() {
    82       base.Pause();
    83       if (currentOperator != null) currentOperator.Abort();
    84     }
    85     public override void Stop() {
    86       base.Stop();
    87       if (currentOperator != null) currentOperator.Abort();
    88     }
    8976  }
    9077}
  • trunk/sources/HeuristicLab/3.3/Files.txt

    r5143 r5193  
    4242HeuristicLab.Optimization.Views\3.3:HeuristicLab.Optimization.Views-3.3.dll
    4343HeuristicLab.Optimizer\3.3:HeuristicLab.Optimizer-3.3.dll
     44HeuristicLab.ParallelEngine\3.3:HeuristicLab.ParallelEngine-3.3.dll
    4445HeuristicLab.Parameters\3.3:HeuristicLab.Parameters-3.3.dll
    4546HeuristicLab.Parameters.Views\3.3:HeuristicLab.Parameters.Views-3.3.dll
  • trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings

    r5114 r5193  
    1414    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.VehicleRouting.Views-3.3.dll" />
    1515    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Persistence-3.3.dll" />
    16     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.SequentialEngine-3.3.dll" />
     16    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll" />
    1717    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.DataAnalysis.Views-3.3.dll" />
    18     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3.dll" />
     18    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.Knapsack-3.3.dll" />
    1919    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\LibSVM-1.6.3.dll" />
    2020    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views.GraphVisualization-3.3.dll" />
    2121    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.PluginInfrastructure-3.3.dll" />
     22    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm-3.3.dll" />
    2223    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Core.Views-3.3.dll" />
    2324    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimizer-3.3.dll" />
     
    2728    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Tracing-3.3.dll" />
    2829    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll" />
    29     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Google.ProtocolBuffers-0.9.1.dll" />
    3030    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ALGLIB-2.5.0.dll" />
    3131    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.SharpDevelop.Dom.dll" />
    32     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data.Views-3.3.dll" />
     32    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.TabuSearch-3.3.dll" />
    3333    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Netron.Diagramming.Core-3.0.2672.12446.dll" />
     34    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views-3.3.dll" />
    3435    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll" />
    3536    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.PermutationEncoding-3.3.dll" />
     
    3940    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ProtobufCS-0.9.1.dll" />
    4041    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ArtificialAnt.Views-3.3.dll" />
    41     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm.WindowsForms-3.3.dll" />
     42    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data.Views-3.3.dll" />
    4243    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Persistence.GUI-3.3.dll" />
    4344    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.VehicleRouting-3.3.dll" />
    4445    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Programmable-3.3.dll" />
    4546    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.PermutationEncoding.Views-3.3.dll" />
    46     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.TabuSearch-3.3.dll" />
     47    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ParallelEngine-3.3.dll" />
    4748    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TestFunctions.Views-3.3.dll" />
    4849    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Common-3.3.dll" />
    4950    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Netron-3.0.2672.12446.dll" />
     51    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.SequentialEngine-3.3.dll" />
    5052    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.SharpZipLib.dll" />
    5153    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ArtificialAnt-3.3.dll" />
    5254    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll" />
    5355    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators-3.3.dll" />
    54     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Mono.Cecil.dll" />
     56    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.NSGA2-3.3.dll" />
    5557    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.SimulatedAnnealing-3.3.dll" />
    5658    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.DataAnalysis-3.3.dll" />
     
    5860    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.OneMax-3.3.dll" />
    5961    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Core-3.3.dll" />
    60     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views-3.3.dll" />
     62    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation-3.3.dll" />
    6163    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TravelingSalesman-3.3.dll" />
    6264    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll" />
     
    6466    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TestFunctions-3.3.dll" />
    6567    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll" />
    66     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm-3.3.dll" />
     68    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Parameters.Views-3.3.dll" />
    6769    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Collections-3.3.dll" />
    6870    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ALGLIB-2.5.0.dll" />
     
    7173    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TravelingSalesman.Views-3.3.dll" />
    7274    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm.WindowsForms-3.3_Accessor.dll" />
    73     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Parameters.Views-3.3.dll" />
     75    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.LibSVM-1.6.3.dll" />
    7476    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.TextEditor.dll" />
    75     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.LibSVM-1.6.3.dll" />
     77    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab-3.3.Tests.dll" />
    7678    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Analysis.Views-3.3.dll" />
    77     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation-3.3.dll" />
     79    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm.WindowsForms-3.3.dll" />
    7880    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.Views-3.3.dll" />
    79     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll" />
    8081    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Views-3.3.dll" />
    8182    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.log4net-1.2.10.0.dll" />
    8283    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis-3.3.dll" />
    8384    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Regression-3.3.dll" />
    84     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.Knapsack-3.3.dll" />
     85    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data-3.3.dll" />
     86    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Mono.Cecil.dll" />
    8587    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimization-3.3.dll" />
    8688    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Random-3.3.dll" />
    8789    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Clients.Common-3.3.dll" />
    88     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data-3.3.dll" />
     90    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Google.ProtocolBuffers-0.9.1.dll" />
    8991    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.GP.Views-3.3.dll" />
    9092    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.GeneticAlgorithm-3.3.dll" />
    9193    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ALGLIB-3.1.0.dll" />
    9294    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.OneMax.Views-3.3.dll" />
    93     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab-3.3.Tests.dll" />
     95    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3.dll" />
    9496    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimization.Operators-3.3.dll" />
    9597  </Deployment>
  • trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj

    r5191 r5193  
    151151      <Name>HeuristicLab.Algorithms.LocalSearch-3.3</Name>
    152152    </ProjectReference>
     153    <ProjectReference Include="..\..\..\HeuristicLab.Algorithms.NSGA2\3.3\HeuristicLab.Algorithms.NSGA2-3.3.csproj">
     154      <Project>{15452B9F-A436-4139-8EE7-DA72FB8D3664}</Project>
     155      <Name>HeuristicLab.Algorithms.NSGA2-3.3</Name>
     156    </ProjectReference>
    153157    <ProjectReference Include="..\..\..\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm\3.3\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj">
    154158      <Project>{F409DD9E-1E9C-4EB1-AA3A-9F6E987C6E58}</Project>
     
    331335      <Name>HeuristicLab.Optimizer-3.3</Name>
    332336    </ProjectReference>
     337    <ProjectReference Include="..\..\..\HeuristicLab.ParallelEngine\3.3\HeuristicLab.ParallelEngine-3.3.csproj">
     338      <Project>{00814351-4AB8-4088-9B99-F62787B89E93}</Project>
     339      <Name>HeuristicLab.ParallelEngine-3.3</Name>
     340    </ProjectReference>
    333341    <ProjectReference Include="..\..\..\HeuristicLab.Parameters.Views\3.3\HeuristicLab.Parameters.Views-3.3.csproj">
    334342      <Project>{AE5B1CE5-9862-4D6F-A700-D72CD9AEA295}</Project>
     
    460468  </ItemGroup>
    461469  <ItemGroup>
    462     <None Include="Builder.testsettings" />
     470    <None Include="Builder.testsettings">
     471      <SubType>Designer</SubType>
     472    </None>
    463473    <None Include="GA_TSP.hl">
    464474      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
Note: See TracChangeset for help on using the changeset viewer.