예제 #1
0
    def computeMetric(self, ph, scenario_tree, instances):

        normalized_term_diff = 0.0

        for stage, tree_node, variable_id, variable_values, is_fixed, is_stale \
            in scenario_tree_node_variables_generator_noinstances(
                scenario_tree,
                includeDerivedVariables=False,
                includeLastStage=False):

            average_value = tree_node._averages[variable_id]

            # should think about nixing the magic constant below (not
            # sure how to best pararamterize it).
            if ((not is_stale) or (is_fixed)) and \
                (fabs(average_value) > 0.0001):

                for var_value, scenario_probability in variable_values:
                    
                    normalized_term_diff += \
                        scenario_probability * \
                        fabs((var_value - average_value)/average_value)

        normalized_term_diff = \
            normalized_term_diff / \
            (ph._total_discrete_vars + ph._total_continuous_vars)

        return normalized_term_diff
예제 #2
0
 def _w_printing(self, ofile, ph=None):
     # print the w values in a useful way to the open file ofile
     # if ph is None, just write the header
     if ph is None:
         ofile.write("iteration; tree node; scenario; variable; ID; W\n")
     else:
         root_node_name = ph._scenario_tree.findRootNode()._name
         for stage, tree_node, variable_id, variable_values, is_fixed, is_stale in \
             scenario_tree_node_variables_generator_noinstances(ph._scenario_tree,
                                                                includeDerivedVariables=False,
                                                                includeLastStage=False):
             if is_stale is False \
                and (OnlyRootNode is False or tree_node._name == root_node_name):
                 for scenario in tree_node._scenarios:
                     scen_name = scenario._name
                     weight_value = scenario._w[
                         tree_node._name][variable_id]
                     variable_name, index = tree_node._variable_ids[
                         variable_id]
                     full_variable_name = variable_name + indexToString(
                         index)
                     ofile.write(
                         str(ph._current_iteration) + ';' +
                         tree_node._name + ';' + scen_name + ';' +
                         full_variable_name + ';' + str(variable_id) + ';' +
                         str(weight_value) + '\n')
예제 #3
0
파일: konvw.py 프로젝트: CanLi1/pyomo-1
    def _inspect_variable_convergence(self, ph, ph_iter):

        # collect termdiff by node and variable so we can
        # report and possibly sort
        term_diff = dict((tree_node._name, {}) \
                         for stage in ph._scenario_tree._stages[:-1]
                         for tree_node in stage._tree_nodes)

        # Track these for reporting purposes
        node_fixed_cnt = dict((tree_node._name, 0) \
                              for stage in ph._scenario_tree._stages[:-1]
                              for tree_node in stage._tree_nodes)
        total_fixed_cnt = 0

        for stage, tree_node, variable_id, variable_values, is_fixed, is_stale \
            in scenario_tree_node_variables_generator_noinstances(
                ph._scenario_tree,
                includeDerivedVariables=False,
                includeLastStage=False):

            if is_fixed:
                node_fixed_cnt[tree_node._name] += 1
                total_fixed_cnt += 1

            # Depending on preprocessing options, stale may indicate
            # fixed or unused in the model, either way we can skip it
            if (not is_stale):

                var_node_avg = 0.0
                for var_value, scenario_probability in variable_values:
                    var_node_avg += scenario_probability * var_value

                var_term_diff = 0.0
                for var_value, scenario_probability in variable_values:
                    var_term_diff += \
                        scenario_probability * \
                        fabs(var_value - var_node_avg)

                term_diff[tree_node._name][variable_id] = var_term_diff

        # Print individual variable term diffs by node
        # and sorted highest to lowest
        # skip the leaf stage
        ofile = open(self.wonly_file, 'a')
        for stage in ph._scenario_tree._stages[:-1]:

            for tree_node in stage._tree_nodes:

                for variable_id, var_term_diff in sorted(
                        term_diff[tree_node._name].items(),
                        key=itemgetter(1),
                        reverse=True):
                    variable_name, index = tree_node._variable_ids[variable_id]
                    ofile.write(
                        str(ph_iter) + "; " + tree_node._name + "; " +
                        variable_name + indexToString(index) + "; " +
                        str(var_term_diff) + '\n')
        ofile.close()
