Changeset 8093
- Timestamp:
- 06/24/12 17:57:51 (13 years ago)
- Location:
- trunk/sources
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/sources/HeuristicLab.Problems.LinearAssignment.Views/3.3/LAPAssignmentView.Designer.cs ¶
r8022 r8093 45 45 /// </summary> 46 46 private void InitializeComponent() { 47 this.assignmentView = new HeuristicLab.Data.Views.StringConvertibleArrayView();48 47 this.qualityView = new HeuristicLab.Data.Views.StringConvertibleValueView(); 48 this.splitContainer = new System.Windows.Forms.SplitContainer(); 49 this.assignmentDataGridView = new System.Windows.Forms.DataGridView(); 50 this.RowsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 51 this.Columns = new System.Windows.Forms.DataGridViewTextBoxColumn(); 52 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); 53 this.splitContainer.Panel1.SuspendLayout(); 54 this.splitContainer.SuspendLayout(); 55 ((System.ComponentModel.ISupportInitialize)(this.assignmentDataGridView)).BeginInit(); 49 56 this.SuspendLayout(); 50 //51 // assignmentView52 //53 this.assignmentView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)54 | System.Windows.Forms.AnchorStyles.Left)55 | System.Windows.Forms.AnchorStyles.Right)));56 this.assignmentView.Caption = "StringConvertibleArray View";57 this.assignmentView.Content = null;58 this.assignmentView.Location = new System.Drawing.Point(0, 30);59 this.assignmentView.Name = "assignmentView";60 this.assignmentView.ReadOnly = true;61 this.assignmentView.Size = new System.Drawing.Size(422, 130);62 this.assignmentView.TabIndex = 0;63 57 // 64 58 // qualityView … … 72 66 this.qualityView.Name = "qualityView"; 73 67 this.qualityView.ReadOnly = true; 74 this.qualityView.Size = new System.Drawing.Size(4 22, 21);68 this.qualityView.Size = new System.Drawing.Size(413, 21); 75 69 this.qualityView.TabIndex = 1; 70 // 71 // splitContainer 72 // 73 this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 74 | System.Windows.Forms.AnchorStyles.Left) 75 | System.Windows.Forms.AnchorStyles.Right))); 76 this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; 77 this.splitContainer.Location = new System.Drawing.Point(0, 30); 78 this.splitContainer.Name = "splitContainer"; 79 // 80 // splitContainer.Panel1 81 // 82 this.splitContainer.Panel1.Controls.Add(this.assignmentDataGridView); 83 this.splitContainer.Size = new System.Drawing.Size(413, 324); 84 this.splitContainer.SplitterDistance = 250; 85 this.splitContainer.TabIndex = 2; 86 // 87 // assignmentDataGridView 88 // 89 this.assignmentDataGridView.AllowUserToAddRows = false; 90 this.assignmentDataGridView.AllowUserToDeleteRows = false; 91 this.assignmentDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 92 | System.Windows.Forms.AnchorStyles.Left) 93 | System.Windows.Forms.AnchorStyles.Right))); 94 this.assignmentDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 95 this.assignmentDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 96 this.RowsColumn, 97 this.Columns}); 98 this.assignmentDataGridView.Location = new System.Drawing.Point(3, 3); 99 this.assignmentDataGridView.Name = "assignmentDataGridView"; 100 this.assignmentDataGridView.ReadOnly = true; 101 this.assignmentDataGridView.Size = new System.Drawing.Size(244, 318); 102 this.assignmentDataGridView.TabIndex = 0; 103 // 104 // RowsColumn 105 // 106 this.RowsColumn.HeaderText = "Rows"; 107 this.RowsColumn.Name = "RowsColumn"; 108 this.RowsColumn.ReadOnly = true; 109 // 110 // Columns 111 // 112 this.Columns.HeaderText = "Columns"; 113 this.Columns.Name = "Columns"; 114 this.Columns.ReadOnly = true; 76 115 // 77 116 // LAPAssignmentView … … 79 118 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 80 119 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 120 this.Controls.Add(this.splitContainer); 81 121 this.Controls.Add(this.qualityView); 82 this.Controls.Add(this.assignmentView);83 122 this.Name = "LAPAssignmentView"; 84 this.Size = new System.Drawing.Size(422, 160); 123 this.Size = new System.Drawing.Size(413, 354); 124 this.splitContainer.Panel1.ResumeLayout(false); 125 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); 126 this.splitContainer.ResumeLayout(false); 127 ((System.ComponentModel.ISupportInitialize)(this.assignmentDataGridView)).EndInit(); 85 128 this.ResumeLayout(false); 86 129 … … 89 132 #endregion 90 133 91 private Data.Views.StringConvertibleArrayView assignmentView;92 134 private Data.Views.StringConvertibleValueView qualityView; 135 private System.Windows.Forms.SplitContainer splitContainer; 136 private System.Windows.Forms.DataGridView assignmentDataGridView; 137 private System.Windows.Forms.DataGridViewTextBoxColumn RowsColumn; 138 private System.Windows.Forms.DataGridViewTextBoxColumn Columns; 93 139 } 94 140 } -
TabularUnified trunk/sources/HeuristicLab.Problems.LinearAssignment.Views/3.3/LAPAssignmentView.cs ¶
r8022 r8093 20 20 #endregion 21 21 22 using System; 22 23 using System.ComponentModel; 23 24 using System.Windows.Forms; 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core.Views; 27 using HeuristicLab.Encodings.PermutationEncoding; 25 28 using HeuristicLab.MainForm; 26 29 using HeuristicLab.MainForm.WindowsForms; … … 30 33 [Content(typeof(LAPAssignment), IsDefaultView = true)] 31 34 public partial class LAPAssignmentView : ItemView { 35 private ViewHost assignmentViewHost; 36 32 37 public new LAPAssignment Content { 33 38 get { return (LAPAssignment)base.Content; } … … 37 42 public LAPAssignmentView() { 38 43 InitializeComponent(); 44 assignmentViewHost = new ViewHost(); 45 assignmentViewHost.Dock = DockStyle.Fill; 46 assignmentViewHost.ViewsLabelVisible = true; 47 splitContainer.Panel2.Controls.Add(assignmentViewHost); 39 48 } 40 49 … … 42 51 protected override void DeregisterContentEvents() { 43 52 Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged); 53 if (Content.Assignment != null) Content.Assignment.ItemChanged -= new EventHandler<EventArgs<int>>(Assignment_ItemChanged); 54 if (Content.RowNames != null) Content.RowNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged); 55 if (Content.ColumnNames != null) Content.ColumnNames.ItemChanged -= new EventHandler<EventArgs<int>>(Names_ItemChanged); 44 56 base.DeregisterContentEvents(); 45 57 } … … 47 59 base.RegisterContentEvents(); 48 60 Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged); 61 if (Content.Assignment != null) Content.Assignment.ItemChanged += new EventHandler<EventArgs<int>>(Assignment_ItemChanged); 62 if (Content.RowNames != null) Content.RowNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged); 63 if (Content.ColumnNames != null) Content.ColumnNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged); 64 } 65 66 private void Assignment_ItemChanged(object sender, EventArgs<int> e) { 67 if (sender != Content.Assignment) 68 ((Permutation)sender).ItemChanged -= new EventHandler<EventArgs<int>>(Assignment_ItemChanged); 69 else UpdateAssignmentMatrix(); 70 } 71 72 private void Names_ItemChanged(object sender, EventArgs<int> e) { 73 UpdateAssignmentMatrix(); 49 74 } 50 75 #endregion … … 54 79 if (Content == null) { 55 80 qualityView.Content = null; 56 assignmentView.Content = null; 81 assignmentViewHost.Content = null; 82 assignmentDataGridView.Rows.Clear(); 57 83 } else { 58 84 qualityView.Content = Content.Quality; 59 assignmentView.Content = Content.Assignment; 85 assignmentViewHost.Content = Content.Assignment; 86 UpdateAssignmentMatrix(); 60 87 } 61 88 } … … 63 90 protected override void SetEnabledStateOfControls() { 64 91 base.SetEnabledStateOfControls(); 92 assignmentDataGridView.Enabled = Content != null; 65 93 } 66 94 … … 70 98 case "Quality": qualityView.Content = Content.Quality; 71 99 break; 72 case "Assignment": assignmentView.Content = Content.Assignment; 100 case "Assignment": 101 if (Content.Assignment != null) 102 Content.Assignment.ItemChanged += new EventHandler<EventArgs<int>>(Assignment_ItemChanged); 103 assignmentViewHost.Content = Content.Assignment; 104 UpdateAssignmentMatrix(); 105 break; 106 case "RowNames": 107 if (Content.RowNames != null) 108 Content.RowNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged); 109 UpdateAssignmentMatrix(); 110 break; 111 case "ColumnNames": 112 if (Content.ColumnNames != null) 113 Content.ColumnNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged); 114 UpdateAssignmentMatrix(); 73 115 break; 74 116 default: break; … … 76 118 } 77 119 #endregion 120 121 private void UpdateAssignmentMatrix() { 122 assignmentDataGridView.Rows.Clear(); 123 if (Content.Assignment != null) { 124 string rowName, colName; 125 var rows = new DataGridViewRow[Content.Assignment.Length]; 126 for (int i = 0; i < Content.Assignment.Length; i++) { 127 if (Content.RowNames != null && Content.RowNames.Length > i) 128 rowName = Content.RowNames[i]; 129 else rowName = "Row " + (i + 1).ToString(); 130 if (Content.ColumnNames != null && Content.ColumnNames.Length > Content.Assignment[i]) 131 colName = Content.ColumnNames[Content.Assignment[i]]; 132 else colName = "Column " + (Content.Assignment[i] + 1).ToString(); 133 rows[i] = new DataGridViewRow(); 134 rows[i].CreateCells(assignmentDataGridView, new string[] { rowName, colName }); 135 } 136 assignmentDataGridView.Rows.AddRange(rows); 137 assignmentDataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); 138 } 139 } 140 78 141 } 79 142 } -
TabularUnified trunk/sources/HeuristicLab.Problems.LinearAssignment/3.3/Analyzers/BestLAPSolutionAnalyzer.cs ¶
r8022 r8093 42 42 get { return (ILookupParameter<DoubleMatrix>)Parameters["Costs"]; } 43 43 } 44 public IValueLookupParameter<StringArray> RowNamesParameter { 45 get { return (IValueLookupParameter<StringArray>)Parameters["RowNames"]; } 46 } 47 public IValueLookupParameter<StringArray> ColumnNamesParameter { 48 get { return (IValueLookupParameter<StringArray>)Parameters["ColumnNames"]; } 49 } 44 50 public IScopeTreeLookupParameter<Permutation> AssignmentParameter { 45 51 get { return (IScopeTreeLookupParameter<Permutation>)Parameters["Assignment"]; } … … 71 77 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem.")); 72 78 Parameters.Add(new LookupParameter<DoubleMatrix>("Costs", LinearAssignmentProblem.CostsDescription)); 79 Parameters.Add(new ValueLookupParameter<StringArray>("RowNames", LinearAssignmentProblem.RowNamesDescription)); 80 Parameters.Add(new ValueLookupParameter<StringArray>("ColumnNames", LinearAssignmentProblem.ColumnNamesDescription)); 73 81 Parameters.Add(new ScopeTreeLookupParameter<Permutation>("Assignment", "The LAP solutions from which the best solution should be analyzed.")); 74 82 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the LAP solutions which should be analyzed.")); … … 86 94 public override IOperation Apply() { 87 95 var costs = CostsParameter.ActualValue; 96 var rowNames = RowNamesParameter.ActualValue; 97 var columnNames = ColumnNamesParameter.ActualValue; 88 98 var permutations = AssignmentParameter.ActualValue; 89 99 var qualities = QualityParameter.ActualValue; … … 122 132 LAPAssignment assignment = BestSolutionParameter.ActualValue; 123 133 if (assignment == null) { 124 assignment = new LAPAssignment(costs, (Permutation)permutations[i].Clone(), new DoubleValue(qualities[i].Value));134 assignment = new LAPAssignment(costs, rowNames, columnNames, (Permutation)permutations[i].Clone(), new DoubleValue(qualities[i].Value)); 125 135 BestSolutionParameter.ActualValue = assignment; 126 136 results.Add(new Result("Best LAP Solution", assignment)); … … 131 141 assignment.Assignment = (Permutation)permutations[i].Clone(); 132 142 assignment.Quality.Value = qualities[i].Value; 143 if (rowNames != null) 144 assignment.RowNames = rowNames; 145 else assignment.RowNames = null; 146 if (columnNames != null) 147 assignment.ColumnNames = columnNames; 148 else assignment.ColumnNames = null; 133 149 } 134 150 } -
TabularUnified trunk/sources/HeuristicLab.Problems.LinearAssignment/3.3/HungarianAlgorithm.cs ¶
r8022 r8093 52 52 get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; } 53 53 } 54 55 54 #endregion 56 55 … … 69 68 private HungarianAlgorithm(HungarianAlgorithm original, Cloner cloner) 70 69 : base(original, cloner) { 71 // TODO: clone your private fields here72 70 AttachEventHandlers(); 73 71 } … … 86 84 UpdateAnalyzers(); 87 85 AttachEventHandlers(); 86 87 Problem = new LinearAssignmentProblem(); 88 88 } 89 89 -
TabularUnified trunk/sources/HeuristicLab.Problems.LinearAssignment/3.3/LAPAssignment.cs ¶
r8022 r8093 44 44 45 45 [Storable] 46 private StringArray rowNames; 47 public StringArray RowNames { 48 get { return rowNames; } 49 set { 50 bool changed = (rowNames != value); 51 rowNames = value; 52 if (changed) OnPropertyChanged("RowNames"); 53 } 54 } 55 56 [Storable] 57 private StringArray columnNames; 58 public StringArray ColumnNames { 59 get { return columnNames; } 60 set { 61 bool changed = (columnNames != value); 62 columnNames = value; 63 if (changed) OnPropertyChanged("ColumnNames"); 64 } 65 } 66 67 [Storable] 46 68 private Permutation assignment; 47 69 public Permutation Assignment { … … 81 103 this.quality = quality; 82 104 } 105 public LAPAssignment(DoubleMatrix costs, StringArray rowNames, StringArray columnNames, Permutation assignment) 106 : this(costs, assignment) { 107 this.rowNames = rowNames; 108 this.columnNames = columnNames; 109 } 110 public LAPAssignment(DoubleMatrix costs, StringArray rowNames, StringArray columnNames, Permutation assignment, DoubleValue quality) 111 : this(costs, rowNames, columnNames, assignment) { 112 this.quality = quality; 113 } 83 114 84 115 public override IDeepCloneable Clone(Cloner cloner) { -
TabularUnified trunk/sources/HeuristicLab.Problems.LinearAssignment/3.3/LinearAssignmentProblem.cs ¶
r8022 r8093 38 38 public sealed class LinearAssignmentProblem : SingleObjectiveHeuristicOptimizationProblem<ILAPEvaluator, IPermutationCreator> { 39 39 public static readonly string CostsDescription = "The cost matrix that describes the assignment of rows to columns."; 40 public static readonly string RowNamesDescription = "The elements represented by the rows of the costs matrix."; 41 public static readonly string ColumnNamesDescription = "The elements represented by the columns of the costs matrix."; 40 42 41 43 public override Image ItemImage { … … 52 54 public IValueParameter<Permutation> BestKnownSolutionParameter { 53 55 get { return (IValueParameter<Permutation>)Parameters["BestKnownSolution"]; } 56 } 57 public IValueParameter<StringArray> RowNamesParameter { 58 get { return (IValueParameter<StringArray>)Parameters["RowNames"]; } 59 } 60 public IValueParameter<StringArray> ColumnNamesParameter { 61 get { return (IValueParameter<StringArray>)Parameters["ColumnNames"]; } 54 62 } 55 63 #endregion … … 59 67 get { return CostsParameter.Value; } 60 68 set { CostsParameter.Value = value; } 69 } 70 public StringArray RowNames { 71 get { return RowNamesParameter.Value; } 72 set { RowNamesParameter.Value = value; } 73 } 74 public StringArray ColumnNames { 75 get { return ColumnNamesParameter.Value; } 76 set { ColumnNamesParameter.Value = value; } 61 77 } 62 78 public ItemSet<Permutation> BestKnownSolutions { … … 85 101 Parameters.Add(new OptionalValueParameter<ItemSet<Permutation>>("BestKnownSolutions", "The list of best known solutions which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null)); 86 102 Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null)); 87 103 Parameters.Add(new OptionalValueParameter<StringArray>("RowNames", RowNamesDescription)); 104 Parameters.Add(new OptionalValueParameter<StringArray>("ColumnNames", ColumnNamesDescription)); 105 88 106 ((ValueParameter<DoubleMatrix>)CostsParameter).ReactOnValueToStringChangedAndValueItemImageChanged = false; 107 ((OptionalValueParameter<StringArray>)RowNamesParameter).ReactOnValueToStringChangedAndValueItemImageChanged = false; 108 ((OptionalValueParameter<StringArray>)ColumnNamesParameter).ReactOnValueToStringChangedAndValueItemImageChanged = false; 109 110 RowNames = new StringArray(new string[] { "Human", "Von Neumann machine", "Quantum computer" }); 111 ColumnNames = new StringArray(new string[] { "Find a person's e-mail address", "Compute first 1000 decimals of Pi", "Factorize large integers" }); 112 Costs[0, 0] = 1; Costs[0, 1] = 10; Costs[0, 2] = 100; 113 Costs[1, 0] = 10; Costs[1, 1] = 1; Costs[1, 2] = 100; 114 Costs[2, 0] = 100; Costs[2, 1] = 10; Costs[2, 1] = 1; 89 115 90 116 bestLAPSolutionAnalyzer = new BestLAPSolutionAnalyzer();
Note: See TracChangeset
for help on using the changeset viewer.