Google OR-Tools v9.11
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
2d_rectangle_presolve.h
Go to the documentation of this file.
1// Copyright 2010-2024 Google LLC
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14#ifndef OR_TOOLS_SAT_2D_RECTANGLE_PRESOLVE_H_
15#define OR_TOOLS_SAT_2D_RECTANGLE_PRESOLVE_H_
16
17#include <vector>
18
19#include "absl/types/span.h"
21
22namespace operations_research {
23namespace sat {
24
25// Given a set of fixed boxes and a set of boxes that are not yet
26// fixed (but attributed a range), look for a more optimal set of fixed
27// boxes that are equivalent to the initial set of fixed boxes. This
28// uses "equivalent" in the sense that a placement of the non-fixed boxes will
29// be non-overlapping with all other boxes if and only if it was with the
30// original set of fixed boxes too.
32 absl::Span<const RectangleInRange> non_fixed_boxes,
33 std::vector<Rectangle>* fixed_boxes);
34
35// Given a set of non-overlapping rectangles split in two groups, mandatory and
36// optional, try to build a set of as few non-overlapping rectangles as
37// possible defining a region R that satisfy:
38// - R \subset (mandatory \union optional);
39// - mandatory \subset R.
40//
41// The function updates the set of `mandatory_rectangles` with `R` and
42// `optional_rectangles` with `optional_rectangles \setdiff R`. It returns
43// true if the `mandatory_rectangles` was updated.
44bool ReduceNumberofBoxes(std::vector<Rectangle>* mandatory_rectangles,
45 std::vector<Rectangle>* optional_rectangles);
46
47} // namespace sat
48} // namespace operations_research
49
50#endif // OR_TOOLS_SAT_2D_RECTANGLE_PRESOLVE_H_
bool ReduceNumberofBoxes(std::vector< Rectangle > *mandatory_rectangles, std::vector< Rectangle > *optional_rectangles)
bool PresolveFixed2dRectangles(absl::Span< const RectangleInRange > non_fixed_boxes, std::vector< Rectangle > *fixed_boxes)
In SWIG mode, we don't want anything besides these top-level includes.