Free cookie consent management tool by TermsFeed Policy Generator

Changeset 2012


Ignore:
Timestamp:
06/04/09 19:14:48 (15 years ago)
Author:
gkronber
Message:

Fixed a few bugs introduced with r2000. #656 (CEDMA server should handle only one data set (problem) at a time)

Location:
trunk/sources
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs

    r2000 r2012  
    4040  public abstract class DispatcherBase : IDispatcher {
    4141    private IStore store;
     42    private DataSet dataset;
     43   
    4244    public DispatcherBase(IStore store) {
    4345      this.store = store;
     
    4547
    4648    public IAlgorithm GetNextJob() {
    47       // find and select a dataset
    48       var dataSetVar = new HeuristicLab.CEDMA.DB.Interfaces.Variable("DataSet");
    49       var dataSetQuery = new Statement[] {
    50         new Statement(dataSetVar, Ontology.PredicateInstanceOf, Ontology.TypeDataSet)
    51       };
    52 
    53       Entity[] datasets = store.Query("?DataSet <" + Ontology.PredicateInstanceOf.Uri + "> <" + Ontology.TypeDataSet.Uri + "> .", 0, 100)
    54         .Select(x => (Entity)x.Get("DataSet"))
    55         .ToArray();
    56 
    57       // no datasets => do nothing
    58       if (datasets.Length == 0) return null;
    59 
    60       Entity dataSetEntity = SelectDataSet(datasets);
    61       DataSet dataSet = new DataSet(store, dataSetEntity);
    62 
    63       int targetVariable = SelectTargetVariable(dataSetEntity, dataSet.Problem.AllowedTargetVariables.ToArray());
    64       IAlgorithm selectedAlgorithm = SelectAlgorithm(dataSetEntity, targetVariable, dataSet.Problem.LearningTask);
    65       string targetVariableName = dataSet.Problem.GetVariableName(targetVariable);
     49      if (dataset == null) {
     50        var datasetEntities = store.Query("?DataSet <" + Ontology.PredicateInstanceOf.Uri + "> <" + Ontology.TypeDataSet.Uri + "> .", 0, 1)
     51          .Select(x => (Entity)x.Get("DataSet"));
     52        if (datasetEntities.Count() == 0) return null;
     53        dataset = new DataSet(store, datasetEntities.ElementAt(0));
     54      }
     55      int targetVariable = SelectTargetVariable(dataset.Problem.AllowedTargetVariables.ToArray());
     56      IAlgorithm selectedAlgorithm = SelectAlgorithm(targetVariable, dataset.Problem.LearningTask);
     57      string targetVariableName = dataset.Problem.GetVariableName(targetVariable);
    6658
    6759      if (selectedAlgorithm != null) {
    68         SetProblemParameters(selectedAlgorithm, dataSet.Problem, targetVariable);
     60        SetProblemParameters(selectedAlgorithm, dataset.Problem, targetVariable);
    6961      }
    7062      return selectedAlgorithm;
    7163    }
    7264
    73     public abstract Entity SelectDataSet(Entity[] datasets);
    74     public abstract int SelectTargetVariable(Entity dataSet, int[] targetVariables);
    75     public abstract IAlgorithm SelectAlgorithm(Entity dataSet, int targetVariable, LearningTask learningTask);
     65    public abstract int SelectTargetVariable(int[] targetVariables);
     66    public abstract IAlgorithm SelectAlgorithm(int targetVariable, LearningTask learningTask);
    7667
    7768    private void SetProblemParameters(IAlgorithm algo, Problem problem, int targetVariable) {
  • trunk/sources/HeuristicLab.CEDMA.Server/3.3/GridExecuter.cs

    r1922 r2012  
    5353    }
    5454
    55     public GridExecuter(IDispatcher dispatcher, IStore store, string gridUrl) : base(dispatcher, store) {
     55    public GridExecuter(IDispatcher dispatcher, IStore store, string gridUrl)
     56      : base(dispatcher, store) {
    5657      this.jobManager = new JobManager(gridUrl);
     58      activeAlgorithms = new Dictionary<WaitHandle, IAlgorithm>();
    5759      jobManager.Reset();
    5860    }
     
    115117        int i = 0;
    116118        foreach (IAlgorithm a in activeAlgorithms.Values) {
    117           retVal[i++] = "Target-Variable: " + a.TargetVariable + " " + a.Description;
     119          retVal[i++] = a.Name + " " + a.Dataset.GetVariableName(a.TargetVariable);
    118120        }
    119121        return retVal;
  • trunk/sources/HeuristicLab.CEDMA.Server/3.3/HiveExecuter.cs

    r1922 r2012  
    120120        int i = 0;
    121121        foreach (IAlgorithm a in activeAlgorithms.Values) {
    122           retVal[i++] = "Target-Variable: " + a.TargetVariable + " " + a.Description;
     122          retVal[i++] = a.Name + " " + a.Dataset.GetVariableName(a.TargetVariable);
    123123        }
    124124        return retVal;
  • trunk/sources/HeuristicLab.CEDMA.Server/3.3/SimpleDispatcher.cs

    r1873 r2012  
    4141    private Random random;
    4242    private IStore store;
    43     private Dictionary<Entity, Dictionary<int, List<string>>> finishedAndDispatchedRuns;
     43    private Dictionary<int, List<string>> finishedAndDispatchedRuns;
    4444
    4545    public SimpleDispatcher(IStore store)
     
    4747      this.store = store;
    4848      random = new Random();
    49       finishedAndDispatchedRuns = new Dictionary<Entity, Dictionary<int, List<string>>>();
     49      finishedAndDispatchedRuns = new Dictionary<int, List<string>>();
    5050      PopulateFinishedRuns();
    5151    }
    5252
    53     public override IAlgorithm SelectAlgorithm(Entity dataSetEntity, int targetVariable, LearningTask learningTask) {
     53    public override IAlgorithm SelectAlgorithm(int targetVariable, LearningTask learningTask) {
    5454      DiscoveryService ds = new DiscoveryService();
    5555      IAlgorithm[] algos = ds.GetInstances<IAlgorithm>();
     
    5858        case LearningTask.Regression: {
    5959            var regressionAlgos = algos.Where(a => (a as IClassificationAlgorithm) == null && (a as ITimeSeriesAlgorithm) == null);
    60             selectedAlgorithm = ChooseDeterministic(dataSetEntity, targetVariable, regressionAlgos) ?? ChooseStochastic(regressionAlgos);
     60            selectedAlgorithm = ChooseDeterministic(targetVariable, regressionAlgos) ?? ChooseStochastic(regressionAlgos);
    6161            break;
    6262          }
    6363        case LearningTask.Classification: {
    6464            var classificationAlgos = algos.Where(a => (a as IClassificationAlgorithm) != null);
    65             selectedAlgorithm = ChooseDeterministic(dataSetEntity, targetVariable, classificationAlgos) ?? ChooseStochastic(classificationAlgos);
     65            selectedAlgorithm = ChooseDeterministic(targetVariable, classificationAlgos) ?? ChooseStochastic(classificationAlgos);
    6666            break;
    6767          }
    6868        case LearningTask.TimeSeries: {
    6969            var timeSeriesAlgos = algos.Where(a => (a as ITimeSeriesAlgorithm) != null);
    70             selectedAlgorithm = ChooseDeterministic(dataSetEntity, targetVariable, timeSeriesAlgos) ?? ChooseStochastic(timeSeriesAlgos);
     70            selectedAlgorithm = ChooseDeterministic(targetVariable, timeSeriesAlgos) ?? ChooseStochastic(timeSeriesAlgos);
    7171            break;
    7272          }
    7373      }
    7474      if (selectedAlgorithm != null) {
    75         AddDispatchedRun(dataSetEntity, targetVariable, selectedAlgorithm.Name);
     75        AddDispatchedRun(targetVariable, selectedAlgorithm.Name);
    7676      }
    7777      return selectedAlgorithm;
    7878    }
    7979
    80     private IAlgorithm ChooseDeterministic(Entity dataSetEntity, int targetVariable, IEnumerable<IAlgorithm> algos) {
     80    private IAlgorithm ChooseDeterministic(int targetVariable, IEnumerable<IAlgorithm> algos) {
    8181      var deterministicAlgos = algos
    8282        .Where(a => (a as IStochasticAlgorithm) == null)
    83         .Where(a => AlgorithmFinishedOrDispatched(dataSetEntity, targetVariable, a.Name) == false);
     83        .Where(a => AlgorithmFinishedOrDispatched(targetVariable, a.Name) == false);
    8484
    8585      if (deterministicAlgos.Count() == 0) return null;
     
    9393    }
    9494
    95     public override Entity SelectDataSet(Entity[] datasets) {
    96       return datasets[random.Next(datasets.Length)];
    97     }
    98 
    99     public override int SelectTargetVariable(Entity dataSet, int[] targetVariables) {
     95    public override int SelectTargetVariable(int[] targetVariables) {
    10096      return targetVariables[random.Next(targetVariables.Length)];
    10197    }
    10298
    10399    private void PopulateFinishedRuns() {
     100      var datasetEntity = store
     101        .Query(
     102        "?Dataset <" + Ontology.PredicateInstanceOf + "> <" + Ontology.TypeDataSet + "> .", 0, 1)
     103        .Select(x => (Entity)x.Get("Dataset")).ElementAt(0);
     104      DataSet ds = new DataSet(store, datasetEntity);
     105
    104106      var result = store
    105         .Query("?DataSet <" + Ontology.PredicateInstanceOf.Uri + "> <" + Ontology.TypeDataSet.Uri + "> ." + Environment.NewLine +
    106         "?DataSet <" + Ontology.PredicateHasModel + "> ?Model ." + Environment.NewLine +
     107        .Query(
    107108        "?Model <" + Ontology.TargetVariable + "> ?TargetVariable ." + Environment.NewLine +
    108109        "?Model <" + Ontology.AlgorithmName + "> ?AlgoName .",
    109110        0, 1000)
    110         .Select(x => new Resource[] { (Entity)x.Get("DataSet"), (Literal)x.Get("TargetVariable"), (Literal)x.Get("AlgoName") });
     111        .Select(x => new Resource[] { (Literal)x.Get("TargetVariable"), (Literal)x.Get("AlgoName") });
    111112
    112113      foreach (Resource[] row in result) {
    113         Entity dataset = (Entity)row[0];
    114         int targetVariable = (int)((Literal)row[1]).Value;
    115         string algoName = (string)((Literal)row[2]).Value;
    116         if (!AlgorithmFinishedOrDispatched(dataset, targetVariable, algoName))
    117           AddDispatchedRun(dataset, targetVariable, algoName);
     114        string targetVariable = (string)((Literal)row[0]).Value;
     115        string algoName = (string)((Literal)row[1]).Value;
     116
     117        int targetVariableIndex = ds.Problem.Dataset.GetVariableIndex(targetVariable);
     118        if (!AlgorithmFinishedOrDispatched(targetVariableIndex, algoName))
     119          AddDispatchedRun(targetVariableIndex, algoName);
    118120      }
    119121    }
    120122
    121     private void AddDispatchedRun(Entity dataSetEntity, int targetVariable, string algoName) {
    122       if (!finishedAndDispatchedRuns.ContainsKey(dataSetEntity)) {
    123         finishedAndDispatchedRuns[dataSetEntity] = new Dictionary<int, List<string>>();
     123    private void AddDispatchedRun(int targetVariable, string algoName) {
     124      if (!finishedAndDispatchedRuns.ContainsKey(targetVariable)) {
     125        finishedAndDispatchedRuns[targetVariable] = new List<string>();
    124126      }
    125       if (!finishedAndDispatchedRuns[dataSetEntity].ContainsKey(targetVariable)) {
    126         finishedAndDispatchedRuns[dataSetEntity][targetVariable] = new List<string>();
    127       }
    128       finishedAndDispatchedRuns[dataSetEntity][targetVariable].Add(algoName);
     127      finishedAndDispatchedRuns[targetVariable].Add(algoName);
    129128    }
    130129
    131     private bool AlgorithmFinishedOrDispatched(Entity dataSetEntity, int targetVariable, string algoName) {
     130    private bool AlgorithmFinishedOrDispatched(int targetVariable, string algoName) {
    132131      return
    133         finishedAndDispatchedRuns.ContainsKey(dataSetEntity) &&
    134         finishedAndDispatchedRuns[dataSetEntity].ContainsKey(targetVariable) &&
    135         finishedAndDispatchedRuns[dataSetEntity][targetVariable].Contains(algoName);
     132        finishedAndDispatchedRuns.ContainsKey(targetVariable) &&
     133        finishedAndDispatchedRuns[targetVariable].Contains(algoName);
    136134    }
    137135  }
  • trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs

    r1786 r2012  
    120120    }
    121121
     122    public int GetVariableIndex(string variableName) {
     123      for (int i = 0; i < variableNames.Length; i++) {
     124        if (variableNames[i].Equals(variableName)) return i;
     125      }
     126      throw new ArgumentException("The variable name " + variableName + " was not found.");
     127    }
     128
    122129    public void SetVariableName(int variableIndex, string name) {
    123130      variableNames[variableIndex] = name;
    124131    }
    125132
    126 
    127133    public override IView CreateView() {
    128134      return new DatasetView(this);
    129135    }
    130136
     137    #region persistence
    131138    public override object Clone(IDictionary<Guid, object> clonedObjects) {
    132139      Dataset clone = new Dataset();
     
    256263      return xs;
    257264    }
     265    #endregion
    258266
    259267    public double GetMean(int column) {
Note: See TracChangeset for help on using the changeset viewer.