Changeset 3093


Ignore:
Timestamp:
Oct 13, 2010 3:38:37 PM (11 years ago)
Author:
jwatson
Message:

More PySP fixes associated with ipopt integration. Nothing wrong with ipopt per se - it was just doing things we didn't expect, but were perfectly reasonable.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • coopr.pysp/trunk/coopr/pysp/ph.py

    r3092 r3093  
    253253      for scenario_name, instance in self._instances.items():
    254254         this_value = getattr(instance, cost_variable.name)[cost_variable_index].value
    255          num_values += 1
    256          sum_values += this_value
    257          if first_time is True:
    258             first_time = False
    259             maximum_value = this_value
    260             minimum_value = this_value
    261          else:
    262             if this_value > maximum_value:
     255         if this_value is not None: # None means not reported by the solver.
     256            num_values += 1
     257            sum_values += this_value
     258            if first_time is True:
     259               first_time = False
    263260               maximum_value = this_value
    264             if this_value < minimum_value:
    265261               minimum_value = this_value
    266       return minimum_value, sum_values/num_values, maximum_value
     262            else:
     263               if this_value > maximum_value:
     264                  maximum_value = this_value
     265               if this_value < minimum_value:
     266                  minimum_value = this_value
     267
     268      if num_values > 0:
     269         sum_values = sum_values / num_values
     270
     271      return minimum_value, sum_values, maximum_value
    267272
    268273   # a utility to transmit - across the PH solver manager - the current weights
     
    15211526                this_value = getattr(instance,cost_variable_name)[cost_variable_index].value
    15221527                if output_only_statistics is False:
    1523                    print "%12.4f" % this_value,
    1524                 num_values += 1
    1525                 sum_values += this_value
    1526                 if first_time is True:
    1527                    first_time = False
    1528                    maximum_value = this_value
    1529                    minimum_value = this_value
    1530                 else:
    1531                    if this_value > maximum_value:
     1528                   if this_value is not None:
     1529                      print "%12.4f" % this_value,
     1530                   else:
     1531                      # this is a hack, in case the stage cost variables are not returned. ipopt
     1532                      # does this occasionally, for example, if stage cost variables are constrained
     1533                      # to a constant value (and consequently preprocessed out).
     1534                      print "%12s" % "Not Rprted",
     1535                if this_value is not None:
     1536                   num_values += 1
     1537                   sum_values += this_value
     1538                   if first_time is True:
     1539                      first_time = False
    15321540                      maximum_value = this_value
    1533                    if this_value < minimum_value:
    15341541                      minimum_value = this_value
     1542                   else:
     1543                      if this_value > maximum_value:
     1544                         maximum_value = this_value
     1545                      if this_value < minimum_value:
     1546                         minimum_value = this_value
    15351547                if scenario == tree_node._scenarios[-1]:
    1536                    if output_only_statistics is True:
    1537                       print "    Min=%12.4f" % (minimum_value),
    1538                       print "    Avg=%12.4f" % (sum_values/num_values),
    1539                       print "    Max=%12.4f" % (maximum_value),
    1540                    else:
    1541                       print "    Max-Min=%12.4f" % (maximum_value-minimum_value),
    1542                       print "    Avg=%12.4f" % (sum_values/num_values),
     1548                   if num_values > 0:
     1549                      if output_only_statistics is True:
     1550                         print "    Min=%12.4f" % (minimum_value),
     1551                         print "    Avg=%12.4f" % (sum_values/num_values),
     1552                         print "    Max=%12.4f" % (maximum_value),
     1553                      else:
     1554                         print "    Max-Min=%12.4f" % (maximum_value-minimum_value),
     1555                         print "    Avg=%12.4f" % (sum_values/num_values),
    15431556                   print ""
    1544 
Note: See TracChangeset for help on using the changeset viewer.