Changeset 12838 for branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews
- Timestamp:
- 08/05/15 00:06:45 (9 years ago)
- Location:
- branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.Designer.cs
r12808 r12838 47 47 this.dataTableComboBox = new System.Windows.Forms.ComboBox(); 48 48 this.dataTableLabel = new System.Windows.Forms.Label(); 49 this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();50 49 this.groupLabel = new System.Windows.Forms.Label(); 51 50 this.groupComboBox = new System.Windows.Forms.ComboBox(); 52 this. logScalingCheckBox = new System.Windows.Forms.CheckBox();51 this.targetLogScalingCheckBox = new System.Windows.Forms.CheckBox(); 53 52 this.targetsTextBox = new System.Windows.Forms.TextBox(); 54 53 this.targetsLabel = new System.Windows.Forms.Label(); 55 54 this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components); 56 this. fixedTargetButton = new System.Windows.Forms.Button();55 this.addTargetsAsResultButton = new System.Windows.Forms.Button(); 57 56 this.generateTargetsButton = new System.Windows.Forms.Button(); 58 57 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 59 58 this.budgetsLabel = new System.Windows.Forms.Label(); 60 59 this.budgetsTextBox = new System.Windows.Forms.TextBox(); 61 this.fixedCostButton = new System.Windows.Forms.Button(); 62 this.allOrEachTargetCheckBox = new System.Windows.Forms.CheckBox(); 60 this.addBudgetsAsResultButton = new System.Windows.Forms.Button(); 61 this.eachOrAllTargetCheckBox = new System.Windows.Forms.CheckBox(); 62 this.tabControl = new System.Windows.Forms.TabControl(); 63 this.byTargetTabPage = new System.Windows.Forms.TabPage(); 64 this.byTargetViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 65 this.byCostTabPage = new System.Windows.Forms.TabPage(); 66 this.eachOrAllBudgetsCheckBox = new System.Windows.Forms.CheckBox(); 67 this.generateBudgetsButton = new System.Windows.Forms.Button(); 68 this.byCostViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 69 this.byTableTabPage = new System.Windows.Forms.TabPage(); 70 this.dataGridView1 = new System.Windows.Forms.DataGridView(); 71 this.budgetLogScalingCheckBox = new System.Windows.Forms.CheckBox(); 63 72 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 73 this.tabControl.SuspendLayout(); 74 this.byTargetTabPage.SuspendLayout(); 75 this.byCostTabPage.SuspendLayout(); 76 this.byTableTabPage.SuspendLayout(); 77 ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); 64 78 this.SuspendLayout(); 65 79 // … … 72 86 this.dataTableComboBox.Location = new System.Drawing.Point(69, 30); 73 87 this.dataTableComboBox.Name = "dataTableComboBox"; 74 this.dataTableComboBox.Size = new System.Drawing.Size( 455, 21);88 this.dataTableComboBox.Size = new System.Drawing.Size(582, 21); 75 89 this.dataTableComboBox.TabIndex = 0; 76 90 this.dataTableComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTableComboBox_SelectedIndexChanged); … … 85 99 this.dataTableLabel.Text = "DataTable:"; 86 100 // 87 // viewHost88 //89 this.viewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)90 | System.Windows.Forms.AnchorStyles.Left)91 | System.Windows.Forms.AnchorStyles.Right)));92 this.viewHost.Caption = "View";93 this.viewHost.Content = null;94 this.viewHost.Enabled = false;95 this.viewHost.Location = new System.Drawing.Point(4, 90);96 this.viewHost.Name = "viewHost";97 this.viewHost.ReadOnly = false;98 this.viewHost.Size = new System.Drawing.Size(520, 258);99 this.viewHost.TabIndex = 2;100 this.viewHost.ViewsLabelVisible = true;101 this.viewHost.ViewType = null;102 //103 101 // groupLabel 104 102 // … … 118 116 this.groupComboBox.Location = new System.Drawing.Point(69, 3); 119 117 this.groupComboBox.Name = "groupComboBox"; 120 this.groupComboBox.Size = new System.Drawing.Size( 455, 21);118 this.groupComboBox.Size = new System.Drawing.Size(582, 21); 121 119 this.groupComboBox.TabIndex = 4; 122 120 this.groupComboBox.SelectedIndexChanged += new System.EventHandler(this.groupComboBox_SelectedIndexChanged); 123 121 // 124 // logScalingCheckBox125 // 126 this. logScalingCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));127 this. logScalingCheckBox.AutoSize = true;128 this. logScalingCheckBox.Location = new System.Drawing.Point(0, 354);129 this. logScalingCheckBox.Name = "logScalingCheckBox";130 this. logScalingCheckBox.Size = new System.Drawing.Size(112, 17);131 this. logScalingCheckBox.TabIndex = 5;132 this. logScalingCheckBox.Text = "logarithmic scaling";133 this. logScalingCheckBox.UseVisualStyleBackColor = true;134 this. logScalingCheckBox.CheckedChanged += new System.EventHandler(this.logScalingCheckBox_CheckedChanged);122 // targetLogScalingCheckBox 123 // 124 this.targetLogScalingCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 125 this.targetLogScalingCheckBox.AutoSize = true; 126 this.targetLogScalingCheckBox.Location = new System.Drawing.Point(9, 391); 127 this.targetLogScalingCheckBox.Name = "targetLogScalingCheckBox"; 128 this.targetLogScalingCheckBox.Size = new System.Drawing.Size(112, 17); 129 this.targetLogScalingCheckBox.TabIndex = 5; 130 this.targetLogScalingCheckBox.Text = "logarithmic scaling"; 131 this.targetLogScalingCheckBox.UseVisualStyleBackColor = true; 132 this.targetLogScalingCheckBox.CheckedChanged += new System.EventHandler(this.logScalingCheckBox_CheckedChanged); 135 133 // 136 134 // targetsTextBox … … 138 136 this.targetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 139 137 | System.Windows.Forms.AnchorStyles.Right))); 140 this.targetsTextBox.Location = new System.Drawing.Point(6 9, 57);138 this.targetsTextBox.Location = new System.Drawing.Point(65, 8); 141 139 this.targetsTextBox.Name = "targetsTextBox"; 142 this.targetsTextBox.Size = new System.Drawing.Size( 209, 20);140 this.targetsTextBox.Size = new System.Drawing.Size(320, 20); 143 141 this.targetsTextBox.TabIndex = 6; 144 142 this.toolTip.SetToolTip(this.targetsTextBox, "The order of the targets is important, first to-hit targets\r\nshould be given firs" + … … 150 148 // 151 149 this.targetsLabel.AutoSize = true; 152 this.targetsLabel.Location = new System.Drawing.Point( 3, 60);150 this.targetsLabel.Location = new System.Drawing.Point(6, 11); 153 151 this.targetsLabel.Name = "targetsLabel"; 154 152 this.targetsLabel.Size = new System.Drawing.Size(46, 13); … … 160 158 this.errorProvider.ContainerControl = this; 161 159 // 162 // fixedTargetButton163 // 164 this. fixedTargetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));165 this. fixedTargetButton.Location = new System.Drawing.Point(435, 54);166 this. fixedTargetButton.Name = "fixedTargetButton";167 this. fixedTargetButton.Size = new System.Drawing.Size(89, 23);168 this. fixedTargetButton.TabIndex = 7;169 this. fixedTargetButton.Text = "Add as Result";170 this. fixedTargetButton.UseVisualStyleBackColor = true;171 this. fixedTargetButton.Click += new System.EventHandler(this.fixedTargetButton_Click);160 // addTargetsAsResultButton 161 // 162 this.addTargetsAsResultButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 163 this.addTargetsAsResultButton.Location = new System.Drawing.Point(551, 6); 164 this.addTargetsAsResultButton.Name = "addTargetsAsResultButton"; 165 this.addTargetsAsResultButton.Size = new System.Drawing.Size(89, 23); 166 this.addTargetsAsResultButton.TabIndex = 7; 167 this.addTargetsAsResultButton.Text = "Add as Result"; 168 this.addTargetsAsResultButton.UseVisualStyleBackColor = true; 169 this.addTargetsAsResultButton.Click += new System.EventHandler(this.addTargetsAsResultButton_Click); 172 170 // 173 171 // generateTargetsButton 174 172 // 175 173 this.generateTargetsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 176 this.generateTargetsButton.Location = new System.Drawing.Point( 340, 54);174 this.generateTargetsButton.Location = new System.Drawing.Point(456, 6); 177 175 this.generateTargetsButton.Name = "generateTargetsButton"; 178 176 this.generateTargetsButton.Size = new System.Drawing.Size(89, 23); … … 184 182 // budgetsLabel 185 183 // 186 this.budgetsLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));187 184 this.budgetsLabel.AutoSize = true; 188 this.budgetsLabel.Location = new System.Drawing.Point( 235, 353);185 this.budgetsLabel.Location = new System.Drawing.Point(6, 11); 189 186 this.budgetsLabel.Name = "budgetsLabel"; 190 187 this.budgetsLabel.Size = new System.Drawing.Size(49, 13); … … 194 191 // budgetsTextBox 195 192 // 196 this.budgetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles. Bottom| System.Windows.Forms.AnchorStyles.Left)197 | System.Windows.Forms.AnchorStyles.Right))); 198 this.budgetsTextBox.Location = new System.Drawing.Point( 290, 350);193 this.budgetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 194 | System.Windows.Forms.AnchorStyles.Right))); 195 this.budgetsTextBox.Location = new System.Drawing.Point(65, 8); 199 196 this.budgetsTextBox.Name = "budgetsTextBox"; 200 this.budgetsTextBox.Size = new System.Drawing.Size( 139, 20);197 this.budgetsTextBox.Size = new System.Drawing.Size(320, 20); 201 198 this.budgetsTextBox.TabIndex = 6; 202 this.budgetsTextBox.Text = "1e2 ; 1e3 ; 1e4 ; 1e5 ; 1e6"; 203 this.budgetsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.targetsTextBox_Validating); 204 // 205 // fixedCostButton 206 // 207 this.fixedCostButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 208 this.fixedCostButton.Location = new System.Drawing.Point(435, 348); 209 this.fixedCostButton.Name = "fixedCostButton"; 210 this.fixedCostButton.Size = new System.Drawing.Size(89, 23); 211 this.fixedCostButton.TabIndex = 7; 212 this.fixedCostButton.Text = "Add as Result"; 213 this.fixedCostButton.UseVisualStyleBackColor = true; 214 this.fixedCostButton.Click += new System.EventHandler(this.fixedCostButton_Click); 215 // 216 // allOrEachTargetCheckBox 217 // 218 this.allOrEachTargetCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 219 this.allOrEachTargetCheckBox.AutoSize = true; 220 this.allOrEachTargetCheckBox.Location = new System.Drawing.Point(298, 59); 221 this.allOrEachTargetCheckBox.Name = "allOrEachTargetCheckBox"; 222 this.allOrEachTargetCheckBox.Size = new System.Drawing.Size(36, 17); 223 this.allOrEachTargetCheckBox.TabIndex = 8; 224 this.allOrEachTargetCheckBox.Text = "all"; 225 this.allOrEachTargetCheckBox.UseVisualStyleBackColor = true; 226 this.allOrEachTargetCheckBox.CheckedChanged += new System.EventHandler(this.allOrEachTargetCheckBox_CheckedChanged); 199 this.budgetsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.budgetsTextBox_Validating); 200 // 201 // addBudgetsAsResultButton 202 // 203 this.addBudgetsAsResultButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 204 this.addBudgetsAsResultButton.Location = new System.Drawing.Point(551, 6); 205 this.addBudgetsAsResultButton.Name = "addBudgetsAsResultButton"; 206 this.addBudgetsAsResultButton.Size = new System.Drawing.Size(89, 23); 207 this.addBudgetsAsResultButton.TabIndex = 7; 208 this.addBudgetsAsResultButton.Text = "Add as Result"; 209 this.addBudgetsAsResultButton.UseVisualStyleBackColor = true; 210 this.addBudgetsAsResultButton.Click += new System.EventHandler(this.addBudgetsAsResultButton_Click); 211 // 212 // eachOrAllTargetCheckBox 213 // 214 this.eachOrAllTargetCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 215 this.eachOrAllTargetCheckBox.AutoSize = true; 216 this.eachOrAllTargetCheckBox.Location = new System.Drawing.Point(414, 10); 217 this.eachOrAllTargetCheckBox.Name = "eachOrAllTargetCheckBox"; 218 this.eachOrAllTargetCheckBox.Size = new System.Drawing.Size(36, 17); 219 this.eachOrAllTargetCheckBox.TabIndex = 8; 220 this.eachOrAllTargetCheckBox.Text = "all"; 221 this.eachOrAllTargetCheckBox.UseVisualStyleBackColor = true; 222 this.eachOrAllTargetCheckBox.CheckedChanged += new System.EventHandler(this.eachOrAllTargetCheckBox_CheckedChanged); 223 // 224 // tabControl 225 // 226 this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 227 | System.Windows.Forms.AnchorStyles.Left) 228 | System.Windows.Forms.AnchorStyles.Right))); 229 this.tabControl.Controls.Add(this.byTargetTabPage); 230 this.tabControl.Controls.Add(this.byCostTabPage); 231 this.tabControl.Controls.Add(this.byTableTabPage); 232 this.tabControl.Location = new System.Drawing.Point(0, 57); 233 this.tabControl.Name = "tabControl"; 234 this.tabControl.SelectedIndex = 0; 235 this.tabControl.Size = new System.Drawing.Size(654, 440); 236 this.tabControl.TabIndex = 9; 237 // 238 // byTargetTabPage 239 // 240 this.byTargetTabPage.Controls.Add(this.byTargetViewHost); 241 this.byTargetTabPage.Controls.Add(this.targetLogScalingCheckBox); 242 this.byTargetTabPage.Controls.Add(this.targetsLabel); 243 this.byTargetTabPage.Controls.Add(this.eachOrAllTargetCheckBox); 244 this.byTargetTabPage.Controls.Add(this.targetsTextBox); 245 this.byTargetTabPage.Controls.Add(this.generateTargetsButton); 246 this.byTargetTabPage.Controls.Add(this.addTargetsAsResultButton); 247 this.byTargetTabPage.Location = new System.Drawing.Point(4, 22); 248 this.byTargetTabPage.Name = "byTargetTabPage"; 249 this.byTargetTabPage.Padding = new System.Windows.Forms.Padding(3); 250 this.byTargetTabPage.Size = new System.Drawing.Size(646, 414); 251 this.byTargetTabPage.TabIndex = 0; 252 this.byTargetTabPage.Text = "Performance by Target"; 253 this.byTargetTabPage.UseVisualStyleBackColor = true; 254 // 255 // byTargetViewHost 256 // 257 this.byTargetViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 258 | System.Windows.Forms.AnchorStyles.Left) 259 | System.Windows.Forms.AnchorStyles.Right))); 260 this.byTargetViewHost.Caption = "View"; 261 this.byTargetViewHost.Content = null; 262 this.byTargetViewHost.Enabled = false; 263 this.byTargetViewHost.Location = new System.Drawing.Point(3, 34); 264 this.byTargetViewHost.Name = "byTargetViewHost"; 265 this.byTargetViewHost.ReadOnly = false; 266 this.byTargetViewHost.Size = new System.Drawing.Size(640, 351); 267 this.byTargetViewHost.TabIndex = 9; 268 this.byTargetViewHost.ViewsLabelVisible = true; 269 this.byTargetViewHost.ViewType = null; 270 // 271 // byCostTabPage 272 // 273 this.byCostTabPage.Controls.Add(this.budgetLogScalingCheckBox); 274 this.byCostTabPage.Controls.Add(this.eachOrAllBudgetsCheckBox); 275 this.byCostTabPage.Controls.Add(this.generateBudgetsButton); 276 this.byCostTabPage.Controls.Add(this.byCostViewHost); 277 this.byCostTabPage.Controls.Add(this.budgetsLabel); 278 this.byCostTabPage.Controls.Add(this.addBudgetsAsResultButton); 279 this.byCostTabPage.Controls.Add(this.budgetsTextBox); 280 this.byCostTabPage.Location = new System.Drawing.Point(4, 22); 281 this.byCostTabPage.Name = "byCostTabPage"; 282 this.byCostTabPage.Padding = new System.Windows.Forms.Padding(3); 283 this.byCostTabPage.Size = new System.Drawing.Size(646, 414); 284 this.byCostTabPage.TabIndex = 1; 285 this.byCostTabPage.Text = "Performance by Cost"; 286 this.byCostTabPage.UseVisualStyleBackColor = true; 287 // 288 // eachOrAllBudgetsCheckBox 289 // 290 this.eachOrAllBudgetsCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 291 this.eachOrAllBudgetsCheckBox.AutoSize = true; 292 this.eachOrAllBudgetsCheckBox.Location = new System.Drawing.Point(414, 10); 293 this.eachOrAllBudgetsCheckBox.Name = "eachOrAllBudgetsCheckBox"; 294 this.eachOrAllBudgetsCheckBox.Size = new System.Drawing.Size(36, 17); 295 this.eachOrAllBudgetsCheckBox.TabIndex = 10; 296 this.eachOrAllBudgetsCheckBox.Text = "all"; 297 this.eachOrAllBudgetsCheckBox.UseVisualStyleBackColor = true; 298 this.eachOrAllBudgetsCheckBox.CheckedChanged += new System.EventHandler(this.eachOrAllBudgetsCheckBox_CheckedChanged); 299 // 300 // generateBudgetsButton 301 // 302 this.generateBudgetsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 303 this.generateBudgetsButton.Location = new System.Drawing.Point(456, 6); 304 this.generateBudgetsButton.Name = "generateBudgetsButton"; 305 this.generateBudgetsButton.Size = new System.Drawing.Size(89, 23); 306 this.generateBudgetsButton.TabIndex = 9; 307 this.generateBudgetsButton.Text = "Generate..."; 308 this.generateBudgetsButton.UseVisualStyleBackColor = true; 309 this.generateBudgetsButton.Click += new System.EventHandler(this.generateBudgetsButton_Click); 310 // 311 // byCostViewHost 312 // 313 this.byCostViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 314 | System.Windows.Forms.AnchorStyles.Left) 315 | System.Windows.Forms.AnchorStyles.Right))); 316 this.byCostViewHost.Caption = "View"; 317 this.byCostViewHost.Content = null; 318 this.byCostViewHost.Enabled = false; 319 this.byCostViewHost.Location = new System.Drawing.Point(3, 34); 320 this.byCostViewHost.Name = "byCostViewHost"; 321 this.byCostViewHost.ReadOnly = false; 322 this.byCostViewHost.Size = new System.Drawing.Size(640, 351); 323 this.byCostViewHost.TabIndex = 8; 324 this.byCostViewHost.ViewsLabelVisible = true; 325 this.byCostViewHost.ViewType = null; 326 // 327 // byTableTabPage 328 // 329 this.byTableTabPage.Controls.Add(this.dataGridView1); 330 this.byTableTabPage.Location = new System.Drawing.Point(4, 22); 331 this.byTableTabPage.Name = "byTableTabPage"; 332 this.byTableTabPage.Padding = new System.Windows.Forms.Padding(3); 333 this.byTableTabPage.Size = new System.Drawing.Size(646, 388); 334 this.byTableTabPage.TabIndex = 2; 335 this.byTableTabPage.Text = "Expected Runtime Tables"; 336 this.byTableTabPage.UseVisualStyleBackColor = true; 337 // 338 // dataGridView1 339 // 340 this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 341 this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; 342 this.dataGridView1.Location = new System.Drawing.Point(3, 3); 343 this.dataGridView1.Name = "dataGridView1"; 344 this.dataGridView1.Size = new System.Drawing.Size(640, 382); 345 this.dataGridView1.TabIndex = 0; 346 // 347 // budgetLogScalingCheckBox 348 // 349 this.budgetLogScalingCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 350 this.budgetLogScalingCheckBox.AutoSize = true; 351 this.budgetLogScalingCheckBox.Location = new System.Drawing.Point(9, 391); 352 this.budgetLogScalingCheckBox.Name = "budgetLogScalingCheckBox"; 353 this.budgetLogScalingCheckBox.Size = new System.Drawing.Size(112, 17); 354 this.budgetLogScalingCheckBox.TabIndex = 11; 355 this.budgetLogScalingCheckBox.Text = "logarithmic scaling"; 356 this.budgetLogScalingCheckBox.UseVisualStyleBackColor = true; 227 357 // 228 358 // RunCollectionRLDView 229 359 // 230 360 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 231 this.Controls.Add(this.allOrEachTargetCheckBox); 232 this.Controls.Add(this.generateTargetsButton); 233 this.Controls.Add(this.fixedCostButton); 234 this.Controls.Add(this.fixedTargetButton); 235 this.Controls.Add(this.budgetsTextBox); 236 this.Controls.Add(this.targetsTextBox); 237 this.Controls.Add(this.logScalingCheckBox); 361 this.Controls.Add(this.tabControl); 238 362 this.Controls.Add(this.groupComboBox); 239 363 this.Controls.Add(this.groupLabel); 240 this.Controls.Add(this.budgetsLabel);241 this.Controls.Add(this.viewHost);242 this.Controls.Add(this.targetsLabel);243 364 this.Controls.Add(this.dataTableLabel); 244 365 this.Controls.Add(this.dataTableComboBox); 245 366 this.Name = "RunCollectionRLDView"; 246 this.Size = new System.Drawing.Size( 527, 374);367 this.Size = new System.Drawing.Size(654, 497); 247 368 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 369 this.tabControl.ResumeLayout(false); 370 this.byTargetTabPage.ResumeLayout(false); 371 this.byTargetTabPage.PerformLayout(); 372 this.byCostTabPage.ResumeLayout(false); 373 this.byCostTabPage.PerformLayout(); 374 this.byTableTabPage.ResumeLayout(false); 375 ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); 248 376 this.ResumeLayout(false); 249 377 this.PerformLayout(); … … 255 383 private System.Windows.Forms.ComboBox dataTableComboBox; 256 384 private System.Windows.Forms.Label dataTableLabel; 257 private MainForm.WindowsForms.ViewHost viewHost;258 385 private System.Windows.Forms.Label groupLabel; 259 386 private System.Windows.Forms.ComboBox groupComboBox; 260 private System.Windows.Forms.CheckBox logScalingCheckBox;387 private System.Windows.Forms.CheckBox targetLogScalingCheckBox; 261 388 private System.Windows.Forms.TextBox targetsTextBox; 262 389 private System.Windows.Forms.Label targetsLabel; 263 390 protected System.Windows.Forms.ErrorProvider errorProvider; 264 private System.Windows.Forms.Button fixedTargetButton;391 private System.Windows.Forms.Button addTargetsAsResultButton; 265 392 private System.Windows.Forms.Button generateTargetsButton; 266 393 private System.Windows.Forms.ToolTip toolTip; 267 private System.Windows.Forms.Button fixedCostButton;394 private System.Windows.Forms.Button addBudgetsAsResultButton; 268 395 private System.Windows.Forms.TextBox budgetsTextBox; 269 396 private System.Windows.Forms.Label budgetsLabel; 270 private System.Windows.Forms.CheckBox allOrEachTargetCheckBox; 397 private System.Windows.Forms.CheckBox eachOrAllTargetCheckBox; 398 private System.Windows.Forms.TabControl tabControl; 399 private System.Windows.Forms.TabPage byTargetTabPage; 400 private MainForm.WindowsForms.ViewHost byTargetViewHost; 401 private System.Windows.Forms.TabPage byCostTabPage; 402 private System.Windows.Forms.TabPage byTableTabPage; 403 private System.Windows.Forms.DataGridView dataGridView1; 404 private MainForm.WindowsForms.ViewHost byCostViewHost; 405 private System.Windows.Forms.CheckBox eachOrAllBudgetsCheckBox; 406 private System.Windows.Forms.Button generateBudgetsButton; 407 private System.Windows.Forms.CheckBox budgetLogScalingCheckBox; 271 408 } 272 409 } -
branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs
r12822 r12838 40 40 41 41 private static readonly Color[] colors = new[] { 42 Color.FromArgb(0x 20, 0x4A, 0x87),43 Color.FromArgb(0x C1, 0x7D, 0x11),44 Color.FromArgb(0x4E, 0x 9A, 0x06),42 Color.FromArgb(0x40, 0x6A, 0xB7), 43 Color.FromArgb(0xB1, 0x6D, 0x01), 44 Color.FromArgb(0x4E, 0x8A, 0x06), 45 45 Color.FromArgb(0x75, 0x50, 0x7B), 46 46 Color.FromArgb(0x72, 0x9F, 0xCF), 47 47 Color.FromArgb(0xA4, 0x00, 0x00), 48 48 Color.FromArgb(0xAD, 0x7F, 0xA8), 49 Color.FromArgb(0xF5, 0x79, 0x00), 49 Color.FromArgb(0x29, 0x50, 0xCF), 50 Color.FromArgb(0x90, 0xB0, 0x60), 51 Color.FromArgb(0xF5, 0x89, 0x30), 50 52 Color.FromArgb(0x55, 0x57, 0x53), 51 Color.FromArgb(0xEF, 0x29, 0x29), 52 Color.FromArgb(0xED, 0xD4, 0x00), 53 Color.FromArgb(0x73, 0xD2, 0x16), 53 Color.FromArgb(0xEF, 0x59, 0x59), 54 Color.FromArgb(0xED, 0xD4, 0x30), 55 Color.FromArgb(0x63, 0xC2, 0x16), 56 }; 57 private static readonly DataRowVisualProperties.DataRowLineStyle[] lineStyles = new[] { 58 DataRowVisualProperties.DataRowLineStyle.Solid, 59 DataRowVisualProperties.DataRowLineStyle.Dash, 60 DataRowVisualProperties.DataRowLineStyle.DashDot, 61 DataRowVisualProperties.DataRowLineStyle.Dot 54 62 }; 55 63 … … 59 67 } 60 68 61 private double[] levels; 69 private double[] targets; 70 private double[] budgets; 62 71 63 72 private bool suppressUpdates; 64 private readonly IndexedDataTable<double> combinedDataTable; 65 public IndexedDataTable<double> CombinedDataTable { 66 get { return combinedDataTable; } 73 private readonly IndexedDataTable<double> byTargetDataTable; 74 public IndexedDataTable<double> ByTargetDataTable { 75 get { return byTargetDataTable; } 76 } 77 private readonly IndexedDataTable<double> byCostDataTable; 78 public IndexedDataTable<double> ByCostDataTable { 79 get { return byCostDataTable; } 67 80 } 68 81 69 82 public RunCollectionRLDView() { 70 83 InitializeComponent(); 71 combinedDataTable = new IndexedDataTable<double>("Combined DataTable", "A data table containing the ECDF of each of a number of groups.") {84 byTargetDataTable = new IndexedDataTable<double>("ECDF by Target", "A data table containing the ECDF of each of a number of groups.") { 72 85 VisualProperties = { 73 86 YAxisTitle = "Proportion of reached targets", … … 76 89 } 77 90 }; 78 viewHost.Content = combinedDataTable; 91 byTargetViewHost.Content = byTargetDataTable; 92 byCostDataTable = new IndexedDataTable<double>("ECDF by Cost", "A data table containing the ECDF of each of a number of groups.") { 93 VisualProperties = { 94 YAxisTitle = "Proportion of required budgets", 95 YAxisMinimumFixedValue = 0, YAxisMinimumAuto = false, 96 YAxisMaximumFixedValue = 1, YAxisMaximumAuto = false 97 } 98 }; 99 byCostViewHost.Content = byCostDataTable; 79 100 suppressUpdates = false; 80 101 } … … 170 191 dataTableComboBox.Items.Clear(); 171 192 groupComboBox.Items.Clear(); 172 combinedDataTable.Rows.Clear();193 byTargetDataTable.Rows.Clear(); 173 194 174 195 UpdateCaption(); … … 179 200 } 180 201 181 protected override void SetEnabledStateOfControls() {182 base.SetEnabledStateOfControls();183 groupComboBox.Enabled = Content != null;184 dataTableComboBox.Enabled = Content != null;185 fixedTargetButton.Enabled = Content != null && levels != null && dataTableComboBox.SelectedIndex >= 0;186 }187 188 private void UpdateRuns() {189 if (InvokeRequired) {190 Invoke((Action)UpdateRuns);191 return;192 }193 SuspendRepaint();194 try {195 combinedDataTable.VisualProperties.XAxisLogScale = false;196 combinedDataTable.Rows.Clear();197 var table = (string)dataTableComboBox.SelectedItem;198 if (string.IsNullOrEmpty(table)) return;199 if (levels == null) {200 var worstMin = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.First().Item2).Min();201 var worstMax = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.First().Item2).Max();202 var bestMin = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Last().Item2).Min();203 var bestMax = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Last().Item2).Max();204 double worst, best;205 if (Math.Abs(bestMax - worstMin) > Math.Abs(bestMin - worstMax)) {206 worst = worstMin;207 best = bestMax;208 } else {209 worst = worstMax;210 best = bestMin;211 }212 levels = Enumerable.Range(0, 11).Select(x => worst + (x / 10.0) * (best - worst)).ToArray();213 suppressTargetsEvents = true;214 targetsTextBox.Text = string.Join(" ; ", levels);215 suppressTargetsEvents = false;216 }217 var selectedGroup = (string)groupComboBox.SelectedItem;218 if (string.IsNullOrEmpty(selectedGroup)) return;219 List<Tuple<string, List<IRun>>> groupedRuns;220 if (selectedGroup == AllRuns)221 groupedRuns = new List<Tuple<string, List<IRun>>> { Tuple.Create(AllRuns, Content.ToList()) };222 else groupedRuns = (from r in Content223 group r by r.Parameters[selectedGroup].ToString() into g224 select Tuple.Create(g.Key, g.ToList())).ToList();225 var xAxisTitles = new HashSet<string>();226 var colorCount = 0;227 var lineStyles = new[] {228 DataRowVisualProperties.DataRowLineStyle.Solid,229 DataRowVisualProperties.DataRowLineStyle.Dash,230 DataRowVisualProperties.DataRowLineStyle.DashDot,231 DataRowVisualProperties.DataRowLineStyle.Dot232 };233 var lineStyleCount = 0;234 foreach (var group in groupedRuns) {235 var hits = new Dictionary<string, SortedList<double, double>>();236 foreach (var run in group.Item2) {237 if (!run.Results.ContainsKey(table)) continue;238 var resultsTable = (IndexedDataTable<double>)run.Results[table];239 xAxisTitles.Add(resultsTable.VisualProperties.XAxisTitle);240 var values = resultsTable.Rows.First().Values;241 var maximization = values.First().Item2 < values.Last().Item2;242 if (allOrEachTargetCheckBox.Checked) {243 // each244 foreach (double l in levels) {245 var key = "-" + l.ToString();246 if (!hits.ContainsKey(key)) hits.Add(key, new SortedList<double, double>());247 foreach (var v in values) {248 if (maximization && v.Item2 >= l || !maximization && v.Item2 <= l) {249 if (hits[key].ContainsKey(v.Item1))250 hits[key][v.Item1] += 1.0 / group.Item2.Count;251 else hits[key][v.Item1] = 1.0 / group.Item2.Count;252 break;253 }254 }255 }256 } else {257 if (!hits.ContainsKey("all")) hits.Add("all", new SortedList<double, double>());258 // all259 var i = 0;260 var j = 0;261 var current = values[j];262 var prev = Tuple.Create(-1.0, double.NaN);263 while (i < levels.Length) {264 if ((double.IsNaN(prev.Item2) || prev.Item2 != current.Item2)265 && (maximization && current.Item2 >= levels[i]266 || !maximization && current.Item2 <= levels[i])) {267 if (hits["all"].ContainsKey(current.Item1))268 hits["all"][current.Item1] += 1.0 / (group.Item2.Count * levels.Length);269 else hits["all"][current.Item1] = 1.0 / (group.Item2.Count * levels.Length);270 i++;271 } else {272 j++;273 if (j >= values.Count) break;274 prev = current;275 current = values[j];276 }277 }278 }279 }280 foreach (var list in hits) {281 var row = new IndexedDataRow<double>(group.Item1 + (list.Key != "all" ? list.Key : string.Empty)) {282 VisualProperties = {283 ChartType = DataRowVisualProperties.DataRowChartType.StepLine,284 LineWidth = 2,285 Color = colors[colorCount],286 LineStyle = lineStyles[lineStyleCount]287 }288 };289 var total = 0.0;290 foreach (var h in list.Value) {291 total += h.Value;292 row.Values.Add(Tuple.Create(h.Key, total));293 }294 combinedDataTable.Rows.Add(row);295 }296 colorCount = (colorCount + 1) % colors.Length;297 if (colorCount == 0) lineStyleCount = (lineStyleCount + 1) % lineStyles.Length;298 }299 combinedDataTable.VisualProperties.XAxisTitle = string.Join(" / ", xAxisTitles);300 combinedDataTable.VisualProperties.XAxisLogScale = combinedDataTable.Rows.Count > 0 && logScalingCheckBox.Checked;301 } finally { ResumeRepaint(true); }302 }303 202 304 203 private void UpdateGroupComboBox() { … … 333 232 } 334 233 234 protected override void SetEnabledStateOfControls() { 235 base.SetEnabledStateOfControls(); 236 groupComboBox.Enabled = Content != null; 237 dataTableComboBox.Enabled = Content != null; 238 addTargetsAsResultButton.Enabled = Content != null && targets != null && dataTableComboBox.SelectedIndex >= 0; 239 addBudgetsAsResultButton.Enabled = Content != null && budgets != null && dataTableComboBox.SelectedIndex >= 0; 240 } 241 242 private void UpdateRuns() { 243 if (InvokeRequired) { 244 Invoke((Action)UpdateRuns); 245 return; 246 } 247 SuspendRepaint(); 248 try { 249 UpdateResultsByTarget(); 250 UpdateResultsByCost(); 251 } finally { ResumeRepaint(true); } 252 } 253 254 #region Performance analysis by (multiple) target(s) 255 private void UpdateResultsByTarget() { 256 // necessary to reset log scale -> empty chart cannot use log scaling 257 byTargetDataTable.VisualProperties.XAxisLogScale = false; 258 byTargetDataTable.Rows.Clear(); 259 260 var table = (string)dataTableComboBox.SelectedItem; 261 if (string.IsNullOrEmpty(table)) return; 262 263 var selectedGroup = (string)groupComboBox.SelectedItem; 264 if (string.IsNullOrEmpty(selectedGroup)) return; 265 266 if (targets == null) GenerateDefaultTargets(table); 267 268 List<Tuple<string, List<IRun>>> groupedRuns; 269 if (selectedGroup == AllRuns) 270 groupedRuns = new List<Tuple<string, List<IRun>>> { 271 Tuple.Create(AllRuns, Content.Where(r => r.Results.ContainsKey(table) && r.Visible).ToList()) 272 }; 273 else groupedRuns = (from r in Content 274 where r.Results.ContainsKey(table) && r.Visible 275 group r by r.Parameters[selectedGroup].ToString() into g 276 select Tuple.Create(g.Key, g.ToList())).ToList(); 277 278 var xAxisTitles = new HashSet<string>(); 279 var colorCount = 0; 280 var lineStyleCount = 0; 281 var maximization = IsMaximization(); 282 283 foreach (var group in groupedRuns) { 284 var hits = new Dictionary<string, SortedList<double, double>>(); 285 var maxLength = 0.0; 286 287 foreach (var run in group.Item2) { 288 var resultsTable = (IndexedDataTable<double>)run.Results[table]; 289 xAxisTitles.Add(resultsTable.VisualProperties.XAxisTitle); 290 291 if (eachOrAllTargetCheckBox.Checked) { 292 CalculateHitsForEachTarget(hits, resultsTable.Rows.First(), maximization, group.Item2.Count, group.Item1); 293 } else { 294 maxLength = CalculateHitsForAllTargets(hits, resultsTable.Rows.First(), maximization, group.Item2.Count, group.Item1); 295 } 296 } 297 298 foreach (var list in hits) { 299 var row = new IndexedDataRow<double>(list.Key) { 300 VisualProperties = { 301 ChartType = DataRowVisualProperties.DataRowChartType.StepLine, 302 LineWidth = 2, 303 Color = colors[colorCount], 304 LineStyle = lineStyles[lineStyleCount] 305 } 306 }; 307 308 var total = 0.0; 309 foreach (var h in list.Value) { 310 total += h.Value; 311 row.Values.Add(Tuple.Create(h.Key, total)); 312 } 313 314 if (maxLength > 0 && (row.Values.Count == 0 || row.Values.Last().Item1 < maxLength)) 315 row.Values.Add(Tuple.Create(maxLength, total)); 316 317 byTargetDataTable.Rows.Add(row); 318 } 319 colorCount = (colorCount + 1) % colors.Length; 320 if (colorCount == 0) lineStyleCount = (lineStyleCount + 1) % lineStyles.Length; 321 } 322 323 byTargetDataTable.VisualProperties.XAxisTitle = string.Join(" / ", xAxisTitles); 324 byTargetDataTable.VisualProperties.XAxisLogScale = byTargetDataTable.Rows.Count > 0 && targetLogScalingCheckBox.Checked; 325 } 326 327 private void GenerateDefaultTargets(string table) { 328 var worst = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Select(y => y.Item2).Min()).Min(); 329 var best = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Select(y => y.Item2).Max()).Max(); 330 var maximization = IsMaximization(); 331 if (!maximization) { 332 var h = worst; 333 worst = best; 334 best = h; 335 } 336 337 if (best == 0 || Math.Abs(best - worst) < Math.Abs(best * 2)) 338 targets = Enumerable.Range(0, 11).Select(x => worst + (x / 10.0) * (best - worst)).ToArray(); 339 else if (best > 0) targets = Enumerable.Range(0, 11).Select(x => best * (1.0 + (10 - x) / 10.0)).ToArray(); 340 else if (best < 0) targets = Enumerable.Range(0, 11).Select(x => best / (1.0 + (10 - x) / 10.0)).ToArray(); 341 342 suppressTargetsEvents = true; 343 targetsTextBox.Text = string.Join(" ; ", targets); 344 suppressTargetsEvents = false; 345 } 346 347 private void CalculateHitsForEachTarget(Dictionary<string, SortedList<double, double>> hits, IndexedDataRow<double> row, bool maximization, int groupCount, string groupName) { 348 foreach (var l in targets) { 349 var key = groupName + "-" + l; 350 if (!hits.ContainsKey(key)) hits.Add(key, new SortedList<double, double>()); 351 foreach (var v in row.Values) { 352 if (maximization && v.Item2 >= l || !maximization && v.Item2 <= l) { 353 if (hits[key].ContainsKey(v.Item1)) 354 hits[key][v.Item1] += 1.0 / groupCount; 355 else hits[key][v.Item1] = 1.0 / groupCount; 356 break; 357 } 358 } 359 } 360 } 361 362 private double CalculateHitsForAllTargets(Dictionary<string, SortedList<double, double>> hits, IndexedDataRow<double> row, bool maximization, int groupCount, string groupName) { 363 var values = row.Values; 364 if (!hits.ContainsKey(groupName)) hits.Add(groupName, new SortedList<double, double>()); 365 366 var i = 0; 367 var j = 0; 368 while (i < targets.Length && j < values.Count) { 369 var current = values[j]; 370 if (maximization && current.Item2 >= targets[i] 371 || !maximization && current.Item2 <= targets[i]) { 372 if (!hits[groupName].ContainsKey(current.Item1)) hits[groupName][current.Item1] = 0; 373 hits[groupName][current.Item1] += 1.0 / (groupCount * targets.Length); 374 i++; 375 } else { 376 j++; 377 } 378 } 379 if (j == values.Count) j--; 380 return values[j].Item1; 381 } 382 #endregion 383 384 #region Performance analysis by (multiple) budget(s) 385 private void UpdateResultsByCost() { 386 // necessary to reset log scale -> empty chart cannot use log scaling 387 byCostDataTable.VisualProperties.XAxisLogScale = false; 388 byCostDataTable.Rows.Clear(); 389 390 var table = (string)dataTableComboBox.SelectedItem; 391 if (string.IsNullOrEmpty(table)) return; 392 393 var selectedGroup = (string)groupComboBox.SelectedItem; 394 if (string.IsNullOrEmpty(selectedGroup)) return; 395 396 if (budgets == null) GenerateDefaultBudgets(table); 397 398 List<Tuple<string, List<IRun>>> groupedRuns; 399 if (selectedGroup == AllRuns) 400 groupedRuns = new List<Tuple<string, List<IRun>>> { 401 Tuple.Create(AllRuns, Content.Where(r => r.Results.ContainsKey(table) && r.Visible).ToList()) 402 }; 403 else groupedRuns = (from r in Content 404 where r.Results.ContainsKey(table) && r.Visible 405 group r by r.Parameters[selectedGroup].ToString() into g 406 select Tuple.Create(g.Key, g.ToList())).ToList(); 407 408 var colorCount = 0; 409 var lineStyleCount = 0; 410 var maximization = IsMaximization(); 411 412 foreach (var group in groupedRuns) { 413 var hits = new Dictionary<string, SortedList<double, double>>(); 414 415 foreach (var run in group.Item2) { 416 var resultsTable = (IndexedDataTable<double>)run.Results[table]; 417 418 if (eachOrAllBudgetsCheckBox.Checked) { 419 CalculateHitsForEachBudget(hits, resultsTable.Rows.First(), maximization, group.Item2.Count, group.Item1); 420 } else { 421 CalculateHitsForAllBudgets(hits, resultsTable.Rows.First(), maximization, group.Item2.Count, group.Item1); 422 } 423 } 424 425 foreach (var list in hits) { 426 var row = new IndexedDataRow<double>(list.Key) { 427 VisualProperties = { 428 ChartType = DataRowVisualProperties.DataRowChartType.StepLine, 429 LineWidth = 2, 430 Color = colors[colorCount], 431 LineStyle = lineStyles[lineStyleCount] 432 } 433 }; 434 435 var total = 0.0; 436 foreach (var h in list.Value) { 437 total += h.Value; 438 row.Values.Add(Tuple.Create(h.Key, total)); 439 } 440 441 byCostDataTable.Rows.Add(row); 442 } 443 colorCount = (colorCount + 1) % colors.Length; 444 if (colorCount == 0) lineStyleCount = (lineStyleCount + 1) % lineStyles.Length; 445 } 446 447 byCostDataTable.VisualProperties.XAxisTitle = "Targets"; 448 byCostDataTable.VisualProperties.XAxisLogScale = byCostDataTable.Rows.Count > 0 && budgetLogScalingCheckBox.Checked; 449 } 450 451 private void GenerateDefaultBudgets(string table) { 452 var min = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Select(y => y.Item1).Min()).Min(); 453 var max = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Select(y => y.Item1).Max()).Max(); 454 455 var maxMagnitude = (int)Math.Ceiling(Math.Log10(max)); 456 var minMagnitude = (int)Math.Floor(Math.Log10(min)); 457 if (maxMagnitude - minMagnitude >= 3) { 458 budgets = new double[maxMagnitude - minMagnitude]; 459 for (var i = minMagnitude; i < maxMagnitude; i++) { 460 budgets[i - minMagnitude] = Math.Pow(10, i); 461 } 462 } else { 463 var range = max - min; 464 budgets = Enumerable.Range(0, 6).Select(x => min + (x / 5.0) * range).ToArray(); 465 } 466 suppressBudgetsEvents = true; 467 budgetsTextBox.Text = string.Join(" ; ", budgets); 468 suppressBudgetsEvents = false; 469 } 470 471 private void CalculateHitsForEachBudget(Dictionary<string, SortedList<double, double>> hits, IndexedDataRow<double> row, bool maximization, int groupCount, string groupName) { 472 foreach (var b in budgets) { 473 var key = groupName + "-" + b; 474 if (!hits.ContainsKey(key)) hits.Add(key, new SortedList<double, double>()); 475 Tuple<double, double> prev = null; 476 foreach (var v in row.Values) { 477 if (v.Item1 >= b) { 478 // the budget may be too low to achieve any target 479 if (prev == null && v.Item1 != b) break; 480 var tgt = (prev == null || v.Item1 == b) ? v.Item2 : prev.Item2; 481 if (hits[key].ContainsKey(tgt)) 482 hits[key][tgt] += 1.0 / groupCount; 483 else hits[key][tgt] = 1.0 / groupCount; 484 break; 485 } 486 prev = v; 487 } 488 if (hits[key].Count == 0) hits.Remove(key); 489 } 490 } 491 492 private void CalculateHitsForAllBudgets(Dictionary<string, SortedList<double, double>> hits, IndexedDataRow<double> row, bool maximization, int groupCount, string groupName) { 493 var values = row.Values; 494 if (!hits.ContainsKey(groupName)) hits.Add(groupName, new SortedList<double, double>()); 495 496 var i = 0; 497 var j = 0; 498 Tuple<double, double> prev = null; 499 while (i < budgets.Length && j < values.Count) { 500 var current = values[j]; 501 if (current.Item1 >= budgets[i]) { 502 if (prev != null || current.Item1 == budgets[i]) { 503 var tgt = (prev == null || current.Item1 == budgets[i]) ? current.Item2 : prev.Item2; 504 if (!hits[groupName].ContainsKey(tgt)) hits[groupName][tgt] = 0; 505 hits[groupName][tgt] += 1.0 / (groupCount * budgets.Length); 506 } 507 i++; 508 } else { 509 j++; 510 prev = current; 511 } 512 } 513 var lastTgt = values.Last().Item2; 514 if (i < budgets.Length && !hits[groupName].ContainsKey(lastTgt)) hits[groupName][lastTgt] = 0; 515 while (i < budgets.Length) { 516 hits[groupName][lastTgt] += 1.0 / (groupCount * budgets.Length); 517 i++; 518 } 519 } 520 #endregion 521 335 522 private void UpdateCaption() { 336 523 Caption = Content != null ? Content.OptimizerName + " RLD View" : ViewAttribute.GetViewName(GetType()); … … 342 529 } 343 530 private void dataTableComboBox_SelectedIndexChanged(object sender, EventArgs e) { 531 if (dataTableComboBox.SelectedIndex >= 0) 532 GenerateDefaultBudgets((string)dataTableComboBox.SelectedItem); 344 533 UpdateRuns(); 345 534 SetEnabledStateOfControls(); … … 347 536 348 537 private void logScalingCheckBox_CheckedChanged(object sender, EventArgs e) { 349 combinedDataTable.VisualProperties.XAxisLogScale = logScalingCheckBox.Checked; 350 } 351 538 byTargetDataTable.VisualProperties.XAxisLogScale = byTargetDataTable.Rows.Count > 0 && targetLogScalingCheckBox.Checked; 539 byCostDataTable.VisualProperties.XAxisLogScale = byCostDataTable.Rows.Count > 0 && budgetLogScalingCheckBox.Checked; 540 } 541 542 #region Event handlers for target analysis 352 543 private bool suppressTargetsEvents; 353 544 private void targetsTextBox_Validating(object sender, CancelEventArgs e) { … … 371 562 e.Cancel = false; 372 563 errorProvider.SetError(targetsTextBox, null); 373 levels = targetList.ToArray();374 UpdateR uns();564 targets = targetList.ToArray(); 565 UpdateResultsByTarget(); 375 566 SetEnabledStateOfControls(); 376 567 } 377 568 569 private void eachOrAllTargetCheckBox_CheckedChanged(object sender, EventArgs e) { 570 var each = eachOrAllTargetCheckBox.Checked; 571 eachOrAllTargetCheckBox.Text = each ? "each" : "all"; 572 SuspendRepaint(); 573 try { 574 UpdateResultsByTarget(); 575 } finally { ResumeRepaint(true); } 576 } 577 378 578 private void generateTargetsButton_Click(object sender, EventArgs e) { 579 var maximization = IsMaximization(); 379 580 decimal max = 1, min = 0, count = 10; 380 if ( levels != null) {381 max = (decimal) Math.Max(levels.First(), levels.Last());382 min = (decimal) Math.Min(levels.First(), levels.Last());383 count = levels.Length;581 if (targets != null) { 582 max = (decimal)targets.Max(); 583 min = (decimal)targets.Min(); 584 count = targets.Length; 384 585 } else if (Content.Count > 0 && dataTableComboBox.SelectedIndex >= 0) { 385 586 var table = (string)dataTableComboBox.SelectedItem; 386 var worst = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Max(y => y.Item2)).First(); 387 var best = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Min(y => y.Item2)).Last(); 388 max = (decimal)Math.Max(best, worst); 389 min = (decimal)Math.Min(best, worst); 390 count = 10; 587 max = (decimal)Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Max(y => y.Item2)).Max(); 588 min = (decimal)Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Min(y => y.Item2)).Min(); 589 count = 6; 391 590 } 392 591 using (var dialog = new DefineArithmeticProgressionDialog(false, min, max, (max - min) / count)) { 393 592 if (dialog.ShowDialog() == DialogResult.OK) { 394 593 if (dialog.Values.Any()) { 395 var maximization = true; 396 if (Content.Count > 0 && Content.First().Parameters.ContainsKey("Maximization")) 397 maximization = ((BoolValue)Content.First().Parameters["Maximization"]).Value; 398 399 levels = maximization ? dialog.Values.Select(x => (double)x).ToArray() 594 targets = maximization ? dialog.Values.Select(x => (double)x).ToArray() 400 595 : dialog.Values.Reverse().Select(x => (double)x).ToArray(); 401 596 suppressTargetsEvents = true; 402 targetsTextBox.Text = string.Join(" ; ", levels);597 targetsTextBox.Text = string.Join(" ; ", targets); 403 598 suppressTargetsEvents = false; 404 599 405 UpdateR uns();600 UpdateResultsByTarget(); 406 601 SetEnabledStateOfControls(); 407 602 } … … 410 605 } 411 606 412 private void fixedTargetButton_Click(object sender, EventArgs e) {607 private void addTargetsAsResultButton_Click(object sender, EventArgs e) { 413 608 var table = (string)dataTableComboBox.SelectedItem; 609 var maximization = IsMaximization(); 414 610 foreach (var run in Content) { 415 611 if (!run.Results.ContainsKey(table)) continue; 416 612 var resultsTable = (IndexedDataTable<double>)run.Results[table]; 417 613 var values = resultsTable.Rows.First().Values; 418 var maximization = values.First().Item2 < values.Last().Item2;419 614 var i = 0; 420 615 var j = 0; 421 var current = values[j]; 422 var prev = Tuple.Create(-1.0, double.NaN); 423 while (i < levels.Length) { 424 if (prev.Item2 != current.Item2 425 && (maximization && current.Item2 >= levels[i] 426 || !maximization && current.Item2 <= levels[i])) { 427 run.Results[table + ".Target" + levels[i]] = new DoubleValue(current.Item1); 616 while (i < targets.Length && j < values.Count) { 617 var current = values[j]; 618 if (maximization && current.Item2 >= targets[i] 619 || !maximization && current.Item2 <= targets[i]) { 620 run.Results[table + ".Target" + targets[i]] = new DoubleValue(current.Item1); 428 621 i++; 429 622 } else { 430 623 j++; 431 if (j >= values.Count) break; 432 prev = current; 433 current = values[j]; 434 } 435 } 436 } 437 } 438 439 private void fixedCostButton_Click(object sender, EventArgs e) { 624 } 625 } 626 } 627 } 628 #endregion 629 630 #region Event handlers for cost analysis 631 private bool suppressBudgetsEvents; 632 private void budgetsTextBox_Validating(object sender, CancelEventArgs e) { 633 if (suppressBudgetsEvents) return; 634 var budgetStrings = budgetsTextBox.Text.Split(new[] { ';', '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries); 635 var budgetList = new List<double>(); 636 foreach (var ts in budgetStrings) { 637 double b; 638 if (!double.TryParse(ts, out b)) { 639 errorProvider.SetError(budgetsTextBox, "Not all targets can be parsed: " + ts); 640 e.Cancel = true; 641 return; 642 } 643 budgetList.Add(b); 644 } 645 if (budgetList.Count == 0) { 646 errorProvider.SetError(budgetsTextBox, "Give at least one target value!"); 647 e.Cancel = true; 648 return; 649 } 650 e.Cancel = false; 651 errorProvider.SetError(budgetsTextBox, null); 652 budgets = budgetList.ToArray(); 653 UpdateResultsByCost(); 654 SetEnabledStateOfControls(); 655 } 656 657 private void eachOrAllBudgetsCheckBox_CheckedChanged(object sender, EventArgs e) { 658 var each = eachOrAllBudgetsCheckBox.Checked; 659 eachOrAllBudgetsCheckBox.Text = each ? "each" : "all"; 660 SuspendRepaint(); 661 try { 662 UpdateResultsByCost(); 663 } finally { ResumeRepaint(true); } 664 } 665 666 private void generateBudgetsButton_Click(object sender, EventArgs e) { 667 decimal max = 1, min = 0, count = 10; 668 if (budgets != null) { 669 max = (decimal)budgets.Max(); 670 min = (decimal)budgets.Min(); 671 count = budgets.Length; 672 } else if (Content.Count > 0 && dataTableComboBox.SelectedIndex >= 0) { 673 var table = (string)dataTableComboBox.SelectedItem; 674 min = (decimal)Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Min(y => y.Item1)).Min(); 675 max = (decimal)Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Max(y => y.Item1)).Max(); 676 count = 6; 677 } 678 using (var dialog = new DefineArithmeticProgressionDialog(false, min, max, (max - min) / count)) { 679 if (dialog.ShowDialog() == DialogResult.OK) { 680 if (dialog.Values.Any()) { 681 budgets = dialog.Values.OrderBy(x => x).Select(x => (double)x).ToArray(); 682 683 suppressBudgetsEvents = true; 684 budgetsTextBox.Text = string.Join(" ; ", budgets); 685 suppressBudgetsEvents = false; 686 687 UpdateResultsByCost(); 688 SetEnabledStateOfControls(); 689 } 690 } 691 } 692 } 693 694 private void addBudgetsAsResultButton_Click(object sender, EventArgs e) { 440 695 var table = (string)dataTableComboBox.SelectedItem; 441 696 var budgetStrings = budgetsTextBox.Text.Split(new[] { ';', '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries); … … 461 716 var i = 0; 462 717 var j = 0; 463 var current = values[j]; 464 var prev = Tuple.Create(-1.0, double.NaN); 465 while (i < budgetList.Count) { 466 if (prev.Item2 != current.Item2 && current.Item1 >= budgetList[i]) { 467 run.Results[table + ".Cost" + budgetList[i]] = new DoubleValue(double.IsNaN(prev.Item2) || current.Item1 == budgetList[i] ? current.Item2 : prev.Item2); 718 Tuple<double, double> prev = null; 719 while (i < budgetList.Count && j < values.Count) { 720 var current = values[j]; 721 if (current.Item1 >= budgetList[i]) { 722 if (prev != null || current.Item1 == budgetList[i]) { 723 var tgt = (prev == null || current.Item1 == budgetList[i]) ? current.Item2 : prev.Item2; 724 run.Results[table + ".Cost" + budgetList[i]] = new DoubleValue(tgt); 725 } 468 726 i++; 469 727 } else { 470 728 j++; 471 if (j >= values.Count) break;472 729 prev = current; 473 current = values[j]; 474 } 475 } 476 } 477 } 478 479 private void allOrEachTargetCheckBox_CheckedChanged(object sender, EventArgs e) { 480 var each = allOrEachTargetCheckBox.Checked; 481 allOrEachTargetCheckBox.Text = each ? "each" : "all"; 482 UpdateRuns(); 483 } 730 } 731 } 732 } 733 } 734 #endregion 735 736 #region Helpers 737 // Determines if the RunCollection contains maximization or minimization runs 738 private bool IsMaximization() { 739 if (Content == null) return false; 740 if (Content.Count > 0) { 741 foreach (var run in Content.Where(x => x.Parameters.ContainsKey("Maximization") 742 && x.Parameters["Maximization"] is BoolValue)) { 743 if (((BoolValue)run.Parameters["Maximization"]).Value) { 744 return true; 745 } else { 746 return false; 747 } 748 } 749 if (dataTableComboBox.SelectedIndex >= 0) { 750 var selectedTable = (string)dataTableComboBox.SelectedItem; 751 foreach (var run in Content.Where(x => x.Results.ContainsKey(selectedTable))) { 752 var table = run.Results[selectedTable] as IndexedDataTable<double>; 753 if (table == null) continue; 754 var firstRowValues = table.Rows.First().Values; 755 if (firstRowValues.Count < 2) continue; 756 return firstRowValues[0].Item2 < firstRowValues[firstRowValues.Count - 1].Item2; 757 } 758 } 759 } 760 // assume minimization by default 761 return false; 762 } 763 #endregion 484 764 } 485 765 }
Note: See TracChangeset
for help on using the changeset viewer.