diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py index 33d1ded044bd45ee5351f8e0cfdea7ddc3639390..b1ee626645d0027f44d1a2392e02ef332890010a 100644 --- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py @@ -8,12 +8,15 @@ class DummyDakotaCommunicator(BaseMCOCommunicator): def receive_from_mco(self): data = sys.stdin.read() values = list(map(float, data.split())) + value_names = [p.name for p in self.model.parameters] + value_types = [p.value_type for p in self.model.parameters] + return DataSourceParameters( - value_types=["DUMMY"]*len(values), + value_names=value_names, + value_types=value_types, values=numpy.array(values) ) - def send_to_mco(self, kpi_results): data = " ".join( [" ".join(list(map(str, r.values.tolist()))) for r in kpi_results] diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py index 3c6abaaacbd3389e0e2ebfb69bb301ef97f47f26..97f39a897aded790eb39f402cedee555de5ee458 100644 --- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py @@ -14,17 +14,16 @@ def rotated_range(start, stop, starting_value): return list(d) -class DakotaOptimizer(BaseMultiCriteriaOptimizer): - +class DummyDakotaOptimizer(BaseMultiCriteriaOptimizer): def run(self): parameters = self.model.parameters values = [] for p in parameters: values.append( - rotated_range(p.lower_bound, - p.upper_bound, - p.initial_value) + rotated_range(int(p.lower_bound), + int(p.upper_bound), + int(p.initial_value)) ) value_iterator = itertools.product(*values) diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py index 5245c7c1cef9bf8aa5cd35f8d8e1b2c1fc596b0d..79e457a6a00efeb753a5bde80b87a7c978eccd58 100644 --- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py +++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py @@ -5,9 +5,12 @@ class DummyKPICalculator(BaseKPICalculator): id = bundle_id("enthought", "dummy_kpi_calculator") def run(self, data_source_results): - return KPICalculatorResult( + res = KPICalculatorResult( originator=self, value_names=data_source_results[0].value_names, value_types=data_source_results[0].value_types, values=data_source_results[0].values.reshape( data_source_results[0].values.shape[:-1])) + + print(res) + return res diff --git a/force_bdss/io/workflow_reader.py b/force_bdss/io/workflow_reader.py index adead5f8e13f6214622b20ece5169b02921660f5..89c806629e9cf574f97234451695f57d52c3a7cd 100644 --- a/force_bdss/io/workflow_reader.py +++ b/force_bdss/io/workflow_reader.py @@ -3,6 +3,7 @@ import logging from traits.api import HasStrictTraits, Instance +from ..workspecs.mco_parameters import RangedMCOParameter from ..workspecs.workflow import Workflow from ..bundle_registry_plugin import BundleRegistryPlugin @@ -115,8 +116,11 @@ class WorkflowReader(HasStrictTraits): mco_id = mco_data["id"] mco_bundle = registry.mco_bundle_by_id(mco_id) - return mco_bundle.create_model( + model = mco_bundle.create_model( wf_data["multi_criteria_optimizer"]["model_data"]) + model.parameters = self._extract_mco_parameters( + wf_data["multi_criteria_optimizer"]["parameters"]) + return model def _extract_data_sources(self, wf_data): """Extracts the data sources from the workflow dictionary data. @@ -166,3 +170,7 @@ class WorkflowReader(HasStrictTraits): kpic_bundle.create_model(kpic_entry["model_data"])) return kpi_calculators + + def _extract_mco_parameters(self, parameters_data): + return [RangedMCOParameter(**d) for d in parameters_data] + diff --git a/force_bdss/kpi/kpi_calculator_result.py b/force_bdss/kpi/kpi_calculator_result.py index 155332d1ddabc453afe604fdcb696af28a307f70..237b8740c6dc71452b0c2905f407d899399f88c4 100644 --- a/force_bdss/kpi/kpi_calculator_result.py +++ b/force_bdss/kpi/kpi_calculator_result.py @@ -10,3 +10,32 @@ class KPICalculatorResult(HasTraits): values = Array(shape=(None, )) accuracy = ArrayOrNone(shape=(None, )) quality = ArrayOrNone(shape=(None, )) + + def __str__(self): + return """ + DataSourceResults + + originator: + {} + + value_names: + {} + + value_types: + {} + + values: + {} + + Accuracy: + {} + + Quality: + {} + """.format( + self.originator, + self.value_names, + self.value_types, + self.values, + self.accuracy, + self.quality)