Releases: dwavesystems/dwave-optimization
Releases · dwavesystems/dwave-optimization
0.4.0
New Features
- Add capacitated vehicle routing problem with time windows generator.
See #104. - Reduce the number of symbols in the model returned by
job_shop_scheduling()
generator. - Add
Array::integral()
,Array::max()
, andArray::min()
overloads for all existing C++ nodes. - Add C++
is_integer()
function. - Support Python 3.13.
Model.add_constraints()
now returns the symbol for the constraint.- Fully support scalar (0-dimensional) indices for advanced indexing
operations, e.g.A[i, :, j, :]
wherei
andj
are nodes with
scalar output. Previously, this would work only if the final output
of the indexing operation was also scalar.
Upgrade Notes
- Using advanced indexing nodes with indexing arrays that have a
higher dimension than one (e.g.A[:, i, :, j]
wherei
andj
are 2d arrays) has been disabled. Previously, it was possible to
construct models that used this functionality, but the behavior of
the model during state initialization and propagation may not have
been correct.
Bug Fixes
- Fix combined indexing. Previously indexing an array symbol by a
mixture of arrays, integers, and non-empty slices would always
result in an error. - Update
AdvancedIndexingNode
to check the indices of its indexing
arrays to prevent out-of-bounds access. - Fix the case of using scalar indices in an advanced indexing
operation where the indices were not grouped, e.g.A[:, i, :, j]
,
which was technically unsupported but no errors were raised. This
could also lead to segfaults during state initialization or
propagation.
0.3.0
New Features
- Add
Symbol.id()
method to return the identity of the underlying
node. - Add bin packing generator.
- Add support for exponentiation of
ArraySymbol
for positive integer
exponents other than 2. - Implement
ArrayNode
andDecisionNode
C++ classes. These classes
are useful when creating nodes that require their predecessor(s) to
be both arrays and node. See #75. - Update C++ nodes that previously inherited from both
Array
and
Node
to inherit fromArrayNode
. - Update C++ nodes that previously inherited from both
Decision
and
Node
to inherit fromDecisionNode
. - Add
ArraySymbol.initialize_arraynode()
Cython method. - Update C++
Graph
to hold a vector ofDecisionNode*
for easy
access. This will increase the memory usage for graphs with many
decisions, but provide faster access. - Support binary operations between symbols representing a scalar and
other array symbols. - Add
SizeNode
C++ class.SizeNode
reports the size of its
predecessor. See #48. - Add
Size
Python class.Size
reports the size of its predecessor. See #48. - Add C++
Graph::objective()
method for accessing the current
objective. - Add
::operands()
method to C++BinaryOpNode
,NaryOpNode
,
ReduceNode
, andUnaryOpNode
. This method allows access to the
Array*
of the node's predecessors without a dynamic cast. - Add C++
LogicalNode
and PythonLogical
symbol.Logical
propagates the truth value(s) of its predecessor element-wise. - Add C++
NotNode
and PythonNot
symbol.Not
propagates the
inverse of the truth value(s) of its predecessor element-wise. - Add C++
void Graph::commit(State& state, std::vector<const Node*>&& changed) const
overload. - Add C++
void Graph::propagate(State& state, std::vector<const Node*>&& changed) const
overload. - Add C++
void Graph::revert(State& state, std::vector<const Node*>&& changed) const
overload. - Add predecessor shape test when initializing the state of C++
ArrayValidationNode
. - Add C++
WhereNode
. See #66. - Add Python
Where
symbol andwhere
function. See #66.
Upgrade Notes
-
Require and/or return
ArrayNode*
in many places that previously
required and/or returned anArray*
.The following
Graph
methods now require anArrayNode*
argument:
Graph.set_objective()
,Graph.add_constraint()
,
Graph.constraints()
,Graph.decisions()
.The following nodes now require a
ArrayNode*
as argument(s) to
their constructor:AdvancedIndexingNode
,ArrayValidationNode
,
BasicIndexingNode
,BinaryOpNode
,NaryOpNode
,
PermutationNode
,QuadraticModelNode
.ReduceNode
,
ReshapeNode
, andUnaryOpNode
.Python code is not affected.
-
Remove
ArraySymbol.initialize_array()
Cython method. Python code
is not affected. -
Require
ArrayNode*
as an argument to thesymbol_from_ptr()
Cython function.
Bug Fixes
- Fix
Array::min()
. Previously it incorrectly reported the smallest
number expressible by adouble
, rather than the lowest. See
#85. - Implement C++
UnaryOpNode::max()
,UnaryOpNode::min()
, and
UnaryOpNode::logical()
. ThereforeAbsoluteNode
,NegativeNode
,
andSquareNode
will now correctly propagate their minimum and
maximum value and will now correctly report if they represent
integer or boolean values.
Other Notes
- Switch to using Meson as the build
system. When installing from source withpip
orpypa/build
,
Meson will be used to install the package. Previouslysetuptools
andsetuptools_dso
were used.
0.2.0
New Features
- Add C++
NaryOpNode(std::span<Node*>)
andNaryOpNode(std::span<Array*>)
constructors. - Add
Model.num_edges()
method. See #28. - Add quadratic assignment problem generator. See #29.
- Add C++ method to rotate elements in a disjoint list.
- Add support for
<,>,==,!=,<=,>=
operators betweenConstant
and array-like objects. - Add support for
bool(constant)
,int(constant)
, andnot constant
whenconstant
is an instance ofConstant
encoding a single scalar value. - Make
repr()
of symbols unique to the underlying node, rather than to the Python symbol. See #52. - Allow
dwave.optimization.generators.traveling_salesperson()
to accept an asymmetric distance matrix. - Allow
dwave.optimization.generators.flow_shop_scheduling()
to accept non-integer processing times. - Implement
ArraySymbol.__iadd__()
andArraySymbol.__imul__()
. The+=
operator will now return aNaryAdd
symbol. The*=
operator will now return aNaryMultiply
symbol. - Implement
NaryAdd.__iadd__()
. In-place addition with aNaryAdd
symbol will no longer create a new symbol. - Implement
NaryAdd.__imul__()
. In-place multiplication with aNaryMultiply
symbol will no longer create a new symbol. - Add missing
typing
information todwave.optimization.add()
,dwave.optimization.maximum()
,dwave.optimization.minimum()
, anddwave.optimization.multiply()
. - Support NumPy 2.0. Also, no longer require NumPy at build-time.
- Speed up
Model.iter_symbols()
and other symbol iteration methods.
Upgrade Notes
- Raise a
ValueError
when callingbool()
on anArraySymbol
. dwave.optimization.add()
,dwave.optimization.maximum()
,dwave.optimization.minimum()
, anddwave.optimization.multiply()
no longer accept a tuple of symbols as inputs.dwave.optimization.logical_and()
anddwave.optimization.logical_or()
arguments have been renamed.- Remove
.from_ptr()
cdef
method from all of the symbol classes.
Bug Fixes
- Fix
ArraySymbol.all()
for empty array symbols. See #43. - Add missing
copy()
override for C++DisjointBitSetsNode
states. - Fix
Symbol.to_networkx()
to no longer be compiler-dependant. See #18. - Fix
dwave.optimization.generators.job_shop_scheduling()
for problems with the number of jobs is different than the number of machines. - Return
NotImplemented
fromArraySymbol
operator methods for unknown types. - Fix return type of
Symbol.maybe_equals()
to be integer instead of boolean. See #23.
0.1.0
Prelude
- The first release of
dwave-optimization
.
0.1.0rc1
Update version 0.1.0rc0 -> 0.1.0rc1
0.1.0rc0
Initial pre-release.