Free cookie consent management tool by TermsFeed Policy Generator

source: branches/GP-Refactoring-713/sources/HeuristicLab.CEDMA.Server/3.3/ExecuterBase.cs @ 2215

Last change on this file since 2215 was 2215, checked in by gkronber, 15 years ago

fixed build errors. #713

File size: 6.8 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Text;
25using System.Windows.Forms;
26using HeuristicLab.PluginInfrastructure;
27using System.Net;
28using System.ServiceModel;
29using HeuristicLab.CEDMA.DB.Interfaces;
30using HeuristicLab.CEDMA.DB;
31using System.ServiceModel.Description;
32using System.Linq;
33using HeuristicLab.CEDMA.Core;
34using HeuristicLab.Data;
35using HeuristicLab.Grid;
36using System.Diagnostics;
37using HeuristicLab.Core;
38using System.Threading;
39using HeuristicLab.Modeling;
40
41namespace HeuristicLab.CEDMA.Server {
42  public abstract class ExecuterBase : IExecuter {
43    internal event EventHandler Changed;
44
45    private IDispatcher dispatcher;
46    protected IDispatcher Dispatcher {
47      get { return dispatcher; }
48    }
49    private IStore store;
50
51    private int maxActiveJobs;
52    public int MaxActiveJobs {
53      get { return maxActiveJobs; }
54      set {
55        if (value < 0) throw new ArgumentException("Only positive values are allowed for MaxActiveJobs");
56        maxActiveJobs = value;
57        OnChanged();
58      }
59    }
60
61    public ExecuterBase(IDispatcher dispatcher, IStore store) {
62      maxActiveJobs = 10;
63      this.dispatcher = dispatcher;
64      this.store = store;
65    }
66
67    public void Start() {
68      new Thread(StartJobs).Start();
69    }
70
71    protected abstract void StartJobs();
72
73    protected void SetResults(IScope src, IScope target) {
74      foreach (IVariable v in src.Variables) {
75        target.AddVariable(v);
76      }
77      foreach (IScope subScope in src.SubScopes) {
78        target.AddSubScope(subScope);
79      }
80      foreach (KeyValuePair<string, string> alias in src.Aliases) {
81        target.AddAlias(alias.Key, alias.Value);
82      }
83    }
84
85    protected void StoreResults(IAlgorithm finishedAlgorithm) {
86      Entity modelEntity = new Entity(Ontology.CedmaNameSpace + Guid.NewGuid());
87      IModel model = finishedAlgorithm.Model;
88      List<Statement> statements = new List<Statement>();
89      statements.Add(new Statement(modelEntity, Ontology.InstanceOf, Ontology.TypeModel));
90      statements.Add(new Statement(modelEntity, Ontology.TargetVariable, new Literal(model.TargetVariable)));
91      statements.Add(new Statement(modelEntity, Ontology.Name, new Literal(finishedAlgorithm.Name)));
92     
93      statements.Add(new Statement(modelEntity, Ontology.TrainingMeanSquaredError, new Literal(model.TrainingMeanSquaredError)));
94      statements.Add(new Statement(modelEntity, Ontology.ValidationMeanSquaredError, new Literal(model.ValidationMeanSquaredError)));
95      statements.Add(new Statement(modelEntity, Ontology.TestMeanSquaredError, new Literal(model.TestMeanSquaredError)));
96      statements.Add(new Statement(modelEntity, Ontology.TrainingCoefficientOfDetermination, new Literal(model.TrainingCoefficientOfDetermination)));
97      statements.Add(new Statement(modelEntity, Ontology.ValidationCoefficientOfDetermination, new Literal(model.ValidationCoefficientOfDetermination)));
98      statements.Add(new Statement(modelEntity, Ontology.TestCoefficientOfDetermination, new Literal(model.TestCoefficientOfDetermination)));
99      statements.Add(new Statement(modelEntity, Ontology.TrainingVarianceAccountedFor, new Literal(model.TrainingVarianceAccountedFor)));
100      statements.Add(new Statement(modelEntity, Ontology.ValidationVarianceAccountedFor, new Literal(model.ValidationVarianceAccountedFor)));
101      statements.Add(new Statement(modelEntity, Ontology.TestVarianceAccountedFor, new Literal(model.TestVarianceAccountedFor)));
102      statements.Add(new Statement(modelEntity, Ontology.TrainingMeanAbsolutePercentageError, new Literal(model.TrainingMeanAbsolutePercentageError)));
103      statements.Add(new Statement(modelEntity, Ontology.ValidationMeanAbsolutePercentageError, new Literal(model.ValidationMeanAbsolutePercentageError)));
104      statements.Add(new Statement(modelEntity, Ontology.TestMeanAbsolutePercentageError, new Literal(model.TestMeanAbsolutePercentageError)));
105      statements.Add(new Statement(modelEntity, Ontology.TrainingMeanAbsolutePercentageOfRangeError, new Literal(model.TrainingMeanAbsolutePercentageOfRangeError)));
106      statements.Add(new Statement(modelEntity, Ontology.ValidationMeanAbsolutePercentageOfRangeError, new Literal(model.ValidationMeanAbsolutePercentageOfRangeError)));
107      statements.Add(new Statement(modelEntity, Ontology.TestMeanAbsolutePercentageOfRangeError, new Literal(model.TestMeanAbsolutePercentageOfRangeError)));
108
109      for (int i = 0; i < finishedAlgorithm.Dataset.Columns; i++) {
110        try {
111          string variableName = finishedAlgorithm.Dataset.GetVariableName(i);
112          double qualImpact = model.GetVariableQualityImpact(variableName);
113          double evalImpact = model.GetVariableEvaluationImpact(variableName);
114
115          Entity inputVariableEntity = new Entity(Ontology.CedmaNameSpace + Guid.NewGuid());
116          statements.Add(new Statement(inputVariableEntity, Ontology.InstanceOf, Ontology.TypeVariableImpact));
117          statements.Add(new Statement(modelEntity, Ontology.HasInputVariable, inputVariableEntity));
118          statements.Add(new Statement(inputVariableEntity, Ontology.EvaluationImpact, new Literal(evalImpact)));
119          statements.Add(new Statement(inputVariableEntity, Ontology.QualityImpact, new Literal(qualImpact)));
120          statements.Add(new Statement(inputVariableEntity, Ontology.Name, new Literal(variableName)));
121        }
122        catch (ArgumentException) {
123          // ignore
124        }
125      }
126
127      byte[] serializedModel = PersistenceManager.SaveToGZip(model.Data);
128      statements.Add(new Statement(modelEntity, Ontology.SerializedData, new Literal(Convert.ToBase64String(serializedModel))));
129      store.AddRange(statements);
130    }
131
132    public abstract string[] GetJobs();
133
134    protected internal void OnChanged() {
135      if (Changed != null) Changed(this, new EventArgs());
136    }
137
138    #region IViewable Members
139
140    public IView CreateView() {
141      return new ExecuterView(this);
142    }
143
144    #endregion
145  }
146}
Note: See TracBrowser for help on using the repository browser.