Optimizing Set Macro on 7.5

JEdwardJEdward RapidMiner Certified Analyst, RapidMiner Certified Expert, Member Posts: 578 Unicorn
edited December 2018 in Help

Is anyone else finding problems optimizing Set Macro in version 7.5 of RapidMiner?  

Was trying to optimize a python model & found that the value parametrer of Set Macro doesn't appear in Optimize Evolutionary.  

 

 

<?xml version="1.0" encoding="UTF-8"?><process version="7.5.001">
<context>
<input/>
<output/>
<macros/>
</context>
<operator activated="true" class="process" compatibility="7.5.001" expanded="true" name="Process">
<process expanded="true">
<operator activated="true" class="retrieve" compatibility="7.5.001" expanded="true" height="68" name="Retrieve Iris" width="90" x="45" y="34">
<parameter key="repository_entry" value="//Samples/data/Iris"/>
</operator>
<operator activated="true" class="optimize_parameters_evolutionary" compatibility="6.0.003" expanded="true" height="103" name="Optimize Parameters (Evolutionary)" width="90" x="313" y="34">
<list key="parameters">
<parameter key="nTree.value" value="[1.0;100.0]"/>
</list>
<process expanded="true">
<operator activated="true" class="subprocess" compatibility="7.5.001" expanded="true" height="82" name="Hyperparameters" width="90" x="112" y="34">
<process expanded="true">
<operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="nTree" width="90" x="45" y="34">
<parameter key="macro" value="nTree"/>
<parameter key="value" value="200"/>
</operator>
<operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minSizeSplit" width="90" x="246" y="34">
<parameter key="macro" value="minSizeSplit"/>
<parameter key="value" value="4"/>
</operator>
<operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minLeafSize" width="90" x="45" y="289">
<parameter key="macro" value="minLeafSize"/>
<parameter key="value" value="2"/>
</operator>
<operator activated="true" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="maxDepth" width="90" x="45" y="391">
<parameter key="macro" value="maxDepth"/>
<parameter key="value" value="20"/>
</operator>
<connect from_port="in 1" to_op="nTree" to_port="through 1"/>
<connect from_op="nTree" from_port="through 1" to_op="minSizeSplit" to_port="through 1"/>
<connect from_op="minSizeSplit" from_port="through 1" to_op="minLeafSize" to_port="through 1"/>
<connect from_op="minLeafSize" from_port="through 1" to_op="maxDepth" to_port="through 1"/>
<connect from_op="maxDepth" from_port="through 1" to_port="out 1"/>
<portSpacing port="source_in 1" spacing="0"/>
<portSpacing port="source_in 2" spacing="0"/>
<portSpacing port="sink_out 1" spacing="0"/>
<portSpacing port="sink_out 2" spacing="0"/>
</process>
</operator>
<operator activated="true" class="select_attributes" compatibility="7.5.001" expanded="true" height="82" name="Select Attributes" width="90" x="246" y="34">
<parameter key="attribute_filter_type" value="single"/>
<parameter key="attribute" value="id"/>
<parameter key="invert_selection" value="true"/>
<parameter key="include_special_attributes" value="true"/>
</operator>
<operator activated="true" class="concurrency:cross_validation" compatibility="7.5.001" expanded="true" height="145" name="Cross Validation 2" width="90" x="447" y="34">
<parameter key="use_local_random_seed" value="true"/>
<process expanded="true">
<operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="82" name="BDT (sklearn)" width="90" x="112" y="34">
<parameter key="script" value="&#10;import pandas as pd&#10;from sklearn.ensemble import GradientBoostingClassifier&#10;from sklearn.ensemble import RandomForestClassifier #use RandomForestRegressor for regression problem&#10;&#10;# This script creates a RandomForestClassifier from SKLearn on RM data&#10;# It can be used as a generic template for other sklearn classifiers or regressors&#10;&#10;def rm_main(data):&#10; metadata = data.rm_metadata&#10;&#10; # Get the list of regular attributes and the label&#10; df = pd.DataFrame(metadata).T&#10; label = df[df[1]==&quot;label&quot;].index.values&#10; regular = df[df[1] != df[1]].index.values&#10;&#10; # === RandomForest === #&#10; # Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset&#10; # Create Random Forest object&#10; model= RandomForestClassifier(n_estimators = %{nTree}&#10; , max_depth = %{maxDepth}&#10; , min_samples_split = %{minSizeSplit} # The minimum number of samples required to split an internal node&#10; , min_samples_leaf = %{minLeafSize} # The minimum number of samples required to be at a leaf node&#10; &#10; )&#10; # Train the model using the training sets and check score&#10; # model.fit(X, y)&#10; model.fit(data[regular], data[label])&#10; # Predict Output&#10; # predicted = model.predict(x_test)&#10; return (model,regular,label[0]), data"/>
</operator>
<connect from_port="training set" to_op="BDT (sklearn)" to_port="input 1"/>
<connect from_op="BDT (sklearn)" from_port="output 1" to_port="model"/>
<portSpacing port="source_training set" spacing="0"/>
<portSpacing port="sink_model" spacing="0"/>
<portSpacing port="sink_through 1" spacing="0"/>
</process>
<process expanded="true">
<operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="103" name="Apply Model (2)" width="90" x="112" y="34">
<parameter key="script" value="import pandas as pd&#10;&#10;# rm_main is a mandatory function,&#10;# the number of arguments has to be the number of input ports (can be none)&#10;&#10;def rm_main(rfinfo, data):&#10; rf = rfinfo[0]&#10; regular = rfinfo[1]&#10; label = rfinfo[2]&#10; meta = data.rm_metadata&#10; predictions = rf.predict(data[regular])&#10; confidences = rf.predict_proba(data[regular])&#10;&#10;&#10; predictions = pd.DataFrame(predictions, columns=[&quot;prediction(&quot;+label+&quot;)&quot;])&#10; confidences = pd.DataFrame(confidences,&#10; columns=[&quot;confidence(&quot; + str(c) + &quot;)&quot; for c in rf.classes_])&#10;&#10; data = data.join(predictions)&#10; data = data.join(confidences)&#10; data.rm_metadata = meta&#10; data.rm_metadata[&quot;prediction(&quot;+label+&quot;)&quot;] = (&quot;nominal&quot;,&quot;prediction&quot;)&#10;&#10; for c in rf.classes_:&#10; data.rm_metadata[&quot;confidence(&quot;+str(c)+&quot;)&quot;] = (&quot;numerical&quot;,&quot;confidence_&quot;+str(c))&#10;&#10; return data, rf"/>
</operator>
<operator activated="true" class="performance_classification" compatibility="7.5.001" expanded="true" height="82" name="Python" width="90" x="246" y="34">
<list key="class_weights"/>
</operator>
<connect from_port="model" to_op="Apply Model (2)" to_port="input 1"/>
<connect from_port="test set" to_op="Apply Model (2)" to_port="input 2"/>
<connect from_op="Apply Model (2)" from_port="output 1" to_op="Python" to_port="labelled data"/>
<connect from_op="Python" from_port="performance" to_port="performance 1"/>
<portSpacing port="source_model" spacing="0"/>
<portSpacing port="source_test set" spacing="0"/>
<portSpacing port="source_through 1" spacing="0"/>
<portSpacing port="sink_test set results" spacing="0"/>
<portSpacing port="sink_performance 1" spacing="0"/>
<portSpacing port="sink_performance 2" spacing="0"/>
</process>
<description align="center" color="transparent" colored="false" width="126">Python</description>
</operator>
<operator activated="true" class="log" compatibility="7.5.001" expanded="true" height="82" name="Log" width="90" x="715" y="30">
<list key="log">
<parameter key="Count" value="operator.Apply Model (2).value.applycount"/>
<parameter key=" Testing Error" value="operator.Cross Validation 2.value.performance 1"/>
<parameter key="Training StdDev" value="operator.Cross Validation 2.value.std deviation 1"/>
<parameter key="nTree" value="operator.nTree.parameter.value"/>
<parameter key="maxDepth" value="operator.maxDepth.parameter.value"/>
<parameter key="minLeafSize" value="operator.minLeafSize.parameter.value"/>
<parameter key="minSizeSplit" value="operator.minSizeSplit.parameter.value"/>
</list>
</operator>
<connect from_port="input 1" to_op="Hyperparameters" to_port="in 1"/>
<connect from_op="Hyperparameters" from_port="out 1" to_op="Select Attributes" to_port="example set input"/>
<connect from_op="Select Attributes" from_port="example set output" to_op="Cross Validation 2" to_port="example set"/>
<connect from_op="Cross Validation 2" from_port="performance 1" to_op="Log" to_port="through 1"/>
<connect from_op="Log" from_port="through 1" to_port="performance"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="source_input 2" spacing="0"/>
<portSpacing port="sink_performance" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
</process>
</operator>
<connect from_op="Retrieve Iris" from_port="output" to_op="Optimize Parameters (Evolutionary)" to_port="input 1"/>
<connect from_op="Optimize Parameters (Evolutionary)" from_port="performance" to_port="result 1"/>
<connect from_op="Optimize Parameters (Evolutionary)" from_port="parameter" to_port="result 2"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
<portSpacing port="sink_result 2" spacing="0"/>
<portSpacing port="sink_result 3" spacing="0"/>
</process>
</operator>
</process>
Tagged:

