Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/17/09 00:30:11 (15 years ago)
Author:
abeham
Message:

Improved ES GUI according to #674

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.ES/3.2/ESEditor.cs

    r1529 r2052  
    3636  public partial class ESEditor : EditorBase {
    3737    private ChooseOperatorDialog chooseOperatorDialog;
     38    private OperatorLibrary operatorLibrary;
     39    private List<IOperator> problemInitializers;
     40    private int selectedProblemInitializer;
     41    private List<IOperator> solutionGenerators;
     42    private int selectedSolutionGenerator;
     43    private List<IOperator> mutators;
     44    private int selectedMutator;
     45    private List<IOperator> evaluators;
     46    private int selectedEvaluator;
     47    private List<IOperator> recombinators;
     48    private int selectedRecombinator;
    3849
    3950    /// <summary>
     
    5263    public ESEditor() {
    5364      InitializeComponent();
     65      problemInitializers = new List<IOperator>();
     66      selectedProblemInitializer = -1;
     67      solutionGenerators = new List<IOperator>();
     68      selectedSolutionGenerator = -1;
     69      mutators = new List<IOperator>();
     70      selectedMutator = -1;
     71      evaluators = new List<IOperator>();
     72      selectedEvaluator = -1;
     73      recombinators = new List<IOperator>();
     74      selectedRecombinator = -1;
    5475    }
    5576    /// <summary>
     
    6081      : this() {
    6182      ES = es;
     83    }
     84
     85    private int AddOperator(ComboBox comboBox, IOperator iOperator, List<IOperator> list) {
     86      for (int i = 0; i < comboBox.Items.Count - 1; i++) {
     87        if ((comboBox.Items[i] as string).CompareTo(iOperator.Name) > 0) {
     88          comboBox.Items.Insert(i, iOperator.Name);
     89          list.Insert(i, iOperator);
     90          return i;
     91        }
     92      }
     93      int index = comboBox.Items.Count - 1;
     94      comboBox.Items.Insert(index, iOperator.Name);
     95      list.Add(iOperator);
     96      return index;
     97    }
     98    private int SetOperator(ComboBox comboBox, IOperator iOperator, List<IOperator> list) {
     99      int index;
     100      if ((index = list.FindIndex(op => op.Name.Equals(iOperator.Name))) >= 0) {
     101        comboBox.Items.RemoveAt(index);
     102        list.RemoveAt(index);
     103        return AddOperator(comboBox, iOperator, list);
     104      } else return -1;
    62105    }
    63106
     
    106149      } else {
    107150        tabControl.Enabled = true;
    108         problemInitializationTextBox.Text = ES.ProblemInjector.GetType().Name;
    109         solutionGenerationTextBox.Text = ES.SolutionGenerator.GetType().Name;
    110         mutationTextBox.Text = ES.Mutator.GetType().Name;
    111         evaluationTextBox.Text = ES.Evaluator.GetType().Name;
    112         recombinationTextBox.Text = ES.Recombinator.GetType().Name;
     151        int index;
     152        if (!((index = problemInitializers.FindIndex(op => op.Name.Equals(ES.ProblemInjector.Name))) >= 0)) {
     153          index = AddOperator(problemInitializationComboBox, ES.ProblemInjector, problemInitializers);
     154          if (index <= selectedProblemInitializer) selectedProblemInitializer++;
     155        }
     156        problemInitializationComboBox.SelectedIndex = index;
     157        if (!((index = solutionGenerators.FindIndex(op => op.Name.Equals(ES.SolutionGenerator.Name))) >= 0)) {
     158          index = AddOperator(solutionGenerationComboBox, ES.SolutionGenerator, solutionGenerators);
     159          if (index <= selectedSolutionGenerator) selectedSolutionGenerator++;
     160        }
     161        solutionGenerationComboBox.SelectedIndex = index;
     162        if (!((index = evaluators.FindIndex(op => op.Name.Equals(ES.Evaluator.Name))) >= 0)) {
     163          index = AddOperator(evaluationComboBox, ES.Evaluator, evaluators);
     164          if (index <= selectedEvaluator) selectedEvaluator++;
     165        }
     166        evaluationComboBox.SelectedIndex = index;
     167        if (!((index = mutators.FindIndex(op => op.Name.Equals(ES.Mutator.Name))) >= 0)) {
     168          index = AddOperator(mutationComboBox, ES.Mutator, mutators);
     169          if (index <= selectedMutator) selectedMutator++;
     170        }
     171        mutationComboBox.SelectedIndex = index;
     172        if (!((index = recombinators.FindIndex(op => op.Name.Equals(ES.Recombinator.Name))) >= 0)) {
     173          index = AddOperator(recombinationComboBox, ES.Recombinator, recombinators);
     174          if (index <= selectedRecombinator) selectedRecombinator++;
     175        }
     176        recombinationComboBox.SelectedIndex = index;
    113177        plusRadioButton.Checked = ES.PlusNotation;
    114178        commaRadioButton.Checked = !ES.PlusNotation;
     
    157221    }
    158222    private void setProblemInitializationButton_Click(object sender, EventArgs e) {
    159       if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
    160       if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
    161         ES.ProblemInjector = chooseOperatorDialog.Operator;
    162         problemInitializationTextBox.Text = ES.ProblemInjector.GetType().Name;
    163       }
    164     }
    165     private void setSolutionGenerationButton_Click(object sender, EventArgs e) {
    166       if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
    167       if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
    168         ES.SolutionGenerator= chooseOperatorDialog.Operator;
    169         solutionGenerationTextBox.Text = ES.SolutionGenerator.GetType().Name;
    170       }
    171     }
    172     private void setMutationButton_Click(object sender, EventArgs e) {
    173       if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
    174       if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
    175         ES.Mutator = chooseOperatorDialog.Operator;
    176         mutationTextBox.Text = ES.Mutator.GetType().Name;
    177       }
    178     }
    179     private void setEvaluationButton_Click(object sender, EventArgs e) {
    180       if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
    181       if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
    182         ES.Evaluator = chooseOperatorDialog.Operator;
    183         evaluationTextBox.Text = ES.Evaluator.GetType().Name;
    184       }
    185     }
    186     private void setRecombinationButton_Click(object sender, EventArgs e) {
    187       if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
    188       if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
    189         ES.Recombinator = chooseOperatorDialog.Operator;
    190         recombinationTextBox.Text = ES.Recombinator.GetType().Name;
    191       }
     223     
    192224    }
    193225    private void executeButton_Click(object sender, EventArgs e) {
     
    254286      }
    255287    }
     288
     289    private void openOperatorLibraryButton_Click(object sender, EventArgs e) {
     290      if (openOperatorLibraryFileDialog.ShowDialog() == DialogResult.OK) {
     291
     292        operatorLibrary = (PersistenceManager.Load(openOperatorLibraryFileDialog.FileName) as OperatorLibrary);
     293        if (operatorLibrary == null) {
     294          MessageBox.Show("The selected file is not an operator library");
     295          return;
     296        }
     297        foreach (IOperatorGroup topLevelGroup in operatorLibrary.Group.SubGroups) {
     298          if (topLevelGroup.Name.Equals("Problem")) {
     299            foreach (IOperatorGroup group in topLevelGroup.SubGroups) {
     300              if (group.Name.Equals("Initialization")) {
     301                foreach (IOperator op in group.Operators) {
     302                  int index = SetOperator(problemInitializationComboBox, (IOperator)op.Clone(), problemInitializers);
     303                  if (index < 0) {
     304                    index = AddOperator(problemInitializationComboBox, (IOperator)op.Clone(), problemInitializers);
     305                    if (index <= selectedProblemInitializer) selectedProblemInitializer++;
     306                  }
     307                }
     308              } else if (group.Name.Equals("Solution generation")) {
     309                foreach (IOperator op in group.Operators) {
     310                  int index = SetOperator(solutionGenerationComboBox, (IOperator)op.Clone(), solutionGenerators);
     311                  if (index < 0) {
     312                    index = AddOperator(solutionGenerationComboBox, (IOperator)op.Clone(), solutionGenerators);
     313                    if (index <= selectedSolutionGenerator) selectedSolutionGenerator++;
     314                  }
     315                }
     316              } else if (group.Name.Equals("Evaluation")) {
     317                foreach (IOperator op in group.Operators) {
     318                  int index = SetOperator(evaluationComboBox, (IOperator)op.Clone(), evaluators);
     319                  if (index < 0) {
     320                    index = AddOperator(evaluationComboBox, (IOperator)op.Clone(), evaluators);
     321                    if (index <= selectedEvaluator) selectedEvaluator++;
     322                  }
     323                }
     324              }
     325            }
     326          } else if (topLevelGroup.Name.Equals("ES")) {
     327            foreach (IOperatorGroup group in topLevelGroup.SubGroups) {
     328              if (group.Name.Equals("Mutation")) {
     329                foreach (IOperator op in group.Operators) {
     330                  int index = SetOperator(mutationComboBox, (IOperator)op.Clone(), mutators);
     331                  if (index < 0) {
     332                    index = AddOperator(mutationComboBox, (IOperator)op.Clone(), mutators);
     333                    if (index <= selectedMutator) selectedMutator++;
     334                  }
     335                }
     336              } else if (group.Name.Equals("Recombination")) {
     337                foreach (IOperator op in group.Operators) {
     338                  int index = SetOperator(recombinationComboBox, (IOperator)op.Clone(), recombinators);
     339                  if (index < 0) {
     340                    index = AddOperator(recombinationComboBox, (IOperator)op.Clone(), recombinators);
     341                    if (index <= selectedRecombinator) selectedRecombinator++;
     342                  }
     343                }
     344              }
     345            }
     346          }
     347        }
     348        problemInitializationComboBox.SelectedIndexChanged -= new EventHandler(problemInitializationComboBox_SelectedIndexChanged);
     349        problemInitializationComboBox.SelectedIndex = selectedProblemInitializer;
     350        problemInitializationComboBox.SelectedIndexChanged += new EventHandler(problemInitializationComboBox_SelectedIndexChanged);
     351        solutionGenerationComboBox.SelectedIndexChanged -= new EventHandler(solutionGenerationComboBox_SelectedIndexChanged);
     352        solutionGenerationComboBox.SelectedIndex = selectedSolutionGenerator;
     353        solutionGenerationComboBox.SelectedIndexChanged += new EventHandler(solutionGenerationComboBox_SelectedIndexChanged);
     354        evaluationComboBox.SelectedIndexChanged -= new EventHandler(evaluationComboBox_SelectedIndexChanged);
     355        evaluationComboBox.SelectedIndex = selectedEvaluator;
     356        evaluationComboBox.SelectedIndexChanged += new EventHandler(evaluationComboBox_SelectedIndexChanged);
     357        mutationComboBox.SelectedIndexChanged -= new EventHandler(mutationComboBox_SelectedIndexChanged);
     358        mutationComboBox.SelectedIndex = selectedMutator;
     359        mutationComboBox.SelectedIndexChanged += new EventHandler(mutationComboBox_SelectedIndexChanged);
     360        recombinationComboBox.SelectedIndexChanged -= new EventHandler(recombinationComboBox_SelectedIndexChanged);
     361        recombinationComboBox.SelectedIndex = selectedRecombinator;
     362        recombinationComboBox.SelectedIndexChanged += new EventHandler(recombinationComboBox_SelectedIndexChanged);
     363      }
     364    }
     365
     366    private void problemInitializationComboBox_SelectedIndexChanged(object sender, EventArgs e) {
     367      int index = problemInitializationComboBox.SelectedIndex;
     368      if (index != selectedProblemInitializer) {
     369        if (index == problemInitializationComboBox.Items.Count - 1) {
     370          if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
     371          if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
     372            selectedProblemInitializer = -1;
     373            index = SetOperator(problemInitializationComboBox, chooseOperatorDialog.Operator, problemInitializers);
     374            if (index < 0) index = AddOperator(problemInitializationComboBox, chooseOperatorDialog.Operator, problemInitializers);
     375          } else {
     376            problemInitializationComboBox.SelectedIndex = selectedProblemInitializer;
     377            return;
     378          }
     379        }
     380        if (index >= 0) {
     381          ES.ProblemInjector = problemInitializers[index];
     382          selectedProblemInitializer = index;
     383          problemInitializationComboBox.SelectedIndex = index;
     384        }
     385      }
     386    }
     387
     388    private void solutionGenerationComboBox_SelectedIndexChanged(object sender, EventArgs e) {
     389      int index = solutionGenerationComboBox.SelectedIndex;
     390      if (index != selectedSolutionGenerator) {
     391        if (index == solutionGenerationComboBox.Items.Count - 1) {
     392          if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
     393          if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
     394            selectedSolutionGenerator = -1;
     395            index = SetOperator(solutionGenerationComboBox, chooseOperatorDialog.Operator, solutionGenerators);
     396            if (index < 0) AddOperator(solutionGenerationComboBox, chooseOperatorDialog.Operator, solutionGenerators);
     397          } else {
     398            solutionGenerationComboBox.SelectedIndex = selectedSolutionGenerator;
     399            return;
     400          }
     401        }
     402        if (index >= 0) {
     403          ES.SolutionGenerator = solutionGenerators[index];
     404          selectedSolutionGenerator = index;
     405          solutionGenerationComboBox.SelectedIndex = selectedSolutionGenerator;
     406        }
     407      }
     408    }
     409
     410    private void evaluationComboBox_SelectedIndexChanged(object sender, EventArgs e) {
     411      int index = evaluationComboBox.SelectedIndex;
     412      if (index != selectedEvaluator) {
     413        if (index == evaluationComboBox.Items.Count - 1) {
     414          if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
     415          if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
     416            selectedEvaluator = -1;
     417            index = SetOperator(evaluationComboBox, chooseOperatorDialog.Operator, evaluators);
     418            if (index < 0) index = AddOperator(evaluationComboBox, chooseOperatorDialog.Operator, evaluators);
     419          } else {
     420            evaluationComboBox.SelectedIndex = selectedEvaluator;
     421            return;
     422          }
     423        }
     424        if (index >= 0) {
     425          ES.Evaluator = evaluators[index];
     426          selectedEvaluator = index;
     427          evaluationComboBox.SelectedIndex = index;
     428        }
     429      }
     430    }
     431
     432    private void mutationComboBox_SelectedIndexChanged(object sender, EventArgs e) {
     433      int index = mutationComboBox.SelectedIndex;
     434      if (index != selectedMutator) {
     435        if (index == mutationComboBox.Items.Count - 1) {
     436          if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
     437          if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
     438            selectedMutator = -1;
     439            index = SetOperator(mutationComboBox, chooseOperatorDialog.Operator, mutators);
     440            if (index < 0) index = AddOperator(mutationComboBox, chooseOperatorDialog.Operator, mutators);
     441          } else {
     442            mutationComboBox.SelectedIndex = selectedMutator;
     443            return;
     444          }
     445        }
     446        if (index >= 0) {
     447          ES.Mutator = mutators[index];
     448          selectedMutator = index;
     449          mutationComboBox.SelectedIndex = index;
     450        }
     451      }
     452    }
     453
     454    private void recombinationComboBox_SelectedIndexChanged(object sender, EventArgs e) {
     455      int index = recombinationComboBox.SelectedIndex;
     456      if (index != selectedRecombinator) {
     457        if (index == recombinationComboBox.Items.Count - 1) {
     458          if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
     459          if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
     460            selectedRecombinator = -1;
     461            index = SetOperator(recombinationComboBox, chooseOperatorDialog.Operator, recombinators);
     462            if (index < 0) index = AddOperator(recombinationComboBox, chooseOperatorDialog.Operator, recombinators);
     463          } else {
     464            recombinationComboBox.SelectedIndex = selectedRecombinator;
     465            return;
     466          }
     467        }
     468        if (index >= 0) {
     469          ES.Recombinator = recombinators[index];
     470          selectedRecombinator = index;
     471          recombinationComboBox.SelectedIndex = index;
     472        }
     473      }
     474    }
    256475  }
    257476}
Note: See TracChangeset for help on using the changeset viewer.