예제 #4
0
파일: konvw.py 프로젝트: Juanlu001/pyomo
    def _inspect_variable_convergence(self, ph, ph_iter):

        # collect termdiff by node and variable so we can
        # report and possibly sort
        term_diff = dict((tree_node._name, {}) \
                         for stage in ph._scenario_tree._stages[:-1]
                         for tree_node in stage._tree_nodes)

        # Track these for reporting purposes
        node_fixed_cnt = dict((tree_node._name, 0) \
                              for stage in ph._scenario_tree._stages[:-1]
                              for tree_node in stage._tree_nodes)
        total_fixed_cnt = 0

        for stage, tree_node, variable_id, variable_values, is_fixed, is_stale \
            in scenario_tree_node_variables_generator_noinstances(
                ph._scenario_tree,
                includeDerivedVariables=False,
                includeLastStage=False):

            if is_fixed:
                node_fixed_cnt[tree_node._name] += 1
                total_fixed_cnt += 1

            # Depending on preprocessing options, stale may indicate
            # fixed or unused in the model, either way we can skip it
            if (not is_stale):

                var_node_avg = 0.0
                for var_value, scenario_probability in variable_values:
                    var_node_avg += scenario_probability * var_value

                var_term_diff = 0.0
                for var_value, scenario_probability in variable_values:
                    var_term_diff += \
                        scenario_probability * \
                        fabs(var_value - var_node_avg)

                term_diff[tree_node._name][variable_id] = var_term_diff


        # Print individual variable term diffs by node
        # and sorted highest to lowest
        # skip the leaf stage
        ofile = open(self.wonly_file, 'a')
        for stage in ph._scenario_tree._stages[:-1]:

            for tree_node in stage._tree_nodes:

                for variable_id, var_term_diff in sorted(term_diff[tree_node._name].items(),
                                                         key=itemgetter(1),
                                                         reverse=True):
                    variable_name, index = tree_node._variable_ids[variable_id]
                    ofile.write(str(ph_iter)+"; "+tree_node._name+"; "+variable_name+indexToString(index)+"; "+str(var_term_diff)+'\n')
        ofile.close()
예제 #5
0
파일: sorgw.py 프로젝트: Juanlu001/pyomo
 def _w_printing(self, ofile, ph=None):
     # print the w values in a useful way to the open file ofile
     # if ph is None, just write the header
     if ph is None:
         ofile.write("iteration; tree node; scenario; variable; W\n")
     else:
         for stage, tree_node, variable_id, variable_values, is_fixed, is_stale in \
             scenario_tree_node_variables_generator_noinstances(ph._scenario_tree,
                                                                includeDerivedVariables=False,
                                                                includeLastStage=False):
             if (is_stale is False):
                 for scenario in tree_node._scenarios:
                    scen_name = scenario._name
                    weight_value = scenario._w[tree_node._name][variable_id]
                    variable_name, index = tree_node._variable_ids[variable_id]
                    full_variable_name = variable_name+indexToString(index)
                    ofile.write(str(ph._current_iteration) + ';' + tree_node._name + ';' + scen_name + ';' + full_variable_name + ';' + str(weight_value)+'\n')
예제 #6
0
    def computeMetric(self, ph, scenario_tree, instances):

        term_diff = 0.0

        for stage, tree_node, variable_id, variable_values, is_fixed, is_stale \
            in scenario_tree_node_variables_generator_noinstances(
                scenario_tree,
                includeDerivedVariables=False,
                includeLastStage=False):

            if (not is_stale) or (is_fixed):
                
                for var_value, scenario_probability in variable_values:

                    term_diff += \
                        scenario_probability * \
                        fabs(var_value - tree_node._averages[variable_id])

        return term_diff