Answers

  • Thomas_OttThomas_Ott RapidMiner Certified Analyst, RapidMiner Certified Expert, Member Posts: 1,761 Unicorn

    I think this isn't a bug because the Evolutionary optimzer uses the genetic parameters to 'randomly' assign values, so you can't take a Grid approach this. Did you try this in a regular Grid optmizer?

  • JEdwardJEdward RapidMiner Certified Analyst, RapidMiner Certified Expert, Member Posts: 578 Unicorn

    If not a bug then it's a missing feature. I've managed to create a workaround which works, but is clearly not the most efficient. Let's move this thread into feature requests. 

     

    Edit: realise my process didn't display properly.  

     

    As you can see, the workaround uses RM modelling operators to represent the values that I want to change in the Python code.  So the feature I'd like is an operator which Optimize Parameters Evolutionary can access allowing values to be set and used by macros.  

     

    <?xml version="1.0" encoding="UTF-8"?><process version="7.5.001">
    <context>
    <input/>
    <output/>
    <macros/>
    </context>
    <operator activated="true" class="process" compatibility="7.5.001" expanded="true" name="Process">
    <process expanded="true">
    <operator activated="true" class="retrieve" compatibility="7.5.001" expanded="true" height="68" name="Retrieve Iris" width="90" x="45" y="34">
    <parameter key="repository_entry" value="//Samples/data/Iris"/>
    </operator>
    <operator activated="true" class="optimize_parameters_evolutionary" compatibility="6.0.003" expanded="true" height="124" name="Optimize Parameters (Evolutionary)" width="90" x="313" y="34">
    <list key="parameters">
    <parameter key="parameterSet1.number_of_trees" value="[1.0;100.0]"/>
    <parameter key="parameterSet1.maximal_depth" value="[-1.0;100.0]"/>
    <parameter key="parameterSet1.minimal_leaf_size" value="[1.0;100.0]"/>
    <parameter key="parameterSet1.minimal_size_for_split" value="[1.0;100.0]"/>
    </list>
    <parameter key="use_early_stopping" value="true"/>
    <parameter key="population_size" value="3"/>
    <process expanded="true">
    <operator activated="true" class="subprocess" compatibility="7.5.001" expanded="true" height="103" name="Hyperparameters" width="90" x="45" y="34">
    <process expanded="true">
    <operator activated="true" class="generate_data" compatibility="7.5.001" expanded="true" height="68" name="Generate Data" width="90" x="45" y="34">
    <parameter key="target_function" value="random classification"/>
    </operator>
    <operator activated="true" class="concurrency:parallel_random_forest" compatibility="7.5.001" expanded="true" height="82" name="parameterSet1" width="90" x="179" y="136">
    <parameter key="number_of_trees" value="57"/>
    <parameter key="maximal_depth" value="94"/>
    <parameter key="minimal_leaf_size" value="7"/>
    <parameter key="minimal_size_for_split" value="70"/>
    </operator>
    <operator activated="true" class="operator_toolbox:get_parameters" compatibility="0.3.000" expanded="true" height="103" name="Get Parameters" width="90" x="313" y="85">
    <parameter key="Operator name" value="parameterSet1"/>
    </operator>
    <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="nTree" width="90" x="447" y="493">
    <parameter key="macro" value="nTree"/>
    <parameter key="value" value="200"/>
    </operator>
    <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minSizeSplit" width="90" x="581" y="493">
    <parameter key="macro" value="minSizeSplit"/>
    <parameter key="value" value="4"/>
    </operator>
    <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="82" name="minLeafSize" width="90" x="715" y="493">
    <parameter key="macro" value="minLeafSize"/>
    <parameter key="value" value="2"/>
    </operator>
    <operator activated="false" class="set_macro" compatibility="7.5.001" expanded="true" height="103" name="maxDepth" width="90" x="849" y="493">
    <parameter key="macro" value="maxDepth"/>
    <parameter key="value" value="20"/>
    </operator>
    <operator activated="true" class="converters:parameter_set_2_example_set" compatibility="0.3.000" expanded="true" height="103" name="Parameter Set to ExampleSet" width="90" x="447" y="85"/>
    <operator activated="true" class="extract_macro" compatibility="7.5.001" expanded="true" height="68" name="Extract Macro" width="90" x="648" y="85">
    <parameter key="macro" value="nTree"/>
    <parameter key="macro_type" value="data_value"/>
    <parameter key="attribute_name" value="parameterSet1.number_of_trees"/>
    <parameter key="example_index" value="1"/>
    <list key="additional_macros">
    <parameter key="minSizeSplit" value="parameterSet1.minimal_size_for_split"/>
    <parameter key="minLeafSize" value="parameterSet1.minimal_leaf_size"/>
    <parameter key="maxDepth" value="parameterSet1.maximal_depth"/>
    </list>
    <description align="center" color="transparent" colored="false" width="126">Extracts the parameters to macro values</description>
    </operator>
    <connect from_port="in 1" to_port="out 1"/>
    <connect from_op="Generate Data" from_port="output" to_op="parameterSet1" to_port="training set"/>
    <connect from_op="parameterSet1" from_port="model" to_op="Get Parameters" to_port="through 1"/>
    <connect from_op="Get Parameters" from_port="parameters" to_op="Parameter Set to ExampleSet" to_port="parameters"/>
    <connect from_op="nTree" from_port="through 1" to_op="minSizeSplit" to_port="through 1"/>
    <connect from_op="minSizeSplit" from_port="through 1" to_op="minLeafSize" to_port="through 1"/>
    <connect from_op="minLeafSize" from_port="through 1" to_op="maxDepth" to_port="through 1"/>
    <connect from_op="maxDepth" from_port="through 1" to_op="maxDepth" to_port="through 2"/>
    <connect from_op="Parameter Set to ExampleSet" from_port="exampleSet" to_op="Extract Macro" to_port="example set"/>
    <connect from_op="Extract Macro" from_port="example set" to_port="out 2"/>
    <portSpacing port="source_in 1" spacing="0"/>
    <portSpacing port="source_in 2" spacing="0"/>
    <portSpacing port="sink_out 1" spacing="0"/>
    <portSpacing port="sink_out 2" spacing="0"/>
    <portSpacing port="sink_out 3" spacing="0"/>
    </process>
    </operator>
    <operator activated="true" class="select_attributes" compatibility="7.5.001" expanded="true" height="82" name="Select Attributes" width="90" x="246" y="34">
    <parameter key="attribute_filter_type" value="single"/>
    <parameter key="attribute" value="id"/>
    <parameter key="invert_selection" value="true"/>
    <parameter key="include_special_attributes" value="true"/>
    </operator>
    <operator activated="true" class="concurrency:cross_validation" compatibility="7.5.001" expanded="true" height="145" name="Cross Validation 2" width="90" x="447" y="34">
    <parameter key="use_local_random_seed" value="true"/>
    <process expanded="true">
    <operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="82" name="Random Forest" width="90" x="112" y="34">
    <parameter key="script" value="&#10;import pandas as pd&#10;from sklearn.ensemble import GradientBoostingClassifier&#10;from sklearn.ensemble import RandomForestClassifier #use RandomForestRegressor for regression problem&#10;&#10;# This script creates a RandomForestClassifier from SKLearn on RM data&#10;# It can be used as a generic template for other sklearn classifiers or regressors&#10;&#10;def rm_main(data):&#10; metadata = data.rm_metadata&#10;&#10; # Get the list of regular attributes and the label&#10; df = pd.DataFrame(metadata).T&#10; label = df[df[1]==&quot;label&quot;].index.values&#10; regular = df[df[1] != df[1]].index.values&#10;&#10; # === RandomForest === #&#10; # Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset&#10; # Create Random Forest object&#10; model= RandomForestClassifier(n_estimators = %{nTree}&#10; , max_depth = %{maxDepth}&#10; , min_samples_split = %{minSizeSplit} # The minimum number of samples required to split an internal node&#10; , min_samples_leaf = %{minLeafSize} # The minimum number of samples required to be at a leaf node&#10; , random_state = 1992&#10; )&#10; # Train the model using the training sets and check score&#10; # model.fit(X, y)&#10; model.fit(data[regular], data[label])&#10; # Predict Output&#10; # predicted = model.predict(x_test)&#10; return (model,regular,label[0]), data"/>
    </operator>
    <connect from_port="training set" to_op="Random Forest" to_port="input 1"/>
    <connect from_op="Random Forest" from_port="output 1" to_port="model"/>
    <portSpacing port="source_training set" spacing="0"/>
    <portSpacing port="sink_model" spacing="0"/>
    <portSpacing port="sink_through 1" spacing="0"/>
    </process>
    <process expanded="true">
    <operator activated="true" class="python_scripting:execute_python" compatibility="7.4.000" expanded="true" height="103" name="Apply Model (2)" width="90" x="112" y="34">
    <parameter key="script" value="import pandas as pd&#10;&#10;# rm_main is a mandatory function,&#10;# the number of arguments has to be the number of input ports (can be none)&#10;&#10;def rm_main(rfinfo, data):&#10; rf = rfinfo[0]&#10; regular = rfinfo[1]&#10; label = rfinfo[2]&#10; meta = data.rm_metadata&#10; predictions = rf.predict(data[regular])&#10; confidences = rf.predict_proba(data[regular])&#10;&#10;&#10; predictions = pd.DataFrame(predictions, columns=[&quot;prediction(&quot;+label+&quot;)&quot;])&#10; confidences = pd.DataFrame(confidences,&#10; columns=[&quot;confidence(&quot; + str(c) + &quot;)&quot; for c in rf.classes_])&#10;&#10; data = data.join(predictions)&#10; data = data.join(confidences)&#10; data.rm_metadata = meta&#10; data.rm_metadata[&quot;prediction(&quot;+label+&quot;)&quot;] = (&quot;nominal&quot;,&quot;prediction&quot;)&#10;&#10; for c in rf.classes_:&#10; data.rm_metadata[&quot;confidence(&quot;+str(c)+&quot;)&quot;] = (&quot;numerical&quot;,&quot;confidence_&quot;+str(c))&#10;&#10; return data, rf"/>
    </operator>
    <operator activated="true" class="performance_classification" compatibility="7.5.001" expanded="true" height="82" name="Python" width="90" x="246" y="34">
    <list key="class_weights"/>
    </operator>
    <connect from_port="model" to_op="Apply Model (2)" to_port="input 1"/>
    <connect from_port="test set" to_op="Apply Model (2)" to_port="input 2"/>
    <connect from_op="Apply Model (2)" from_port="output 1" to_op="Python" to_port="labelled data"/>
    <connect from_op="Python" from_port="performance" to_port="performance 1"/>
    <portSpacing port="source_model" spacing="0"/>
    <portSpacing port="source_test set" spacing="0"/>
    <portSpacing port="source_through 1" spacing="0"/>
    <portSpacing port="sink_test set results" spacing="0"/>
    <portSpacing port="sink_performance 1" spacing="0"/>
    <portSpacing port="sink_performance 2" spacing="0"/>
    </process>
    <description align="center" color="transparent" colored="false" width="126">Python</description>
    </operator>
    <operator activated="true" class="subprocess" compatibility="7.5.001" expanded="true" height="82" name="Extract Performance Log" width="90" x="648" y="187">
    <process expanded="true">
    <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="LognTree" width="90" x="45" y="34">
    <parameter key="macro_name" value="nTree"/>
    </operator>
    <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="Log maxDepth" width="90" x="179" y="34">
    <parameter key="macro_name" value="maxDepth"/>
    </operator>
    <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="Log minLeafSize" width="90" x="313" y="34">
    <parameter key="macro_name" value="minLeafSize"/>
    </operator>
    <operator activated="true" class="provide_macro_as_log_value" compatibility="7.5.001" expanded="true" height="82" name="Log minSizeSplit" width="90" x="447" y="34">
    <parameter key="macro_name" value="minSizeSplit"/>
    </operator>
    <operator activated="true" class="log" compatibility="7.5.001" expanded="true" height="82" name="Log" width="90" x="581" y="34">
    <list key="log">
    <parameter key="Count" value="operator.Apply Model (2).value.applycount"/>
    <parameter key=" Testing Error" value="operator.Cross Validation 2.value.performance 1"/>
    <parameter key="Training StdDev" value="operator.Cross Validation 2.value.std deviation 1"/>
    <parameter key="maxDepth" value="operator.Log maxDepth.value.macro_value"/>
    <parameter key="minLeafSize" value="operator.Log minLeafSize.value.macro_value"/>
    <parameter key="minSizeSplit" value="operator.Log minSizeSplit.value.macro_value"/>
    <parameter key="Number of Trees" value="operator.LognTree.value.macro_value"/>
    </list>
    </operator>
    <connect from_port="in 1" to_op="LognTree" to_port="through 1"/>
    <connect from_op="LognTree" from_port="through 1" to_op="Log maxDepth" to_port="through 1"/>
    <connect from_op="Log maxDepth" from_port="through 1" to_op="Log minLeafSize" to_port="through 1"/>
    <connect from_op="Log minLeafSize" from_port="through 1" to_op="Log minSizeSplit" to_port="through 1"/>
    <connect from_op="Log minSizeSplit" from_port="through 1" to_op="Log" to_port="through 1"/>
    <connect from_op="Log" from_port="through 1" to_port="out 1"/>
    <portSpacing port="source_in 1" spacing="0"/>
    <portSpacing port="source_in 2" spacing="0"/>
    <portSpacing port="sink_out 1" spacing="0"/>
    <portSpacing port="sink_out 2" spacing="0"/>
    </process>
    </operator>
    <connect from_port="input 1" to_op="Hyperparameters" to_port="in 1"/>
    <connect from_op="Hyperparameters" from_port="out 1" to_op="Select Attributes" to_port="example set input"/>
    <connect from_op="Select Attributes" from_port="example set output" to_op="Cross Validation 2" to_port="example set"/>
    <connect from_op="Cross Validation 2" from_port="model" to_port="result 1"/>
    <connect from_op="Cross Validation 2" from_port="performance 1" to_op="Extract Performance Log" to_port="in 1"/>
    <connect from_op="Extract Performance Log" from_port="out 1" to_port="performance"/>
    <portSpacing port="source_input 1" spacing="0"/>
    <portSpacing port="source_input 2" spacing="0"/>
    <portSpacing port="sink_performance" spacing="0"/>
    <portSpacing port="sink_result 1" spacing="0"/>
    <portSpacing port="sink_result 2" spacing="0"/>
    </process>
    </operator>
    <connect from_op="Retrieve Iris" from_port="output" to_op="Optimize Parameters (Evolutionary)" to_port="input 1"/>
    <connect from_op="Optimize Parameters (Evolutionary)" from_port="performance" to_port="result 1"/>
    <connect from_op="Optimize Parameters (Evolutionary)" from_port="parameter" to_port="result 2"/>
    <portSpacing port="source_input 1" spacing="0"/>
    <portSpacing port="sink_result 1" spacing="0"/>
    <portSpacing port="sink_result 2" spacing="0"/>
    <portSpacing port="sink_result 3" spacing="0"/>
    </process>
    </operator>
    </process>

     

Sign In or Register to comment.