Changeset 17409
- Timestamp:
- 01/28/20 12:14:21 (5 years ago)
- Location:
- branches/2925_AutoDiffForDynamicalModels
- Files:
-
- 48 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2925_AutoDiffForDynamicalModels
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Algorithms.DataAnalysis
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Algorithms.DataAnalysis merged: 17272,17278
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Algorithms.DataAnalysis/3.4
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Algorithms.DataAnalysis/3.4 merged: 17272,17278
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesModelSurrogate.cs
r17246 r17409 24 24 using System.Collections.Generic; 25 25 using System.Linq; 26 using HEAL.Attic; 26 27 using HeuristicLab.Common; 27 28 using HeuristicLab.Core; 28 using HEAL.Attic;29 29 using HeuristicLab.Problems.DataAnalysis; 30 30 … … 38 38 // don't store the actual model! 39 39 // the actual model is only recalculated when necessary 40 private IGradientBoostedTreesModel fullModel; 40 41 private readonly Lazy<IGradientBoostedTreesModel> actualModel; 41 42 private IGradientBoostedTreesModel ActualModel { … … 48 49 private readonly uint seed; 49 50 [Storable] 50 private ILossFunction lossFunction;51 private readonly ILossFunction lossFunction; 51 52 [Storable] 52 private double r;53 private readonly double r; 53 54 [Storable] 54 private double m;55 private readonly double m; 55 56 [Storable] 56 private double nu;57 private readonly double nu; 57 58 [Storable] 58 private int iterations;59 private readonly int iterations; 59 60 [Storable] 60 private int maxSize;61 private readonly int maxSize; 61 62 62 63 … … 69 70 [StorableConstructor] 70 71 private GradientBoostedTreesModelSurrogate(StorableConstructorFlag _) : base(_) { 71 actualModel = new Lazy<IGradientBoostedTreesModel>(() => RecalculateModel());72 actualModel = CreateLazyInitFunc(); 72 73 } 73 74 74 75 private GradientBoostedTreesModelSurrogate(GradientBoostedTreesModelSurrogate original, Cloner cloner) 75 76 : base(original, cloner) { 76 IGradientBoostedTreesModel clonedModel = null; 77 if (original.actualModel.IsValueCreated) clonedModel = cloner.Clone(original.ActualModel); 78 actualModel = new Lazy<IGradientBoostedTreesModel>(CreateLazyInitFunc(clonedModel)); // only capture clonedModel in the closure 79 77 // clone data which is necessary to rebuild the model 80 78 this.trainingProblemData = cloner.Clone(original.trainingProblemData); 81 79 this.lossFunction = cloner.Clone(original.lossFunction); … … 86 84 this.m = original.m; 87 85 this.nu = original.nu; 86 87 // clone full model if it has already been created 88 if (original.fullModel != null) this.fullModel = cloner.Clone(original.fullModel); 89 actualModel = CreateLazyInitFunc(); 88 90 } 89 91 90 private Func<IGradientBoostedTreesModel> CreateLazyInitFunc(IGradientBoostedTreesModel clonedModel) { 91 return () => { 92 return clonedModel ?? RecalculateModel(); 93 }; 92 private Lazy<IGradientBoostedTreesModel> CreateLazyInitFunc() { 93 return new Lazy<IGradientBoostedTreesModel>(() => { 94 if (fullModel == null) fullModel = RecalculateModel(); 95 return fullModel; 96 }); 94 97 } 95 98 … … 107 110 this.nu = nu; 108 111 109 actualModel = new Lazy<IGradientBoostedTreesModel>(() => RecalculateModel());112 actualModel = CreateLazyInitFunc(); 110 113 } 111 114 112 // wrap an actual model in a surrog rate115 // wrap an actual model in a surrogate 113 116 public GradientBoostedTreesModelSurrogate(IGradientBoostedTreesModel model, IRegressionProblemData trainingProblemData, uint seed, 114 117 ILossFunction lossFunction, int iterations, int maxSize, double r, double m, double nu) 115 118 : this(trainingProblemData, seed, lossFunction, iterations, maxSize, r, m, nu) { 116 actualModel = new Lazy<IGradientBoostedTreesModel>(() => model);119 fullModel = model; 117 120 } 118 121 … … 135 138 136 139 public IEnumerable<IRegressionModel> Models { 137 get { 138 return ActualModel.Models; 139 } 140 get { return ActualModel.Models; } 140 141 } 141 142 142 143 public IEnumerable<double> Weights { 143 get { 144 return ActualModel.Weights; 145 } 144 get { return ActualModel.Weights; } 146 145 } 147 146 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelSurrogate.cs
r17246 r17409 35 35 #region parameters for recalculation of the model 36 36 [Storable] 37 private int seed;37 private readonly int seed; 38 38 [Storable] 39 private IDataAnalysisProblemData originalTrainingData;39 private readonly IDataAnalysisProblemData originalTrainingData; 40 40 [Storable] 41 private double[] classValues;41 private readonly double[] classValues; 42 42 [Storable] 43 private int nTrees;43 private readonly int nTrees; 44 44 [Storable] 45 private double r;45 private readonly double r; 46 46 [Storable] 47 private double m;47 private readonly double m; 48 48 #endregion 49 49 50 50 51 // don't store the actual model! 51 52 // the actual model is only recalculated when necessary 53 private IRandomForestModel fullModel = null; 52 54 private readonly Lazy<IRandomForestModel> actualModel; 55 53 56 private IRandomForestModel ActualModel { 54 57 get { return actualModel.Value; } … … 74 77 this.m = m; 75 78 76 actualModel = new Lazy<IRandomForestModel>(() => RecalculateModel());79 actualModel = CreateLazyInitFunc(); 77 80 } 78 81 79 // wrap an actual model in a surrog rate82 // wrap an actual model in a surrogate 80 83 public RandomForestModelSurrogate(IRandomForestModel model, string targetVariable, IDataAnalysisProblemData originalTrainingData, 81 int seed, int nTrees, double r, double m, double[] classValues = null) : this(targetVariable, originalTrainingData, seed, nTrees, r, m, classValues) { 82 actualModel = new Lazy<IRandomForestModel>(() => model); 84 int seed, int nTrees, double r, double m, double[] classValues = null) 85 : this(targetVariable, originalTrainingData, seed, nTrees, r, m, classValues) { 86 fullModel = model; 83 87 } 84 88 85 89 [StorableConstructor] 86 90 private RandomForestModelSurrogate(StorableConstructorFlag _) : base(_) { 87 actualModel = new Lazy<IRandomForestModel>(() => RecalculateModel());91 actualModel = CreateLazyInitFunc(); 88 92 } 89 93 90 94 private RandomForestModelSurrogate(RandomForestModelSurrogate original, Cloner cloner) : base(original, cloner) { 91 IRandomForestModel clonedModel = null;92 if (original.actualModel.IsValueCreated) clonedModel = cloner.Clone(original.ActualModel);93 actualModel = new Lazy<IRandomForestModel>(CreateLazyInitFunc(clonedModel)); // only capture clonedModel in the closure94 95 95 // clone data which is necessary to rebuild the model 96 96 this.originalTrainingData = cloner.Clone(original.originalTrainingData); … … 100 100 this.r = original.r; 101 101 this.m = original.m; 102 }103 102 104 private Func<IRandomForestModel> CreateLazyInitFunc(IRandomForestModel clonedModel) { 105 return () => { 106 return clonedModel ?? RecalculateModel(); 107 }; 103 // clone full model if it has already been created 104 if (original.fullModel != null) this.fullModel = cloner.Clone(original.fullModel); 105 actualModel = CreateLazyInitFunc(); 108 106 } 109 107 110 108 public override IDeepCloneable Clone(Cloner cloner) { 111 109 return new RandomForestModelSurrogate(this, cloner); 110 } 111 112 private Lazy<IRandomForestModel> CreateLazyInitFunc() { 113 return new Lazy<IRandomForestModel>(() => { 114 if (fullModel == null) fullModel = RecalculateModel(); 115 return fullModel; 116 }); 112 117 } 113 118 -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Administrator
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Clients.Hive.Administrator merged: 17268,17273-17274
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs
r16662 r17409 39 39 this.endLabel = new System.Windows.Forms.Label(); 40 40 this.indefiniteCheckBox = new System.Windows.Forms.CheckBox(); 41 this.createdTextBox = new System.Windows.Forms.TextBox(); 41 this.createdTextBox = new System.Windows.Forms.TextBox(); 42 42 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 43 this.refreshButton = new System.Windows.Forms.Button(); 43 44 this.SuspendLayout(); 44 45 // … … 68 69 this.nameLabel.Name = "nameLabel"; 69 70 this.nameLabel.Size = new System.Drawing.Size(38, 13); 70 this.nameLabel.TabIndex = 0;71 this.nameLabel.TabIndex = 2; 71 72 this.nameLabel.Text = "Name:"; 72 73 // … … 78 79 this.nameTextBox.Name = "nameTextBox"; 79 80 this.nameTextBox.Size = new System.Drawing.Size(464, 20); 80 this.nameTextBox.TabIndex = 2;81 this.nameTextBox.TabIndex = 3; 81 82 this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged); 82 83 this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating); … … 88 89 this.descriptionLabel.Name = "descriptionLabel"; 89 90 this.descriptionLabel.Size = new System.Drawing.Size(63, 13); 90 this.descriptionLabel.TabIndex = 0;91 this.descriptionLabel.TabIndex = 4; 91 92 this.descriptionLabel.Text = "Description:"; 92 93 // … … 99 100 this.descriptionTextBox.Name = "descriptionTextBox"; 100 101 this.descriptionTextBox.Size = new System.Drawing.Size(464, 98); 101 this.descriptionTextBox.TabIndex = 3;102 this.descriptionTextBox.TabIndex = 5; 102 103 this.descriptionTextBox.TextChanged += new System.EventHandler(this.descriptionTextBox_TextChanged); 103 104 // 104 // ownerLabel105 //106 this.ownerLabel.AutoSize = true;107 this.ownerLabel.Location = new System.Drawing.Point(3, 167);108 this.ownerLabel.Name = "ownerLabel";109 this.ownerLabel.Size = new System.Drawing.Size(41, 13);110 this.ownerLabel.TabIndex = 0;111 this.ownerLabel.Text = "Owner:";112 //113 105 // ownerComboBox 114 106 // 115 //this.ownerComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)116 // | System.Windows.Forms.AnchorStyles.Right)));117 107 this.ownerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 118 108 this.ownerComboBox.FormattingEnabled = true; … … 120 110 this.ownerComboBox.Name = "ownerComboBox"; 121 111 this.ownerComboBox.Size = new System.Drawing.Size(200, 21); 122 this.ownerComboBox.TabIndex = 4;112 this.ownerComboBox.TabIndex = 7; 123 113 this.ownerComboBox.SelectedIndexChanged += new System.EventHandler(this.ownerComboBox_SelectedIndexChanged); 114 // 115 // ownerLabel 116 // 117 this.ownerLabel.AutoSize = true; 118 this.ownerLabel.Location = new System.Drawing.Point(3, 167); 119 this.ownerLabel.Name = "ownerLabel"; 120 this.ownerLabel.Size = new System.Drawing.Size(41, 13); 121 this.ownerLabel.TabIndex = 6; 122 this.ownerLabel.Text = "Owner:"; 124 123 // 125 124 // createdLabel … … 129 128 this.createdLabel.Name = "createdLabel"; 130 129 this.createdLabel.Size = new System.Drawing.Size(47, 13); 131 this.createdLabel.TabIndex = 8;130 this.createdLabel.TabIndex = 9; 132 131 this.createdLabel.Text = "Created:"; 133 132 // … … 135 134 // 136 135 this.startDateTimePicker.CustomFormat = "ddd, dd.MM.yyyy, HH:mm:ss"; 137 this.startDateTimePicker.Enabled = false;138 136 this.startDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 139 137 this.startDateTimePicker.Location = new System.Drawing.Point(72, 216); 140 138 this.startDateTimePicker.Name = "startDateTimePicker"; 141 139 this.startDateTimePicker.Size = new System.Drawing.Size(200, 20); 142 this.startDateTimePicker.TabIndex = 9;143 this.startDateTimePicker.ValueChanged += new System.EventHandler(this.startDateTimePicker_ValueChanged); 140 this.startDateTimePicker.TabIndex = 12; 141 this.startDateTimePicker.ValueChanged += new System.EventHandler(this.startDateTimePicker_ValueChanged); 144 142 // 145 143 // startLabel … … 149 147 this.startLabel.Name = "startLabel"; 150 148 this.startLabel.Size = new System.Drawing.Size(32, 13); 151 this.startLabel.TabIndex = 1 0;149 this.startLabel.TabIndex = 11; 152 150 this.startLabel.Text = "Start:"; 153 151 // … … 155 153 // 156 154 this.endDateTimePicker.CustomFormat = "ddd, dd.MM.yyyy, HH:mm:ss"; 157 this.endDateTimePicker.Enabled = false;158 155 this.endDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 159 156 this.endDateTimePicker.Location = new System.Drawing.Point(72, 243); 160 157 this.endDateTimePicker.Name = "endDateTimePicker"; 161 158 this.endDateTimePicker.Size = new System.Drawing.Size(200, 20); 162 this.endDateTimePicker.TabIndex = 1 1;159 this.endDateTimePicker.TabIndex = 14; 163 160 this.endDateTimePicker.ValueChanged += new System.EventHandler(this.endDateTimePicker_ValueChanged); 164 161 // … … 169 166 this.endLabel.Name = "endLabel"; 170 167 this.endLabel.Size = new System.Drawing.Size(29, 13); 171 this.endLabel.TabIndex = 1 0;168 this.endLabel.TabIndex = 13; 172 169 this.endLabel.Text = "End:"; 173 170 // … … 178 175 this.indefiniteCheckBox.Name = "indefiniteCheckBox"; 179 176 this.indefiniteCheckBox.Size = new System.Drawing.Size(69, 17); 180 this.indefiniteCheckBox.TabIndex = 1 3;177 this.indefiniteCheckBox.TabIndex = 15; 181 178 this.indefiniteCheckBox.Text = "Indefinite"; 182 179 this.indefiniteCheckBox.UseVisualStyleBackColor = true; … … 189 186 this.createdTextBox.ReadOnly = true; 190 187 this.createdTextBox.Size = new System.Drawing.Size(200, 20); 191 this.createdTextBox.TabIndex = 14; 188 this.createdTextBox.TabIndex = 10; 189 // 190 // refreshButton 191 // 192 this.refreshButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh; 193 this.refreshButton.Location = new System.Drawing.Point(278, 162); 194 this.refreshButton.Name = "refreshButton"; 195 this.refreshButton.Size = new System.Drawing.Size(24, 24); 196 this.refreshButton.TabIndex = 8; 197 this.refreshButton.UseVisualStyleBackColor = true; 198 this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click); 192 199 // 193 200 // ProjectView … … 195 202 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 196 203 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 204 this.Controls.Add(this.refreshButton); 197 205 this.Controls.Add(this.createdTextBox); 198 206 this.Controls.Add(this.indefiniteCheckBox); … … 213 221 this.Size = new System.Drawing.Size(539, 271); 214 222 this.Load += new System.EventHandler(this.ProjectView_Load); 215 this.Disposed += new System.EventHandler(this.ProjectView_Disposed);216 223 this.ResumeLayout(false); 217 224 this.PerformLayout(); … … 235 242 private System.Windows.Forms.Label endLabel; 236 243 private System.Windows.Forms.CheckBox indefiniteCheckBox; 237 private System.Windows.Forms.TextBox createdTextBox; 244 private System.Windows.Forms.TextBox createdTextBox; 238 245 private System.Windows.Forms.ToolTip toolTip; 246 private System.Windows.Forms.Button refreshButton; 239 247 } 240 248 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
r17246 r17409 28 28 using HeuristicLab.Core.Views; 29 29 using HeuristicLab.MainForm; 30 using Tpl = System.Threading.Tasks; 30 31 31 32 namespace HeuristicLab.Clients.Hive.Administrator.Views { … … 33 34 [Content(typeof(Project), IsDefaultView = true)] 34 35 public partial class ProjectView : ItemView { 35 private readonly object locker = new object();36 37 36 public new Project Content { 38 37 get { return (Project)base.Content; } … … 58 57 } 59 58 60 protected void RegisterControlEvents() {61 nameTextBox.TextChanged += nameTextBox_TextChanged;62 nameTextBox.Validating += nameTextBox_Validating;63 descriptionTextBox.TextChanged += descriptionTextBox_TextChanged;64 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;65 startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged;66 endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged;67 indefiniteCheckBox.CheckedChanged += indefiniteCheckBox_CheckedChanged;68 }69 70 protected void DeregisterControlEvents() {71 nameTextBox.TextChanged -= nameTextBox_TextChanged;72 nameTextBox.Validating -= nameTextBox_Validating;73 descriptionTextBox.TextChanged -= descriptionTextBox_TextChanged;74 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;75 startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged;76 endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged;77 indefiniteCheckBox.CheckedChanged -= indefiniteCheckBox_CheckedChanged;78 }79 80 59 protected override void OnContentChanged() { 81 60 base.OnContentChanged(); 82 DeregisterControlEvents(); 61 UpdateView(); 62 } 63 64 private void UpdateView() { 83 65 if (Content == null) { 84 66 idTextBox.Clear(); … … 94 76 nameTextBox.Text = Content.Name; 95 77 descriptionTextBox.Text = Content.Description; 96 97 if (AccessClient.Instance.UsersAndGroups != null) { 98 var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>(); 99 if (!Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator)); 100 var projectOwnerId = Content.OwnerUserId; 101 ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList(); 102 ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == projectOwnerId); 103 } 104 78 ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups?.OfType<LightweightUser>().SingleOrDefault(x => x.Id == Content.OwnerUserId); 105 79 createdTextBox.Text = Content.DateCreated.ToString("ddd, dd.MM.yyyy, HH:mm:ss"); 106 80 startDateTimePicker.Value = Content.StartDate; 107 81 endDateTimePicker.Value = Content.EndDate.GetValueOrDefault(Content.StartDate); 108 82 indefiniteCheckBox.Checked = !Content.EndDate.HasValue; 109 if (!indefiniteCheckBox.Checked) endDateTimePicker.Value = Content.EndDate.Value; 110 else endDateTimePicker.Value = Content.StartDate; 111 endDateTimePicker.Enabled = !indefiniteCheckBox.Checked; 112 } 113 SetEnabledStateOfControls(); 114 RegisterControlEvents(); 115 } 116 117 protected override void SetEnabledStateOfControls() { 118 base.SetEnabledStateOfControls(); 119 bool enabled = Content != null && !Locked && !ReadOnly; 120 nameTextBox.Enabled = enabled; 121 descriptionTextBox.Enabled = enabled; 122 ownerComboBox.Enabled = enabled; 123 createdTextBox.Enabled = enabled; 124 startDateTimePicker.Enabled = enabled; 125 endDateTimePicker.Enabled = enabled && Content.EndDate.HasValue; 126 indefiniteCheckBox.Enabled = enabled; 127 128 if (Content != null) { 129 //var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault(); 130 var parentProject = HiveAdminClient.Instance.Projects.FirstOrDefault(x => x.Id == Content.ParentProjectId); 131 if ((!IsAdmin() && (parentProject == null || parentProject.EndDate.HasValue)) 132 || (IsAdmin() && parentProject != null && parentProject.EndDate.HasValue)) { 133 indefiniteCheckBox.Enabled = false; 134 } 135 136 if (Content.Id != Guid.Empty && !IsAdmin() && !HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) { 137 ownerComboBox.Enabled = false; 138 startDateTimePicker.Enabled = false; 139 endDateTimePicker.Enabled = false; 140 indefiniteCheckBox.Enabled = false; 141 } 142 } 143 } 144 #endregion 145 146 #region Event Handlers 147 private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) { 148 if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)Content_PropertyChanged, sender, e); 149 else OnContentChanged(); 150 } 151 152 private void AccessClient_Instance_Refreshing(object sender, EventArgs e) { 153 if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e); 154 else { 155 Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate); 156 SetEnabledStateOfControls(); 157 } 158 } 159 160 private void AccessClient_Instance_Refreshed(object sender, EventArgs e) { 161 if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e); 162 else { 163 Progress.Hide(this); 164 SetEnabledStateOfControls(); 165 } 166 } 167 168 private async void ProjectView_Load(object sender, EventArgs e) { 169 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 170 action: () => UpdateUsers(), 171 finallyCallback: () => { 172 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 173 var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>(); 174 if (Content != null && !Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator)); 175 var projectOwnerId = Content != null ? Content.OwnerUserId : (Guid?)null; 176 ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList(); 177 ownerComboBox.SelectedItem = projectOwnerId.HasValue ? users.FirstOrDefault(x => x.Id == projectOwnerId) : null; 178 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 179 }); 180 } 181 182 private void ProjectView_Disposed(object sender, EventArgs e) { 183 AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed; 184 AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing; 185 } 186 187 private void nameTextBox_Validating(object sender, CancelEventArgs e) { 188 if (string.IsNullOrEmpty(nameTextBox.Text)) { 189 MessageBox.Show( 190 "Project must have a name.", 191 "HeuristicLab Hive Administrator", 192 MessageBoxButtons.OK, 193 MessageBoxIcon.Error); 194 e.Cancel = true; 195 } 196 } 197 198 private void nameTextBox_TextChanged(object sender, EventArgs e) { 199 if (Content != null && Content.Name != nameTextBox.Text) { 200 DeregisterContentEvents(); 201 Content.Name = nameTextBox.Text; 202 RegisterContentEvents(); 203 } 204 } 205 206 private void descriptionTextBox_TextChanged(object sender, EventArgs e) { 207 if (Content != null && Content.Description != descriptionTextBox.Text) { 208 DeregisterContentEvents(); 209 Content.Description = descriptionTextBox.Text; 210 RegisterContentEvents(); 211 } 212 } 213 214 private void ownerComboBox_SelectedIndexChanged(object sender, EventArgs e) { 215 var selectedItem = (LightweightUser)ownerComboBox.SelectedItem; 216 var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty; 217 if (Content != null && Content.OwnerUserId != selectedOwnerUserId) { 218 DeregisterContentEvents(); 219 Content.OwnerUserId = selectedOwnerUserId; 220 RegisterContentEvents(); 221 } 222 } 223 224 private void startDateTimePicker_ValueChanged(object sender, EventArgs e) { 225 if (Content == null) return; 226 startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged; 227 228 if (!IsAdmin()) { 229 var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault(); 230 if (parentProject != null) { 231 if (startDateTimePicker.Value < parentProject.StartDate) 232 startDateTimePicker.Value = parentProject.StartDate; 233 } else { 234 startDateTimePicker.Value = Content.StartDate; 235 } 236 } 237 238 if (!Content.EndDate.HasValue || startDateTimePicker.Value > Content.EndDate) 239 endDateTimePicker.Value = startDateTimePicker.Value; 240 if (Content.StartDate != startDateTimePicker.Value) { 241 DeregisterContentEvents(); 242 Content.StartDate = startDateTimePicker.Value; 243 RegisterContentEvents(); 244 } 245 246 startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged; 247 } 248 249 private void endDateTimePicker_ValueChanged(object sender, EventArgs e) { 250 if (Content == null) return; 251 endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged; 252 253 if (!IsAdmin()) { 254 var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault(); 255 if (parentProject != null) { 256 if (parentProject.EndDate.HasValue && endDateTimePicker.Value > parentProject.EndDate.Value) { 257 endDateTimePicker.Value = parentProject.EndDate.Value; 258 } 259 } else if (Content.EndDate.HasValue) { 260 endDateTimePicker.Value = Content.EndDate.Value; 261 } 262 } 263 264 if (endDateTimePicker.Value < startDateTimePicker.Value) 265 endDateTimePicker.Value = startDateTimePicker.Value; 266 if (Content.EndDate != endDateTimePicker.Value) { 267 DeregisterContentEvents(); 268 Content.EndDate = endDateTimePicker.Value; 269 RegisterContentEvents(); 270 } 271 272 endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged; 273 } 274 275 private void indefiniteCheckBox_CheckedChanged(object sender, EventArgs e) { 276 if (Content == null) return; 277 278 var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : endDateTimePicker.Value; 279 endDateTimePicker.Enabled = !indefiniteCheckBox.Checked; 280 if (Content.EndDate != newEndDate) { 281 DeregisterContentEvents(); 282 Content.EndDate = newEndDate; 283 RegisterContentEvents(); 284 } 285 } 286 #endregion 287 288 #region Helpers 83 } 84 } 85 86 private async Tpl.Task UpdateUsersAsync() { 87 await Tpl.Task.Run(() => UpdateUsers()); 88 } 89 289 90 private void UpdateUsers() { 91 // deregister handler to avoid change of content's owner when data source is updated 92 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 290 93 try { 291 AccessClient.Instance.Refresh(); 94 ownerComboBox.DataSource = null; 95 SecurityExceptionUtil.TryAndReportSecurityExceptions(AccessClient.Instance.Refresh); 96 ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().OrderBy(x => x.UserName).ToList(); 292 97 } catch (AnonymousUserException) { 293 98 ShowHiveInformationDialog(); 294 } 295 } 296 297 private bool IsAdmin() { 298 return HiveRoles.CheckAdminUserPermissions(); 99 } finally { 100 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 101 } 299 102 } 300 103 … … 307 110 } 308 111 } 112 113 protected override void SetEnabledStateOfControls() { 114 base.SetEnabledStateOfControls(); 115 116 bool enabled = Content != null && !Locked && !ReadOnly; 117 118 nameTextBox.Enabled = enabled; 119 descriptionTextBox.Enabled = enabled; 120 ownerComboBox.Enabled = enabled; 121 refreshButton.Enabled = enabled; 122 createdTextBox.Enabled = enabled; 123 startDateTimePicker.Enabled = enabled; 124 endDateTimePicker.Enabled = enabled && Content.EndDate.HasValue && Content.EndDate > Content.StartDate; 125 indefiniteCheckBox.Enabled = enabled; 126 127 if (Content == null) return; 128 129 var parentProject = HiveAdminClient.Instance.Projects.SingleOrDefault(x => x.Id == Content.ParentProjectId); 130 if (parentProject != null && parentProject.EndDate.HasValue) 131 indefiniteCheckBox.Enabled = false; 132 133 if (Content.Id == Guid.Empty) return; // newly created project 134 if (HiveRoles.CheckAdminUserPermissions()) return; // admins can edit any project 135 if (HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) return; // owner can edit project 136 137 // project was already created and user is neither admin nor owner 138 ownerComboBox.Enabled = false; 139 startDateTimePicker.Enabled = false; 140 endDateTimePicker.Enabled = false; 141 indefiniteCheckBox.Enabled = false; 142 } 143 #endregion 144 145 #region Event Handlers 146 private void ProjectView_Load(object sender, EventArgs e) { 147 Locked = true; 148 try { 149 UpdateUsers(); 150 UpdateView(); 151 } finally { 152 Locked = false; 153 } 154 } 155 156 private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) { 157 UpdateView(); 158 } 159 160 private void nameTextBox_TextChanged(object sender, EventArgs e) { 161 if (Content == null || Content.Name == nameTextBox.Text) return; 162 Content.Name = nameTextBox.Text; 163 } 164 165 private void nameTextBox_Validating(object sender, CancelEventArgs e) { 166 if (!string.IsNullOrEmpty(nameTextBox.Text)) return; 167 168 MessageBox.Show("Project must have a name.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 169 e.Cancel = true; 170 } 171 172 private void descriptionTextBox_TextChanged(object sender, EventArgs e) { 173 if (Content == null || Content.Description == descriptionTextBox.Text) return; 174 Content.Description = descriptionTextBox.Text; 175 } 176 177 private void ownerComboBox_SelectedIndexChanged(object sender, EventArgs e) { 178 if (Content == null) return; 179 180 var selectedItem = (LightweightUser)ownerComboBox.SelectedItem; 181 var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty; 182 if (Content.OwnerUserId == selectedOwnerUserId) return; 183 184 Content.OwnerUserId = selectedOwnerUserId; 185 } 186 187 private async void refreshButton_Click(object sender, EventArgs e) { 188 Locked = true; 189 try { 190 await UpdateUsersAsync(); 191 UpdateView(); 192 } finally { 193 Locked = false; 194 } 195 } 196 197 private void startDateTimePicker_ValueChanged(object sender, EventArgs e) { 198 if (Content == null || Content.StartDate == startDateTimePicker.Value) return; 199 200 string errorMessage = string.Empty; 201 202 var parentProject = HiveAdminClient.Instance.Projects.SingleOrDefault(x => x.Id == Content.ParentProjectId); 203 if (parentProject != null) { 204 if (startDateTimePicker.Value < parentProject.StartDate) { 205 errorMessage = "Project cannot start before its parent project has started."; 206 } else if (startDateTimePicker.Value > parentProject.EndDate) { 207 errorMessage = "Project cannot start after its parent project has ended."; 208 } 209 } 210 211 if (startDateTimePicker.Value > endDateTimePicker.Value) { 212 errorMessage = "Project cannot start after it ends."; 213 } 214 215 if (!string.IsNullOrEmpty(errorMessage)) { 216 MessageBox.Show(errorMessage, "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 217 startDateTimePicker.Value = Content.StartDate; 218 } 219 220 Content.StartDate = startDateTimePicker.Value; 221 } 222 223 private void endDateTimePicker_ValueChanged(object sender, EventArgs e) { 224 if (Content == null || Content.EndDate == endDateTimePicker.Value || Content.StartDate == endDateTimePicker.Value) return; 225 226 string errorMessage = string.Empty; 227 228 var parentProject = HiveAdminClient.Instance.Projects.SingleOrDefault(x => x.Id == Content.ParentProjectId); 229 if (parentProject != null) { 230 if (endDateTimePicker.Value > parentProject.EndDate) { 231 errorMessage = "Project cannot end after its parent project has ended."; 232 } else if (endDateTimePicker.Value < parentProject.StartDate) { 233 errorMessage = "Project cannot end before its parent project has started."; 234 } 235 } 236 237 if (endDateTimePicker.Value < startDateTimePicker.Value) { 238 errorMessage = "Project cannot end after it starts."; 239 } 240 241 if (!string.IsNullOrEmpty(errorMessage)) { 242 MessageBox.Show(errorMessage, "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 243 endDateTimePicker.Value = Content.EndDate.GetValueOrDefault(Content.StartDate); 244 } 245 246 Content.EndDate = endDateTimePicker.Value; 247 } 248 249 private void indefiniteCheckBox_CheckedChanged(object sender, EventArgs e) { 250 if (Content == null) return; 251 252 var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : endDateTimePicker.Value; 253 254 if (Content.EndDate == newEndDate) return; 255 Content.EndDate = newEndDate; 256 257 endDateTimePicker.Enabled = !indefiniteCheckBox.Checked; 258 } 259 260 private void AccessClient_Instance_Refreshing(object sender, EventArgs e) { 261 if (InvokeRequired) { 262 Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e); 263 return; 264 } 265 266 Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate); 267 SetEnabledStateOfControls(); 268 } 269 270 private void AccessClient_Instance_Refreshed(object sender, EventArgs e) { 271 if (InvokeRequired) { 272 Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e); 273 return; 274 } 275 276 Progress.Hide(this); 277 SetEnabledStateOfControls(); 278 } 309 279 #endregion 310 280 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.JobManager
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Clients.Hive.JobManager merged: 17267
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs
r17246 r17409 144 144 if (Content != null && Content.Jobs != null) { 145 145 // clear hive client only if it is not displayed by any other content view (i.e. job manager) 146 var contentViews = MainFormManager.MainForm.Views.OfType<IContentView>(); 147 if (contentViews.All(x => x.Content != Content || x == this)) 146 var contentViews = MainFormManager.MainForm.Views.OfType<IContentView>() 147 .Where(v => v.Content == Content && v != this); 148 if (!contentViews.Any()) 148 149 Content.ClearHiveClient(); 149 150 -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Slave
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Clients.Hive.Slave merged: 17316
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Slave/3.3/Manager/ConfigManager.cs
r17246 r17409 25 25 using System.Linq; 26 26 using System.Management; 27 using System.Net.NetworkInformation;28 27 using HeuristicLab.Clients.Hive.SlaveCore.Properties; 29 28 … … 133 132 try { 134 133 prog = jobManager.GetExecutionTimes(); 135 } 136 catch (Exception ex) { 134 } catch (Exception ex) { 137 135 SlaveClientCom.Instance.LogMessage(string.Format("Exception was thrown while trying to get execution times: {0}", ex.Message)); 138 136 } … … 140 138 } 141 139 140 /// <summary> 141 /// Returns the unique machine id of the slave 142 /// </summary> 143 /// <returns><see cref="Guid"/></returns> 142 144 public static Guid GetUniqueMachineId() { 143 Guid id;144 try {145 id = GetUniqueMachineIdFromMac();146 }147 catch {148 // fallback if something goes wrong...149 id = new Guid(Environment.MachineName.GetHashCode(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);150 } 151 return id;145 // Due to the fact that repeated calculation of the machine ID can lead to a client registering at 146 // the Hive server multiple times with different IDs it's better to set the unique machine id only 147 // once, at first startup, and store it in core settings. 148 if (Settings.Default.MachineId == Guid.Empty) { 149 Settings.Default.MachineId = Guid.NewGuid(); 150 Settings.Default.Save(); 151 } 152 153 return Settings.Default.MachineId; 152 154 } 153 155 … … 170 172 } 171 173 172 /// <summary>173 /// Generate a guid based on mac address of the first found nic (yes, mac addresses are not unique...)174 /// and the machine name.175 /// Format:176 ///177 /// D1 D2 D3 Res. D4178 /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+179 /// |n a m e|0 0|0 0|0 0 mac address|180 /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+181 ///182 /// The mac address is saved in the last 48 bits of the Data 4 segment183 /// of the guid (first 2 bytes of Data 4 are reserved).184 /// D1 contains the hash of the machinename.185 /// </summary>186 private static Guid GetUniqueMachineIdFromMac() {187 //try to get a real network interface, not a virtual one188 NetworkInterface validNic = NetworkInterface.GetAllNetworkInterfaces()189 .FirstOrDefault(x =>190 !x.Name.Contains(vmwareNameString) &&191 !x.Name.Contains(virtualboxNameString) &&192 (x.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||193 x.NetworkInterfaceType == NetworkInterfaceType.GigabitEthernet));194 195 if (validNic == default(NetworkInterface)) {196 validNic = NetworkInterface.GetAllNetworkInterfaces().First();197 }198 199 byte[] addr = validNic.GetPhysicalAddress().GetAddressBytes();200 if (addr.Length < macLength || addr.Length > macLongLength) {201 throw new ArgumentException(string.Format("Error generating slave UID: MAC address has to have a length between {0} and {1} bytes. Actual MAC address is: {2}",202 macLength, macLongLength, addr));203 }204 205 if (addr.Length < macLongLength) {206 byte[] b = new byte[8];207 Array.Copy(addr, 0, b, 2, addr.Length);208 addr = b;209 }210 211 // also get machine name and save it to the first 4 bytes212 Guid guid = new Guid(Environment.MachineName.GetHashCode(), 0, 0, addr);213 return guid;214 }215 216 174 private static long? GetWMIValue(string clazz, string property) { 217 175 ManagementClass mgtClass = new ManagementClass(clazz); … … 223 181 try { 224 182 return long.Parse(prop.Value.ToString()); 225 } 226 catch { 183 } catch { 227 184 return null; 228 185 } … … 241 198 try { 242 199 mb = (int)(memCounter.NextValue() / 1024 / 1024); 243 } 244 catch { } 200 } catch { } 245 201 return mb; 246 202 } … … 251 207 try { 252 208 return cpuCounter.NextValue(); 253 } 254 catch { } 209 } catch { } 255 210 return cpuVal; 256 211 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.Designer.cs
r14164 r17409 1 1 //------------------------------------------------------------------------------ 2 2 // <auto-generated> 3 // Dieser Code wurde von einem Tool generiert.4 // Laufzeitversion:4.0.30319.420003 // This code was generated by a tool. 4 // Runtime Version:4.0.30319.42000 5 5 // 6 // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn7 // der Code erneut generiert wird.6 // Changes to this file may cause incorrect behavior and will be lost if 7 // the code is regenerated. 8 8 // </auto-generated> 9 9 //------------------------------------------------------------------------------ … … 13 13 14 14 [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "1 4.0.0.0")]15 [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.2.0.0")] 16 16 public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 17 … … 323 323 } 324 324 } 325 326 [global::System.Configuration.UserScopedSettingAttribute()] 327 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 328 [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")] 329 public global::System.Guid MachineId { 330 get { 331 return ((global::System.Guid)(this["MachineId"])); 332 } 333 set { 334 this["MachineId"] = value; 335 } 336 } 325 337 } 326 338 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Slave/3.3/Properties/Settings.settings
r14164 r17409 78 78 <Value Profile="(Default)">00:05:00</Value> 79 79 </Setting> 80 <Setting Name="MachineId" Type="System.Guid" Scope="User"> 81 <Value Profile="(Default)">00000000-0000-0000-0000-000000000000</Value> 82 </Setting> 80 83 </Settings> 81 84 </SettingsFile> -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Clients.Hive.Slave/3.3/app.config
r16386 r17409 84 84 <setting name="CheckpointCheckInterval" serializeAs="String"> 85 85 <value>00:05:00</value> 86 </setting> 87 <setting name="MachineId" serializeAs="String"> 88 <value>00000000-0000-0000-0000-000000000000</value> 86 89 </setting> 87 90 </HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings> -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.CodeEditor/3.4/CodeEditor.cs
r17246 r17409 282 282 public override void ScrollToPosition(int line, int column) { 283 283 var segment = GetSegmentAtLocation(line, column); 284 TextEditor.CaretOffset = segment.Offset + segment.Length;284 TextEditor.CaretOffset = segment.Offset; 285 285 TextEditor.ScrollToLine(line); 286 286 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Common/3.3/DoubleExtensions.cs
r17246 r17409 23 23 namespace HeuristicLab.Common { 24 24 public static class DoubleExtensions { 25 /// <summary> 26 /// Compares the similarity of value x and value y with a precision of 1.0E-12. 27 /// </summary> 28 /// <param name="x">First double value to be checked</param> 29 /// <param name="y">Second double value to compare with</param> 30 /// <returns>true if the difference is <= 1.0E-12</returns> 25 31 public static bool IsAlmost(this double x, double y) { 32 var epsilon = 1.0E-12; 33 return IsAlmost(x, y, epsilon); 34 } 35 36 /// <summary> 37 /// Compares the similarity of value x and value y with a given precision (epsilon). 38 /// </summary> 39 /// <param name="x">First double value to be checked</param> 40 /// <param name="y">Second double value to compare with</param> 41 /// <param name="epsilon">Error term to specify the precision</param> 42 /// <returns>true if the difference is <= epsilon</returns> 43 public static bool IsAlmost(this double x, double y, double epsilon) { 26 44 if (double.IsInfinity(x)) { 27 45 if (x > 0) return double.IsPositiveInfinity(y); 28 46 else return double.IsNegativeInfinity(y); 29 47 } else { 30 return Math.Abs(x - y) < 1.0E-12;48 return Math.Abs(x - y) < epsilon; 31 49 } 32 50 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Data
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Data merged: 17255
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Data/3.3
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Data/3.3 merged: 17255
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Data/3.3/Interfaces/ITextValue.cs
r17246 r17409 20 20 #endregion 21 21 22 using System; 23 using HeuristicLab.Common; 22 using HEAL.Attic; 24 23 25 24 namespace HeuristicLab.Data { 26 public interface ITextValue : IStringConvertibleValue {27 }25 [StorableType("6fe7970b-66de-4dcf-aa2b-c1aa9d7da29f")] 26 public interface ITextValue : IStringConvertibleValue { } 28 27 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding merged: 17344-17345,17347
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj
r16662 r17409 129 129 <Compile Include="ArchitectureManipulators\SubroutineDuplicater.cs" /> 130 130 <Compile Include="ArchitectureManipulators\SymbolicExpressionTreeArchitectureManipulator.cs" /> 131 <Compile Include="Creators\BalancedTreeCreator.cs" /> 131 132 <Compile Include="Grammars\GrammarUtils.cs" /> 132 133 <Compile Include="SymbolicExpressionTreeProblem.cs" /> -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis merged: 17301,17305,17348,17350
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Symbolic merged: 17344,17351,17402
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views merged: 17378,17380
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
r17246 r17409 38 38 } 39 39 40 protected override void SetEnabledStateOfControls() { 41 base.SetEnabledStateOfControls(); 42 43 var tree = Content?.Model?.SymbolicExpressionTree; 44 btnOptimizeConstants.Enabled = tree != null && SymbolicRegressionConstantOptimizationEvaluator.CanOptimizeConstants(tree); 45 } 46 40 47 protected override void UpdateModel(ISymbolicExpressionTree tree) { 41 48 var model = new SymbolicRegressionModel(Content.ProblemData.TargetVariable, tree, Content.Model.Interpreter, Content.Model.LowerEstimationLimit, Content.Model.UpperEstimationLimit); -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic.Views
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views merged: 17377-17378,17380
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r17246 r17409 168 168 private void Content_Changed(object sender, EventArgs e) { 169 169 UpdateView(); 170 SetEnabledStateOfControls(); 170 171 } 171 172 … … 313 314 private async void btnOptimizeConstants_Click(object sender, EventArgs e) { 314 315 progress.Start("Optimizing Constants ..."); 315 var tree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone(); 316 var newTree = await Task.Run(() => OptimizeConstants(tree, progress)); 317 await Task.Delay(500); // wait for progressbar to finish animation 318 UpdateModel(newTree); // UpdateModel calls Progress.Finish (via Content_Changed) 316 try { 317 var tree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone(); 318 var newTree = await Task.Run(() => OptimizeConstants(tree, progress)); 319 await Task.Delay(500); // wait for progressbar to finish animation 320 UpdateModel(newTree); 321 } finally { 322 progress.Finish(); 323 } 319 324 } 320 325 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r16988 r17409 150 150 <Compile Include="Converters\DerivativeCalculator.cs" /> 151 151 <Compile Include="Converters\TreeToAutoDiffTermConverter.cs" /> 152 <Compile Include="Creators\SymbolicDataAnalysisExpressionBalancedTreeCreator.cs" /> 152 153 <Compile Include="Crossovers\SymbolicDataAnalysisExpressionDiversityPreservingCrossover.cs" /> 153 154 <Compile Include="Formatters\InfixExpressionFormatter.cs" /> -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs
r17246 r17409 52 52 private static readonly MethodInfo Log = typeof(Math).GetMethod("Log", new[] { typeof(double) }); 53 53 private static readonly MethodInfo IsNaN = typeof(double).GetMethod("IsNaN"); 54 private static readonly MethodInfo IsAlmost = typeof(DoubleExtensions).GetMethod("IsAlmost" );54 private static readonly MethodInfo IsAlmost = typeof(DoubleExtensions).GetMethod("IsAlmost", new Type[] { typeof(double), typeof(double)}); 55 55 private static readonly MethodInfo Gamma = typeof(alglib).GetMethod("gammafunction", new[] { typeof(double) }); 56 56 private static readonly MethodInfo Psi = typeof(alglib).GetMethod("psi", new[] { typeof(double) }); -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs
r16892 r17409 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 2 23 using System.Collections.Generic; 3 24 using System.Linq; … … 181 202 182 203 [ThreadStatic] 183 private Dictionary<string, double[]> cachedData;204 private static Dictionary<string, double[]> cachedData; 184 205 185 206 [ThreadStatic] 186 private IDataset dataset;207 private static IDataset cachedDataset; 187 208 188 209 private void InitCache(IDataset dataset) { 189 this.dataset = dataset;210 cachedDataset = dataset; 190 211 cachedData = new Dictionary<string, double[]>(); 191 212 foreach (var v in dataset.DoubleVariables) { … … 196 217 public void InitializeState() { 197 218 cachedData = null; 198 dataset = null;219 cachedDataset = null; 199 220 EvaluatedSolutions = 0; 200 221 } 201 222 202 223 private double[] GetValues(ISymbolicExpressionTree tree, IDataset dataset, int[] rows) { 203 if (cachedData == null || this.dataset != dataset) {224 if (cachedData == null || cachedDataset != dataset) { 204 225 InitCache(dataset); 205 226 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeNativeInterpreter.cs
r17246 r17409 99 99 100 100 [ThreadStatic] 101 private IDataset dataset;101 private static IDataset cachedDataset; 102 102 103 103 private static readonly HashSet<byte> supportedOpCodes = new HashSet<byte>() { … … 127 127 if (!rows.Any()) return Enumerable.Empty<double>(); 128 128 129 if (cachedData == null || this.dataset != dataset) {129 if (cachedData == null || cachedDataset != dataset) { 130 130 InitCache(dataset); 131 131 } … … 152 152 153 153 private void InitCache(IDataset dataset) { 154 this.dataset = dataset;154 cachedDataset = dataset; 155 155 156 156 // free handles to old data … … 178 178 cachedData = null; 179 179 } 180 dataset = null;180 cachedDataset = null; 181 181 EvaluatedSolutions = 0; 182 182 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Views
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Views merged: 17276,17341
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.Designer.cs
r17246 r17409 192 192 this.Name = "ClassificationSolutionVariableImpactsView"; 193 193 this.Size = new System.Drawing.Size(712, 365); 194 this.VisibleChanged += new System.EventHandler(this.ClassificationSolutionVariableImpactsView_VisibleChanged);195 194 this.ResumeLayout(false); 196 195 this.PerformLayout(); -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.cs
r17246 r17409 40 40 private CancellationTokenSource cancellationToken = new CancellationTokenSource(); 41 41 private List<Tuple<string, double>> rawVariableImpacts = new List<Tuple<string, double>>(); 42 private bool attachedToProgress = false; 42 43 43 44 public new IClassificationSolution Content { … … 86 87 } 87 88 } 88 private void ClassificationSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) { 89 protected override void OnHidden(EventArgs e) { 90 base.OnHidden(e); 89 91 cancellationToken.Cancel(); 92 93 if (attachedToProgress) { 94 Progress.Hide(this); 95 attachedToProgress = false; 96 } 90 97 } 91 98 … … 126 133 variableImpactsArrayView.Caption = Content.Name + " Variable Impacts"; 127 134 progress = Progress.Show(this, "Calculating variable impacts for " + Content.Name); 135 attachedToProgress = true; 128 136 cancellationToken = new CancellationTokenSource(); 129 137 … … 144 152 UpdateOrdering(); 145 153 } finally { 146 Progress.Hide(this); 154 if (attachedToProgress) { 155 Progress.Hide(this); 156 attachedToProgress = false; 157 } 147 158 } 148 159 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualAnalysisView.cs
r17246 r17409 93 93 var dateTimeVars = ds.DateTimeVariables.Where(vn => ds.GetDateTimeValues(vn).Distinct().Skip(1).Any()).ToArray(); 94 94 95 // produce training and test values separately as they might overlap (e.g. for ensembles) 96 var predictedValuesTrain = Content.EstimatedTrainingValues.ToArray(); 97 int j = 0; // idx for predictedValues array 98 foreach (var i in problemData.TrainingIndices) { 95 var predictedValues = Content.EstimatedValues.ToArray(); 96 foreach (var i in problemData.AllIndices) { 99 97 var run = CreateRunForIdx(i, problemData, doubleVars, stringVars, dateTimeVars); 100 98 var targetValue = ds.GetDoubleValue(problemData.TargetVariable, i); 101 AddErrors(run, predictedValuesTrain[j++], targetValue); 102 run.Results.Add(PartitionLabel, new StringValue("Training")); 103 run.Color = Color.Gold; 99 AddErrors(run, predictedValues[i], targetValue); 100 101 if (problemData.IsTrainingSample(i) && problemData.IsTestSample(i)) { 102 run.Results.Add(PartitionLabel, new StringValue("Training + Test")); 103 run.Color = Color.Orange; 104 } else if (problemData.IsTrainingSample(i)) { 105 run.Results.Add(PartitionLabel, new StringValue("Training")); 106 run.Color = Color.Gold; 107 } else if (problemData.IsTestSample(i)) { 108 run.Results.Add(PartitionLabel, new StringValue("Test")); 109 run.Color = Color.Red; 110 } else { 111 run.Results.Add(PartitionLabel, new StringValue("Additional Data")); 112 run.Color = Color.Black; 113 } 104 114 runs.Add(run); 105 115 } 106 var predictedValuesTest = Content.EstimatedTestValues.ToArray(); 107 j = 0; 108 foreach (var i in problemData.TestIndices) { 109 var run = CreateRunForIdx(i, problemData, doubleVars, stringVars, dateTimeVars); 110 var targetValue = ds.GetDoubleValue(problemData.TargetVariable, i); 111 AddErrors(run, predictedValuesTest[j++], targetValue); 112 run.Results.Add(PartitionLabel, new StringValue("Test")); 113 run.Color = Color.Red; 114 runs.Add(run); 115 } 116 116 117 if (string.IsNullOrEmpty(selectedXAxis)) 117 118 selectedXAxis = "Index"; -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs
r17246 r17409 192 192 this.Name = "RegressionSolutionVariableImpactsView"; 193 193 this.Size = new System.Drawing.Size(712, 365); 194 this.VisibleChanged += new System.EventHandler(this.RegressionSolutionVariableImpactsView_VisibleChanged);195 194 this.ResumeLayout(false); 196 195 this.PerformLayout(); -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs
r17246 r17409 40 40 private CancellationTokenSource cancellationToken = new CancellationTokenSource(); 41 41 private List<Tuple<string, double>> rawVariableImpacts = new List<Tuple<string, double>>(); 42 private bool attachedToProgress = false; 42 43 43 44 public new IRegressionSolution Content { … … 86 87 } 87 88 } 88 private void RegressionSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) { 89 90 protected override void OnHidden(EventArgs e) { 91 base.OnHidden(e); 89 92 cancellationToken.Cancel(); 93 94 if (attachedToProgress) { 95 Progress.Hide(this); 96 attachedToProgress = false; 97 } 90 98 } 91 99 … … 124 132 variableImpactsArrayView.Caption = Content.Name + " Variable Impacts"; 125 133 var progress = Progress.Show(this, "Calculating variable impacts for " + Content.Name); 134 attachedToProgress = true; 126 135 cancellationToken = new CancellationTokenSource(); 127 136 … … 141 150 rawVariableImpacts.AddRange(impacts); 142 151 UpdateOrdering(); 143 } 144 finally { 145 Progress.Hide(this); 152 } finally { 153 if (attachedToProgress) { 154 Progress.Hide(this); 155 attachedToProgress = false; 156 } 146 157 } 147 158 } -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis/3.4
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis/3.4 merged: 17301,17305,17348,17350
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval.cs
r17246 r17409 37 37 protected Interval(StorableConstructorFlag _) { } 38 38 39 /// <summary> 40 /// Creates an interval with given bounds, where lower bound must be smaller than 41 /// the upper bound. Floating point precision errors trough calculations are fixed by, 42 /// checking if the intervals are almost the same (E-12). If this is the case, the bounds 43 /// will be set to the bound closer to zero. 44 /// </summary> 45 /// <param name="lowerBound">Lower bound of the interval</param> 46 /// <param name="upperBound">Upper bound of the interval</param> 39 47 public Interval(double lowerBound, double upperBound) { 48 if (lowerBound.IsAlmost(upperBound)) { 49 //If the bounds go over zero 50 if (lowerBound <= 0 && upperBound >= 0) { 51 lowerBound = 0.0; 52 upperBound = 0.0; 53 //Interval is negative 54 } else if (upperBound < 0) { 55 lowerBound = upperBound; 56 //Interval is positive 57 } else { 58 upperBound = lowerBound; 59 } 60 } 61 40 62 if (lowerBound > upperBound) 41 63 throw new ArgumentException("LowerBound must be smaller than UpperBound."); … … 58 80 double.IsNaN(LowerBound) || double.IsNaN(UpperBound); 59 81 } 82 } 83 84 /// <summary> 85 /// True if the interval is positive without zero 86 /// </summary> 87 public bool IsPositive { 88 get => LowerBound > 0.0; 89 } 90 91 /// <summary> 92 /// True if the interval is negative without zero 93 /// </summary> 94 public bool IsNegative { 95 get => UpperBound < 0.0; 60 96 } 61 97 … … 128 164 } 129 165 130 // mkommend:Division by intervals containing 0 is implemented as defined in166 //Division by intervals containing 0 is implemented as defined in 131 167 //http://en.wikipedia.org/wiki/Interval_arithmetic 132 168 public static Interval Divide(Interval a, Interval b) { … … 171 207 public static Interval Tangens(Interval a) { 172 208 return Interval.Divide(Interval.Sine(a), Interval.Cosine(a)); 173 } 209 } 174 210 public static Interval HyperbolicTangent(Interval a) { 175 211 return new Interval(Math.Tanh(a.LowerBound), Math.Tanh(a.UpperBound)); … … 226 262 227 263 public static Interval CubicRoot(Interval a) { 228 if (a.LowerBound < 0) return new Interval(double.NaN, double.NaN); 229 return new Interval(Math.Pow(a.LowerBound, 1.0 / 3), Math.Pow(a.UpperBound, 1.0 / 3)); 264 var lower = (a.LowerBound < 0) ? -Math.Pow(-a.LowerBound, 1d / 3d) : Math.Pow(a.LowerBound, 1d / 3d); 265 var upper = (a.UpperBound < 0) ? -Math.Pow(-a.UpperBound, 1d / 3d) : Math.Pow(a.UpperBound, 1d / 3d); 266 267 return new Interval(lower, upper); 268 } 269 270 public static Interval Absolute(Interval a) { 271 var absLower = Math.Abs(a.LowerBound); 272 var absUpper = Math.Abs(a.UpperBound); 273 var min = Math.Min(absLower, absUpper); 274 var max = Math.Max(absLower, absUpper); 275 276 if (a.Contains(0.0)) { 277 min = 0.0; 278 } 279 280 return new Interval(min, max); 281 } 282 283 public static Interval AnalyticalQuotient(Interval a, Interval b) { 284 var dividend = a; 285 var divisor = Add(Square(b), new Interval(1.0, 1.0)); 286 divisor = SquareRoot(divisor); 287 288 var quotient = Divide(dividend, divisor); 289 return quotient; 230 290 } 231 291 #endregion -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj
r16662 r17409 97 97 <Compile Include="CSharpScriptView.Designer.cs"> 98 98 <DependentUpon>CSharpScriptView.cs</DependentUpon> 99 </Compile> 100 <Compile Include="CompilerErrorDialog.cs"> 101 <SubType>Form</SubType> 102 </Compile> 103 <Compile Include="CompilerErrorDialog.Designer.cs"> 104 <DependentUpon>CompilerErrorDialog.cs</DependentUpon> 99 105 </Compile> 100 106 <Compile Include="ExecutableScriptView.cs"> -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
r17246 r17409 184 184 this.errorListView.UseCompatibleStateImageBehavior = false; 185 185 this.errorListView.View = System.Windows.Forms.View.Details; 186 this.errorListView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.errorListView_MouseClick); 186 187 this.errorListView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.errorListView_MouseDoubleClick); 187 188 // -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
r17246 r17409 209 209 } 210 210 211 private void errorListView_MouseClick(object sender, MouseEventArgs e) { 212 if (e.Button != MouseButtons.Left) return; 213 214 var item = errorListView.SelectedItems[0]; 215 var message = (CompilerError)item.Tag; 216 217 codeEditor.ScrollToPosition(message.Line, message.Column); 218 codeEditor.Focus(); 219 } 220 211 221 private void errorListView_MouseDoubleClick(object sender, MouseEventArgs e) { 212 if (e.Button == MouseButtons.Left) { 213 var item = errorListView.SelectedItems[0]; 214 var message = (CompilerError)item.Tag; 215 codeEditor.ScrollToPosition(message.Line, message.Column); 216 codeEditor.Focus(); 217 } 222 if (e.Button != MouseButtons.Left) return; 223 224 var item = errorListView.SelectedItems[0]; 225 var message = (CompilerError)item.Tag; 226 227 using (var dialog = new CompilerErrorDialog(message)) { 228 dialog.ShowDialog(this); 229 }; 218 230 } 219 231 #endregion -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Scripting/3.3/Script.cs
r17246 r17409 40 40 public abstract class Script : NamedItem, IProgrammableItem { 41 41 #region Fields & Properties 42 public static readonly HashSet<string> ExcludedAssemblyFileNames = new HashSet<string> { "IKVM.OpenJDK.ClassLibrary.dll" }; 42 43 public static new Image StaticItemImage { 43 44 get { return VSImageLibrary.Script; } … … 124 125 public virtual IEnumerable<Assembly> GetAssemblies() { 125 126 var assemblies = AppDomain.CurrentDomain.GetAssemblies() 126 .Where(a => !a.IsDynamic && File.Exists(a.Location)) 127 .Where(a => !a.IsDynamic && File.Exists(a.Location) 128 && !ExcludedAssemblyFileNames.Contains(Path.GetFileName(a.Location))) 127 129 .GroupBy(x => Regex.Replace(Path.GetFileName(x.Location), @"-[\d.]+\.dll$", "")) 128 130 .Select(x => x.OrderByDescending(y => y.GetName().Version).First()) -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Services.Hive
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Services.Hive merged: 17376
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Services.Hive/3.3/HiveService.cs
r17246 r17409 665 665 bool oldIsAllowedToCalculate = slave.IsAllowedToCalculate; 666 666 Guid? oldParentResourceId = slave.ParentResourceId; 667 bool? oldIsDisposable = slave.IsDisposable; 667 668 slaveInfo.CopyToEntity(slave); 668 669 slave.IsAllowedToCalculate = oldIsAllowedToCalculate; 669 670 slave.ParentResourceId = oldParentResourceId; 671 slave.IsDisposable = oldIsDisposable; 670 672 slave.LastHeartbeat = DateTime.Now; 671 673 slave.SlaveState = DA.SlaveState.Idle; -
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Tests merged: 17302,17306,17348,17350
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/IntervalTest.cs
r16662 r17409 14 14 [TestCategory("Problems.DataAnalysis")] 15 15 [TestProperty("Time", "short")] 16 public void TestIntervalAddOperation() {16 public void AddIntervalTest() { 17 17 //add [x1,x2] + [y1,y2] = [x1 + y1,x2 + y2] 18 18 … … 28 28 [TestCategory("Problems.DataAnalysis")] 29 29 [TestProperty("Time", "short")] 30 public void TestIntervalSubOperation() {30 public void SubtractIntervalTest() { 31 31 //subtract [x1,x2] − [y1,y2] = [x1 − y2,x2 − y1] 32 32 … … 42 42 [TestCategory("Problems.DataAnalysis")] 43 43 [TestProperty("Time", "short")] 44 public void TestIntervalMutlipyOperation() {44 public void MultiplyIntervalTest() { 45 45 //multiply [x1,x2] * [y1,y2] = [min(x1*y1,x1*y2,x2*y1,x2*y2),max(x1*y1,x1*y2,x2*y1,x2*y2)] 46 46 … … 59 59 [TestCategory("Problems.DataAnalysis")] 60 60 [TestProperty("Time", "short")] 61 public void TestIntervalDivideOperation() {61 public void DivideIntervalTest() { 62 62 //divide [x1, x2] / [y1, y2] = [x1, x2] * (1/[y1, y2]), where 1 / [y1,y2] = [1 / y2,1 / y1] if 0 not in [y_1, y_2]. 63 63 … … 80 80 [TestCategory("Problems.DataAnalysis")] 81 81 [TestProperty("Time", "short")] 82 public void TestIntervalSineOperator() {82 public void SineIntervalTest() { 83 83 //sine depends on interval 84 84 //sin([0, 2*pi]) = [-1, 1] … … 98 98 [TestCategory("Problems.DataAnalysis")] 99 99 [TestProperty("Time", "short")] 100 public void TestIntervalCosineOperator() {100 public void CosineIntervalTest() { 101 101 //Cosine uses sine Interval.Sine(Interval.Subtract(a, new Interval(Math.PI / 2, Math.PI / 2))); 102 102 Assert.AreEqual<Interval>(Interval.Cosine(new Interval(0, 2 * Math.PI)), new Interval(-1, 1)); … … 107 107 [TestCategory("Problems.DataAnalysis")] 108 108 [TestProperty("Time", "short")] 109 public void TestIntervalLogOperator() {109 public void LogIntervalTest() { 110 110 //Log([3, 5]) = [log(3), log(5)] 111 111 Assert.AreEqual<Interval>(new Interval(Math.Log(3), Math.Log(5)), Interval.Logarithm(new Interval(3, 5))); … … 122 122 [TestCategory("Problems.DataAnalysis")] 123 123 [TestProperty("Time", "short")] 124 public void TestIntervalExpOperator() {124 public void ExponentialIntervalTest() { 125 125 //Exp([0, 1]) = [exp(0), exp(1)] 126 126 Assert.AreEqual<Interval>(new Interval(1, Math.Exp(1)), Interval.Exponential(new Interval(0, 1))); … … 131 131 [TestCategory("Problems.DataAnalysis")] 132 132 [TestProperty("Time", "short")] 133 public void TestIntervalSqrOperator() {133 public void SquareIntervalTest() { 134 134 Assert.AreEqual<Interval>(new Interval(1, 4), Interval.Square(new Interval(1, 2))); 135 135 Assert.AreEqual<Interval>(new Interval(1, 4), Interval.Square(new Interval(-2, -1))); … … 140 140 [TestCategory("Problems.DataAnalysis")] 141 141 [TestProperty("Time", "short")] 142 public void TestIntervalSqrtOperator() {142 public void SquarerootIntervalTest() { 143 143 Assert.AreEqual<Interval>(new Interval(1, 2), Interval.SquareRoot(new Interval(1, 4))); 144 144 Assert.AreEqual<Interval>(new Interval(double.NaN, double.NaN), Interval.SquareRoot(new Interval(-4, -1))); … … 148 148 [TestCategory("Problems.DataAnalysis")] 149 149 [TestProperty("Time", "short")] 150 public void TestIntervalCubeOperator() {150 public void CubeIntervalTest() { 151 151 Assert.AreEqual<Interval>(new Interval(1, 8), Interval.Cube(new Interval(1, 2))); 152 152 Assert.AreEqual<Interval>(new Interval(-8, -1), Interval.Cube(new Interval(-2, -1))); … … 157 157 [TestCategory("Problems.DataAnalysis")] 158 158 [TestProperty("Time", "short")] 159 public void TestIntervalCbrtOperator() {159 public void CubeRootIntervalTest() { 160 160 Assert.AreEqual<Interval>(new Interval(1, 2), Interval.CubicRoot(new Interval(1, 8))); 161 Assert.AreEqual<Interval>(new Interval(double.NaN, double.NaN), Interval.CubicRoot(new Interval(-8, -1))); 161 Assert.AreEqual<Interval>(new Interval(-2, -2), Interval.CubicRoot(new Interval(-8, -8))); 162 Assert.AreEqual<Interval>(new Interval(-2, 2), Interval.CubicRoot(new Interval(-8, 8))); 163 Assert.AreEqual(new Interval(2, 2), Interval.CubicRoot(new Interval(8, 8))); 164 Assert.AreEqual(new Interval(-Math.Pow(6, 1.0 / 3), 2), Interval.CubicRoot(new Interval(-6, 8))); 165 Assert.AreEqual(new Interval(2, 2), Interval.CubicRoot(new Interval(8, 8))); 166 Assert.AreEqual(new Interval(-2, 0), Interval.CubicRoot(new Interval(-8, 0))); 167 } 168 169 [TestMethod] 170 [TestCategory("Problems.DataAnalysis")] 171 [TestProperty("Time", "short")] 172 public void AbsoluteIntervalTest() { 173 Assert.AreEqual(new Interval(2, 5), Interval.Absolute(new Interval(-5, -2))); 174 Assert.AreEqual(new Interval(2, 5), Interval.Absolute(new Interval(2, 5))); 175 Assert.AreEqual(new Interval(0, 3), Interval.Absolute(new Interval(-3, 0))); 176 Assert.AreEqual(new Interval(0, 5), Interval.Absolute(new Interval(0, 5))); 177 Assert.AreEqual(new Interval(0, 5), Interval.Absolute(new Interval(-2, 5))); 178 } 179 180 [TestMethod] 181 [TestCategory("Problems.DataAnalysis")] 182 [TestProperty("Time", "short")] 183 public void AnalyticalQuotientIntervalTest() { 184 //Analytical Quotient ==> a / sqrt(b^2 + 1) 185 var aPos = new Interval(3, 5); 186 var aZero = new Interval(-3, 5); 187 var aNeg = new Interval(-5, -3); 188 189 var bPos = new Interval(2, 4); 190 var bZero = new Interval(-2, 4); 191 var bNeg = new Interval(-4, -2); 192 193 //Second interval goes over zero 194 Assert.AreEqual(new Interval(aPos.LowerBound/Math.Sqrt(17), aPos.UpperBound), Interval.AnalyticalQuotient(aPos, bZero)); 195 Assert.AreEqual(new Interval(aZero.LowerBound, aZero.UpperBound), Interval.AnalyticalQuotient(aZero, bZero)); 196 Assert.AreEqual(new Interval(aNeg.LowerBound, aNeg.UpperBound/Math.Sqrt(17)), Interval.AnalyticalQuotient(aNeg, bZero)); 197 //Second interval is positive 198 Assert.AreEqual(new Interval(aPos.LowerBound/Math.Sqrt(17), aPos.UpperBound/Math.Sqrt(5)), Interval.AnalyticalQuotient(aPos, bPos)); 199 Assert.AreEqual(new Interval(aZero.LowerBound/Math.Sqrt(5), aZero.UpperBound/Math.Sqrt(5)), Interval.AnalyticalQuotient(aZero, bPos)); 200 Assert.AreEqual(new Interval(aNeg.LowerBound/Math.Sqrt(5), aNeg.UpperBound/Math.Sqrt(17)), Interval.AnalyticalQuotient(aNeg, bPos)); 201 //Second interval is negative 202 Assert.AreEqual(new Interval(aPos.LowerBound/Math.Sqrt(17), aPos.UpperBound/Math.Sqrt(5)), Interval.AnalyticalQuotient(aPos, bNeg)); 203 Assert.AreEqual(new Interval(aZero.LowerBound/Math.Sqrt(5), aZero.UpperBound/Math.Sqrt(5)), Interval.AnalyticalQuotient(aZero, bNeg)); 204 Assert.AreEqual(new Interval(aNeg.LowerBound/Math.Sqrt(5), aNeg.UpperBound/Math.Sqrt(17)), Interval.AnalyticalQuotient(aNeg, bNeg)); 205 } 206 207 [TestMethod] 208 [TestCategory("Problems.DataAnalysis")] 209 [TestProperty("Time", "short")] 210 public void IsNegativeIntervalTest() { 211 Assert.IsTrue(new Interval(-2, -1).IsNegative); 212 Assert.IsFalse(new Interval(-2, 0).IsNegative); 213 Assert.IsFalse(new Interval(-2, 2).IsNegative); 214 Assert.IsFalse(new Interval(2, 4).IsNegative); 215 } 216 217 [TestMethod] 218 [TestCategory("Problems.DataAnalysis")] 219 [TestProperty("Time", "short")] 220 public void IsPositiveIntervalTest() { 221 Assert.IsTrue(new Interval(3, 5).IsPositive); 222 Assert.IsFalse(new Interval(0, 5).IsPositive); 223 Assert.IsFalse(new Interval(-1, 5).IsPositive); 224 Assert.IsFalse(new Interval(-5, -2).IsPositive); 225 } 226 227 [TestMethod] 228 [TestCategory("Problems.DataAnalysis")] 229 [TestProperty("Time", "short")] 230 public void IsAlmostIntervalTest() { 231 var negativeLowerBound = -2E-13; 232 var negativeUpperBound = -1E-13; 233 var positiveLowerBound = 3E-13; 234 var positiveUpperBound = 5E-13; 235 236 var negativeInterval = new Interval(negativeLowerBound, negativeUpperBound); 237 var positiveInterval = new Interval(positiveLowerBound, positiveUpperBound); 238 var zeroInterval = new Interval(negativeUpperBound, positiveLowerBound); 239 240 //Check for right-shift of negative interval 241 Assert.AreEqual(negativeUpperBound, negativeInterval.LowerBound); 242 Assert.AreEqual(negativeUpperBound, negativeInterval.UpperBound); 243 //Check for left-shift of positive interval 244 Assert.AreEqual(positiveLowerBound, positiveInterval.LowerBound); 245 Assert.AreEqual(positiveLowerBound, positiveInterval.UpperBound); 246 //Check for setting interval to zero 247 Assert.AreEqual(0, zeroInterval.LowerBound); 248 Assert.AreEqual(0, zeroInterval.UpperBound); 249 162 250 } 163 251 }
Note: See TracChangeset
for help on using the changeset viewer.