From 23d9cd7ac791d1b06605df6626f69083cd101c39 Mon Sep 17 00:00:00 2001 From: miettinen Date: Wed, 3 Jul 2013 12:23:10 +0000 Subject: [PATCH] Added interface for different parameter value generators for sensitivity analysis. Implemented Halton sequence generator. (refs #4365) git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@27681 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 154821 -> 155166 bytes .../graph/Sysdyn.pgraph | 5 + .../org/simantics/sysdyn/SysdynResource.java | 15 +++ ...sitivityAnalysisExperimentNodeHandler.java | 5 +- .../SensitivityAnalysisExperimentTab.java | 82 ++++++++++++++- org.simantics.sysdyn/adapters.xml | 16 +++ .../generator/HaltonSequenceGenerator.java | 95 ++++++++++++++++++ .../sysdyn/adapter/generator/IGenerator.java | 34 +++++++ .../adapter/generator/RandomGenerator.java | 64 ++++++++++++ .../sysdyn/manager/RandomGenerator.java | 46 --------- .../SysdynSensitivityAnalysisExperiment.java | 28 ++++-- 11 files changed, 330 insertions(+), 60 deletions(-) create mode 100644 org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/HaltonSequenceGenerator.java create mode 100644 org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/IGenerator.java create mode 100644 org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/RandomGenerator.java delete mode 100644 org.simantics.sysdyn/src/org/simantics/sysdyn/manager/RandomGenerator.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index a01167bedf29b956211c931238a9e095601749ea..d242b0ba169f8a61dc30804ae3fcd5af735cfd3c 100644 GIT binary patch literal 155166 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

7nuapW(2RwLPdyj`Smq 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 SYSDYN.SensitivityAnalysisExperiment.parameterList --> L0.List -- SYSDYN.SensitivityAnalysisExperiment.randomSeed --> L0.Integer -- SYSDYN.SensitivityAnalysisExperiment.method --> SYSDYN.ValueGeneratorMethod -- SYSDYN.SensitivityAnalysisExperiment.resultRefreshRate --> L0.Integer -- SYSDYN.SensitivityAnalysisExperiment.numberOfValues --> L0.Integer > contentListener; @Override public void createControls(Composite body, IWorkbenchSite site, - final ISessionContext context, WidgetSupport support) { + final ISessionContext context, final WidgetSupport support) { support.register(this); Composite composite = new RemoveFocusBeforeExperimentComposite(body, SWT.NONE); @@ -129,7 +130,7 @@ public class SensitivityAnalysisExperimentTab extends LabelPropertyTabContributo // Label Composite labelComposite = new Composite(content, SWT.NONE); GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(labelComposite); - GridLayoutFactory.fillDefaults().numColumns(6).applyTo(labelComposite); + GridLayoutFactory.fillDefaults().numColumns(8).applyTo(labelComposite); Label label = new Label(labelComposite, SWT.NONE); label.setText("Name"); @@ -148,7 +149,80 @@ public class SensitivityAnalysisExperimentTab extends LabelPropertyTabContributo n.addModifyListener(new IntegerPropertyModifier(context, SysdynResource.URIs.SensitivityAnalysisExperiment_numberOfValues)); n.setInputValidator(new IntegerValidator()); n.setColorProvider(new SysdynBasicColorProvider(new LocalResourceManager(JFaceResources.getResources(), n.getWidget()))); - GridDataFactory.fillDefaults().hint(80, SWT.DEFAULT).applyTo(n.getWidget()); + GridDataFactory.fillDefaults().hint(50, SWT.DEFAULT).applyTo(n.getWidget()); + + label = new Label(labelComposite, SWT.NONE); + label.setText("Method"); + + TrackedCombo methodSelector = new TrackedCombo(labelComposite, support, SWT.DROP_DOWN); + methodSelector.setItemFactory(new ReadFactoryImpl>() { + + @Override + public Map perform(ReadGraph graph, Resource input) throws DatabaseException { + SysdynResource SR = SysdynResource.getInstance(graph); + Map items = new HashMap(); + + items.put("Halton", SR.HaltonSequenceGenerator); + items.put("Random", SR.RandomGenerator); + + return items; + } + + }); + methodSelector.setSelectionFactory(new ReadFactoryImpl() { + + @Override + public String perform(ReadGraph graph, Resource parameter) throws DatabaseException { + SysdynResource SR = SysdynResource.getInstance(graph); + Resource method = graph.getPossibleObject(parameter, SR.SensitivityAnalysisExperiment_method); + if(method == null) + return null; + + if(graph.isInstanceOf(method, SR.RandomGenerator)) + return "Random"; + else if(graph.isInstanceOf(method, SR.HaltonSequenceGenerator)) + return "Halton"; + else + return ""; + + } + }); + methodSelector.addModifyListener(new ComboModifyListenerImpl() { + + @Override + public void applyText(WriteGraph graph, Resource input, String text) + throws DatabaseException { + if(text == null || text.isEmpty()) + return; + + SysdynResource SR = SysdynResource.getInstance(graph); + + Resource type = SR.RandomGenerator; + + if("Halton".equals(text)) + type = SR.HaltonSequenceGenerator; + + graph.deny(input, SR.SensitivityAnalysisExperiment_method); + + GraphUtils.create2(graph, type, + SR.SensitivityAnalysisExperiment_method_Inverse, input); + + dirtyMethod = true; + } + }); + methodSelector.addModifyListener(new TextModifyListener() { + + @Override + public void modifyText(TrackedModifyEvent e) { + if(dirtyMethod) { + support.update(); + dirtyMethod = false; + propertyContainer.setContent(content); + Point size = content.computeSize(SWT.DEFAULT, SWT.DEFAULT); + propertyContainer.setMinSize(size); + } + } + }); label = new Label(labelComposite, SWT.NONE); label.setText("Seed"); @@ -158,7 +232,7 @@ public class SensitivityAnalysisExperimentTab extends LabelPropertyTabContributo seed.addModifyListener(new IntegerPropertyModifier(context, SysdynResource.URIs.SensitivityAnalysisExperiment_randomSeed)); seed.setInputValidator(new IntegerValidator()); seed.setColorProvider(new SysdynBasicColorProvider(new LocalResourceManager(JFaceResources.getResources(), seed.getWidget()))); - GridDataFactory.fillDefaults().hint(80, SWT.DEFAULT).applyTo(seed.getWidget()); + GridDataFactory.fillDefaults().hint(50, SWT.DEFAULT).applyTo(seed.getWidget()); // (Ontology-based) GraphExplorer displaying range axis and variables mapped to those axis explorer = new AxisAndVariablesExplorerComposite(ArrayMap.keys( diff --git a/org.simantics.sysdyn/adapters.xml b/org.simantics.sysdyn/adapters.xml index e370bc2c..509cd5ea 100644 --- a/org.simantics.sysdyn/adapters.xml +++ b/org.simantics.sysdyn/adapters.xml @@ -43,6 +43,22 @@ + + + + + + + + + + + primes; + + private void getPrimes() { + int newPrime = 2; + while (primes.size() < dimension) { + boolean isPrime = true; + for (int p : primes) { + if (newPrime % p == 0) { + ++newPrime; + isPrime = false; + break; + } + } + if (isPrime) { + primes.add(newPrime); + } + } + } + + public HaltonSequenceGenerator(ReadGraph graph, Resource method) { + + try { + SysdynResource SR = SysdynResource.getInstance(graph); + Resource experiment = graph.getPossibleObject(method, SR.SensitivityAnalysisExperiment_method_Inverse); + Resource parameterListResource = graph.getPossibleObject(experiment, SR.SensitivityAnalysisExperiment_parameterList); + dimension = ListUtils.getListNodes(graph, parameterListResource).size(); + + primes = new ArrayList(); + getPrimes(); + + initialize(); + } catch (DatabaseException e) { + + } + } + + public static double getHalton(int index, int base) { + ++index; // Map indexes to start from 1; + double result = 0; + double f = 1.0 / base; + while (index > 0) { + result = result + f * (index % base); + index = index / base; + f = f / base; + } + return result; + } + + public List next() { + ArrayList retval = new ArrayList(); + for (int i = 0; i < dimension; ++i) { + int base = primes.get(i); + double halton = getHalton(index, base); + retval.add(halton); + } + ++index; + return retval; + } + + public void initialize() { + index = 0; + } + +} diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/IGenerator.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/IGenerator.java new file mode 100644 index 00000000..59792648 --- /dev/null +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/IGenerator.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.adapter.generator; + +import java.util.List; + +/** + * Interface for parameter value generators. + * + * @author Tuomas Miettinen + * + */ +public interface IGenerator { + + /** + * Get the next parameter combination. + * @return list of generated parameter values + */ + public List next(); + + /** + * Initialize the generator. + */ + public void initialize(); +} diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/RandomGenerator.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/RandomGenerator.java new file mode 100644 index 00000000..e4a920fe --- /dev/null +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/generator/RandomGenerator.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.adapter.generator; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; + +/** + * Random generator that creates ArrayLists of random Doubles between 0 and 1. + * + * @author Tuomas Miettinen + */ + +public class RandomGenerator implements IGenerator { + + private int seed; + private int dimension; + private Random random; + + public RandomGenerator(ReadGraph graph, Resource method) { + + try { + SysdynResource SR = SysdynResource.getInstance(graph); + Resource experiment = graph.getPossibleObject(method, SR.SensitivityAnalysisExperiment_method_Inverse); + seed = graph.getPossibleRelatedValue(experiment, SR.SensitivityAnalysisExperiment_randomSeed, Bindings.INTEGER); + + Resource parameterListResource = graph.getPossibleObject(experiment, SR.SensitivityAnalysisExperiment_parameterList); + dimension = ListUtils.getListNodes(graph, parameterListResource).size(); + + initialize(); + } catch (DatabaseException e) { + + } + } + + public List next() { + ArrayList randoms = new ArrayList(); + for (int i = 0; i < dimension; ++i) + randoms.add(random.nextDouble()); + return randoms; + } + + public void initialize() { + random = new Random(this.seed); + } + +} diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/RandomGenerator.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/RandomGenerator.java deleted file mode 100644 index d58578b8..00000000 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/RandomGenerator.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.manager; - -import java.util.ArrayList; -import java.util.Random; - -/** - * Random generator that creates ArrayLists of random Doubles between 0 and 1. - * - * @author Tuomas Miettinen - */ - -public class RandomGenerator { - - private int seed; - private int dimension; - private Random random; - - public RandomGenerator(int seed, int dimension) { - this.dimension = dimension; - this.seed = seed; - random = new Random(this.seed); - } - - public ArrayList next() { - ArrayList randoms = new ArrayList(); - for (int i = 0; i < dimension; ++i) - randoms.add(random.nextDouble()); - return randoms; - } - - public void initialize() { - random = new Random(this.seed); - } - -} diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java index ea5f7990..c1b8ad50 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java @@ -23,10 +23,13 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ReadRequest; +import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.utils.ListUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.request.Read; +import org.simantics.layer0.utils.direct.GraphUtils; import org.simantics.modelica.IModelicaMonitor; import org.simantics.modelica.ModelicaKeys; import org.simantics.modelica.ModelicaManager; @@ -36,6 +39,7 @@ import org.simantics.modelica.data.MatSimulationResult; import org.simantics.modelica.data.SimulationResult; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.adapter.SensitivityExperimentParameter; +import org.simantics.sysdyn.adapter.generator.IGenerator; /** * Sensitivity analysis experiment @@ -45,8 +49,8 @@ import org.simantics.sysdyn.adapter.SensitivityExperimentParameter; public class SysdynSensitivityAnalysisExperiment extends SysdynExperiment { private ArrayList results = null; - private int seed = 124; private int numberOfRuns = 0; + private IGenerator valueGenerator = null; public SysdynSensitivityAnalysisExperiment(Resource experiment, Resource model) { super(experiment, model); @@ -56,15 +60,21 @@ public class SysdynSensitivityAnalysisExperiment extends SysdynExperiment { ArrayList> parameterMaps = new ArrayList>(); int parametersSize = parameters.size(); - // Get seed and number of runs + // Get method and number of runs try { - session.syncRequest(new ReadRequest() { + session.syncRequest(new WriteRequest() { @Override - public void run(ReadGraph graph) throws DatabaseException { + public void perform(WriteGraph graph) throws DatabaseException { SysdynResource SR = SysdynResource.getInstance(graph); - seed = graph.getPossibleRelatedValue(experiment, SR.SensitivityAnalysisExperiment_randomSeed, Bindings.INTEGER); numberOfRuns = graph.getPossibleRelatedValue(experiment, SR.SensitivityAnalysisExperiment_numberOfValues, Bindings.INTEGER); + Resource methodResource = graph.getPossibleObject(experiment, SR.SensitivityAnalysisExperiment_method); + if (methodResource == null) { + methodResource = GraphUtils.create2(graph, SR.RandomGenerator); + graph.claim(experiment, SR.SensitivityAnalysisExperiment_method, methodResource); + } + valueGenerator = graph.adapt(methodResource, IGenerator.class); } + }); } catch (DatabaseException e) { e.printStackTrace(); @@ -73,12 +83,12 @@ public class SysdynSensitivityAnalysisExperiment extends SysdynExperiment { // Refresh rate for charts refreshRate = numberOfRuns / 20 + 1; - // Generate values for parameters (randomly) - RandomGenerator randomGenerator = new RandomGenerator(seed, parametersSize); + // Initialize the random generator + valueGenerator.initialize(); - // Determine the changed paramters and their values for each individual run + // Determine the changed parameters and their values for each individual run for (int i = 0; i < numberOfRuns; ++i) { - ArrayList randoms = randomGenerator.next();// multi-dimensional random + List randoms = valueGenerator.next();// multi-dimensional random HashMap parameterMap = new HashMap(parametersSize); for (int j = 0; j < parametersSize; ++j) { SensitivityExperimentParameter p = parameters.get(j); -- 2.47.1