0.7.dev0 - master
- TODO
- Tagging with explicit support for Python 3.8 on PyPI.
- Minor tweak to output of default option value.
- Improving number formatting in log output.
- Documentation updates.
- Renaming "no_nodes" termination condition to "queue_empty".
- Changing solver default settings to use an exact optimality check with no relative gap (relative_gap=None, absolute_gap=0).
- Changing the default behavior of the queue_tolerance setting to be set equal to whatever is assigned to the absolute_gap setting (which can be overridden by explicitly assigning a queue tolerance). This results in more desirable behavior when pairing non-default queue strategies (e.g., depth-first) with inexact absolute_gap settings. Before this change, it would be necessary to set both the absolute_gap and queue_tolerance to the same nonzero value to avoid unnecessary processing of nodes, which is probably not obvious to users.
- Adding a queue_limit solve option, which causes the solve to terminate with the "queue_limit" termination condition when the queue size exceeds this value. This option is useful for avoiding excessively large updates from a NestedSolver.
- Adding a track_bound solve option that can be set to false to disable online tracking of the global bound. This reduces dispatcher overhead for non-default queue strategies (e.g., "depth", "lifo").
- Improved documentation.
- Adding config.COMPRESSION option to control whether or not serialized node state is compressed before sending it to the dispatcher (default: False).
- Fixing issue that occurred when the objective() and bound() Problem methods returned numpy scalar types (#8).
- Adding another TSP implementation to the examples.
- Removing some debugging print statements left around from when the lexicographical queue strategies were added.
- Fixing some edge case behavior related to unbounded problem.
- Minor fixes to documentation.
- Tracking the best node and storing it on the results object (#1, #3, #7)
- Removing node argument from branch method of Problem implementations. This makes it more apparent that branching occurs for the node from the most recent load_state and not some arbitrary node. Child nodes should be created using pybnb.Node() as opposed to node.new_child().
- Removing tree_id and parent_tree_id attributes from the Node class. These were simply adding unnecessary complexity to the code while serving no real purpose.
- Adding a helper class for performing a nested branch-and-bound solve and adding command-line options that allow it to be used with the command-line examples. Also, incorporating it into the TSP example.
- Replacing both the notify_new_best_objective and notify_new_best_objective_received Problem callbacks with a single notify_new_best_node callback. This new callback includes an additional argument indicating if the currently loaded node is the new best.
- Major redesign of node serialization, allowing for much faster serial performance (especially with PyPy): The node.state attribute can now be assigned anything (must pickle-able to work in the parallel case). The node.resize(...) method should no longer be called. (#5)
- Adding pybnb.config to allow customizing serialization of node state (e.g., use dill instead of pickle). See online docs for more information.
- Allowing for lexicographic queue strategies: The queue_strategy solve option can now be assigned a tuple of existing strategies (e.g., ('bound','objective')) to define a lexicographic queue strategy. Equivalently, when the 'custom' queue strategy is selected, users can assign a tuple to the node.queue_priority attribute.
- Adding a last-in, first-out queue strategy ('lifo').
- Adding new sections to the online docs.
- Fix to pybnb.solve helper function. The dispatcher_rank keyword was not being used to initialized the solver.
- Adding 'log_new_incumbent' solver option that can be set to False to disable immediate logging of incumbent updates, in case this is slowing down the dispatcher.
- Renaming 'node_priority_strategy' solver option to 'queue_strategy'.
- Adding 'scale_function' solver option to allow customizing how the absolute gap is converted to a relative gap. Default is max{1.0,|objective|}.
- Renaming 'absolute_tolerance' solver option to 'comparison_tolerance'.
- Renaming the pybnb.pyomo_tools sub-package to pybnb.pyomo.
- Renaming the 'cutoff' solve option to 'bound_stop'. Also adding an 'objective_stop' solve option. Both options trigger the 'objective_limit' termination condition (replaces the 'cutoff' termination condition).
- Adding an optional notify_solve_begins callback to the Problem base class.
- Removing worker_comm argument from the notify_new_best_objective_* callbacks, as it is unsafe to use when those methods are called.
- Adding documented Enum types for solution status, termination condition, and node priority strategy.
- Adding handling for SIGINT and SIGUSER1 events to initiate a graceful shutdown that tags the results with an 'interrupted' termination condition.
- Adding 'disable_objective_call' solver option that disables calls to the problem objective.
- Removing a number of collective MPI communicator calls from the solve finalization process.
- Adding additional queue strategy implementations: 'random' and 'local_gap'.
- tagging with explicit support for Python 3.7 on PyPI
- removing code that causes deprecation warnings in Python 3.7
- removing code that causes deprecation warnings in Python 3.7
- compatibility fixes for next pyomo release
- adding a best objective first node priority strategy
- performance improvements
- performance improvements
- adding first-in, first-out dispatcher queue strategy
- changing how solver handles single-process communicators
- removed unnecessary Barrier from solve method
- fixed bug in pyomo_tools that left lingering send calls
- documentation improvements
- Initial working release on PyPI.