Changeset 11028
- Timestamp:
- 06/20/14 15:39:24 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.ExternalEvaluation Scientific/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/MatlabParameterVectorEvaluator.cs
r10594 r11028 35 35 private const string QualityVariableParameterName = "QualityVariableName"; 36 36 private const string MatlabEvaluationScriptParameterName = "MATLABEvaluationScript"; 37 private const string InitializationScriptParameterName = "InitializationScript";37 private const string MatlabInitializationScriptParameterName = "MATLABInitializationScript"; 38 38 39 39 #region parameters … … 44 44 get { return (ILookupParameter<TextFileValue>)Parameters[MatlabEvaluationScriptParameterName]; } 45 45 } 46 public I FixedValueParameter<TextFileValue>InitializationScriptParameter {47 get { return (I FixedValueParameter<TextFileValue>)Parameters[InitializationScriptParameterName]; }46 public ILookupParameter<TextFileValue> MatlabInitializationScriptParameter { 47 get { return (ILookupParameter<TextFileValue>)Parameters[MatlabInitializationScriptParameterName]; } 48 48 } 49 49 #endregion 50 51 public TextFileValue InitializationScript {52 get { return InitializationScriptParameter.Value; }53 }54 50 55 51 [StorableConstructor] … … 66 62 Parameters.Add(new LookupParameter<StringValue>(QualityVariableParameterName, "The name of the quality variable calculated in the MATLAB script.")); 67 63 Parameters.Add(new LookupParameter<TextFileValue>(MatlabEvaluationScriptParameterName, "The path to the MATLAB evaluation script.")); 68 Parameters.Add(new FixedValueParameter<TextFileValue>(InitializationScriptParameterName, "The path to a MATLAB script the should be execute before the evaluation starts.", new TextFileValue()));64 Parameters.Add(new LookupParameter<TextFileValue>(MatlabInitializationScriptParameterName, "The path to a MATLAB script the should be execute before the evaluation starts.")); 69 65 } 70 66 71 private MLApp.MLApp matLabConnector;72 public override void InitializeState() {73 base.InitializeState();74 changedDirectory = false;75 76 if (matLabConnector == null) {77 Type matlabtype = Type.GetTypeFromProgID("matlab.application.single");78 matLabConnector = (MLApp.MLApp)Activator.CreateInstance(matlabtype);79 matLabConnector.Visible = 0;80 }81 82 if (string.IsNullOrEmpty(InitializationScript.Value)) return;83 if (!InitializationScript.Exists()) throw new FileNotFoundException(string.Format("The initialization script \"{0}\" cannot be found.", InitializationScript.Value));84 85 string initScript = InitializationScript.Value;86 var directoryName = Path.GetDirectoryName(initScript);87 string result = matLabConnector.Execute(string.Format("cd '{0}'", directoryName));88 if (!string.IsNullOrEmpty(result)) throw new InvalidOperationException(result);89 90 result = matLabConnector.Execute(Path.GetFileNameWithoutExtension(initScript));91 if (!string.IsNullOrEmpty(result)) throw new InvalidOperationException(result);92 }93 67 94 68 public override void ClearState() { 95 69 matLabConnector.Execute("clear"); 96 70 changedDirectory = false; 71 executedInitializationScript = false; 97 72 base.ClearState(); 98 73 } 99 74 75 private MLApp.MLApp matLabConnector; 100 76 private bool changedDirectory = false; 77 private bool executedInitializationScript = false; 101 78 private readonly object locker = new object(); 79 102 80 public override IOperation Apply() { 103 var evaluationScript = MatlabEvaluationScriptParameter.ActualValue; 104 if (string.IsNullOrEmpty(evaluationScript.Value)) throw new FileNotFoundException("The evaluation script in the problem is not set."); 105 if (!evaluationScript.Exists()) throw new FileNotFoundException(string.Format("The evaluation script \"{0}\" cannot be found.", evaluationScript.Value)); 81 lock (locker) { 106 82 107 lock (locker) { 108 if (matLabConnector == null) InitializeState(); 83 if (matLabConnector == null) { 84 Type matlabtype = Type.GetTypeFromProgID("matlab.application.single"); 85 matLabConnector = (MLApp.MLApp)Activator.CreateInstance(matlabtype); 86 matLabConnector.Visible = 0; 87 } 88 string result; 109 89 110 string result; 111 string script = evaluationScript.Value; 90 var initializationScript = MatlabInitializationScriptParameter.ActualValue; 91 if (!string.IsNullOrEmpty(initializationScript.Value) && !initializationScript.Exists()) 92 throw new FileNotFoundException(string.Format("The initialization script \"{0}\" cannot be found.", initializationScript.Value)); 93 94 var evaluationScript = MatlabEvaluationScriptParameter.ActualValue; 95 if (string.IsNullOrEmpty(evaluationScript.Value)) 96 throw new FileNotFoundException("The evaluation script in the problem is not set."); 97 if (!evaluationScript.Exists()) 98 throw new FileNotFoundException(string.Format("The evaluation script \"{0}\" cannot be found.", evaluationScript.Value)); 99 100 if (!string.IsNullOrEmpty(initializationScript.Value) && !executedInitializationScript) { 101 var directoryName = Path.GetDirectoryName(initializationScript.Value); 102 result = matLabConnector.Execute(string.Format("cd '{0}'", directoryName)); 103 if (!string.IsNullOrEmpty(result)) throw new InvalidOperationException(result); 104 105 result = matLabConnector.Execute(Path.GetFileNameWithoutExtension(initializationScript.Value)); 106 if (!string.IsNullOrEmpty(result)) throw new InvalidOperationException(result); 107 108 executedInitializationScript = true; 109 } 112 110 113 111 if (!changedDirectory) { 114 var directoryName = Path.GetDirectoryName( script);112 var directoryName = Path.GetDirectoryName(evaluationScript.Value); 115 113 result = matLabConnector.Execute(string.Format("cd '{0}'", directoryName)); 116 114 if (!string.IsNullOrEmpty(result)) throw new InvalidOperationException(result); … … 125 123 } 126 124 127 result = matLabConnector.Execute(Path.GetFileNameWithoutExtension( script));125 result = matLabConnector.Execute(Path.GetFileNameWithoutExtension(evaluationScript.Value)); 128 126 if (!string.IsNullOrEmpty(result)) throw new InvalidOperationException(result); 129 127
Note: See TracChangeset
for help on using the changeset viewer.