- Timestamp:
- 08/14/09 19:56:04 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.CEDMA.Server/3.3/DispatcherBase.cs
r2258 r2290 37 37 namespace HeuristicLab.CEDMA.Server { 38 38 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 Members112 113 public IView CreateView() {114 return new DispatcherView(this);115 }116 117 #endregion118 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 }159 39 } 160 40 }
Note: See TracChangeset
for help on using the changeset viewer.