Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/14/09 19:56:04 (15 years ago)
Author:
gkronber
Message:
  • introduced a variablename to index mapping for SVM models (to make sure we can use the model for prediction in the model analyzer)
  • added support to enable and disable algorithms in the dispatcher and removed DispatcherBase
  • fixed bugs when calculating variable impacts and reading the final model of GP algorithms

#722 (IModel should provide a Predict() method to get predicted values for an input vector)

File:
1 edited

Legend:

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

    r2258 r2290  
    3737namespace HeuristicLab.CEDMA.Server {
    3838  public abstract class DispatcherBase : IDispatcher {
    39     private IModelingDatabase database;
    40     public IModelingDatabase Database {
    41       get {
    42         return database;
    43       }
    44     }
    45     private List<int> allowedTargetVariables;
    46     private Dictionary<int, List<int>> activeInputVariables;
    47     private Problem problem;
    48     public Problem Problem {
    49       get {
    50         return problem;
    51       }
    52     }
    53     internal event EventHandler Changed;
    54     private object locker = new object();
    55 
    56     public IEnumerable<string> TargetVariables {
    57       get {
    58         if (problem != null) {
    59           return Enumerable.Range(0, problem.Dataset.Columns).Select(x => problem.Dataset.GetVariableName(x));
    60         } else return new string[0];
    61       }
    62     }
    63 
    64     public IEnumerable<string> InputVariables {
    65       get {
    66         if (problem != null) {
    67           return TargetVariables;
    68         } else return new string[0];
    69       }
    70     }
    71 
    72     public DispatcherBase(IModelingDatabase database, Problem problem) {
    73       this.problem = problem;
    74       allowedTargetVariables = new List<int>();
    75       activeInputVariables = new Dictionary<int, List<int>>();
    76       problem.Changed += (sender, args) => {
    77         lock (locker) {
    78           allowedTargetVariables.Clear();
    79           activeInputVariables.Clear();
    80         }
    81         OnChanged();
    82       };
    83       this.database = database;
    84     }
    85 
    86     public HeuristicLab.Modeling.IAlgorithm GetNextJob() {
    87       if (allowedTargetVariables.Count > 0) {
    88         int[] targetVariables, inputVariables;
    89         lock (locker) {
    90           targetVariables = allowedTargetVariables.ToArray();
    91         }
    92 
    93         int targetVariable = SelectTargetVariable(targetVariables);
    94 
    95         lock (locker) {
    96           inputVariables = activeInputVariables[targetVariable].ToArray();
    97         }
    98 
    99         HeuristicLab.Modeling.IAlgorithm selectedAlgorithm = SelectAndConfigureAlgorithm(targetVariable, inputVariables, problem);
    100 
    101         return selectedAlgorithm;
    102       } else return null;
    103     }
    104 
    105     public virtual int SelectTargetVariable(int[] targetVariables) {
    106       Random rand = new Random();
    107       return targetVariables[rand.Next(targetVariables.Length)];
    108     }
    109     public abstract HeuristicLab.Modeling.IAlgorithm SelectAndConfigureAlgorithm(int targetVariable, int[] inputVariables, Problem problem);
    110 
    111     #region IViewable Members
    112 
    113     public IView CreateView() {
    114       return new DispatcherView(this);
    115     }
    116 
    117     #endregion
    118 
    119     internal void EnableTargetVariable(string name) {
    120       lock (locker)
    121         allowedTargetVariables.Add(problem.Dataset.GetVariableIndex(name));
    122     }
    123 
    124     internal void DisableTargetVariable(string name) {
    125       lock (locker)
    126         allowedTargetVariables.Remove(problem.Dataset.GetVariableIndex(name));
    127     }
    128 
    129     internal void EnableInputVariable(string target, string name) {
    130       lock (locker) {
    131         int targetIndex = problem.Dataset.GetVariableIndex(target);
    132         int inputIndex = problem.Dataset.GetVariableIndex(name);
    133         if (!activeInputVariables.ContainsKey(targetIndex)) activeInputVariables[targetIndex] = new List<int>();
    134         if (!activeInputVariables[targetIndex].Contains(inputIndex)) {
    135           activeInputVariables[targetIndex].Add(inputIndex);
    136         }
    137       }
    138     }
    139 
    140     internal void DisableInputVariable(string target, string name) {
    141       lock (locker) {
    142         int targetIndex = problem.Dataset.GetVariableIndex(target);
    143         int inputIndex = problem.Dataset.GetVariableIndex(name);
    144         if (!activeInputVariables.ContainsKey(targetIndex)) activeInputVariables[targetIndex] = new List<int>();
    145         while (activeInputVariables[targetIndex].Remove(inputIndex)) { }
    146       }
    147     }
    148 
    149     private void OnChanged() {
    150       if (Changed != null) Changed(this, new EventArgs());
    151     }
    152 
    153     internal IEnumerable<string> GetInputVariables(string target) {
    154       int targetIndex = problem.Dataset.GetVariableIndex(target);
    155       if (!activeInputVariables.ContainsKey(targetIndex)) activeInputVariables[targetIndex] = new List<int>();
    156       return activeInputVariables[targetIndex]
    157         .Select(i => problem.Dataset.GetVariableName(i));
    158     }
    15939  }
    16040}
Note: See TracChangeset for help on using the changeset viewer.