In a combinatorial auction, a plurality of bids is received each having a
plurality of sub bids and Boolean operators logically connecting each
pair of sub bids. A current allocation is determined by allocating goods
to at least one of the bids and a best allocation is initialized with the
current allocation. A neighboring allocation is constructed by
reallocating within the current allocation at least one good from at
least one bid to another bid. The best allocation is updated with the
neighboring allocation when the value of the neighboring allocation is
greater than the current value of the best allocation.