OR-Tools  9.2
binpacking_2d_parser.h
Go to the documentation of this file.
1 // Copyright 2010-2021 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_PACKING_BINPACKING_2D_PARSER_H_
15 #define OR_TOOLS_PACKING_BINPACKING_2D_PARSER_H_
16 
17 #include <string>
18 #include <vector>
19 
22 
23 namespace operations_research {
24 namespace packing {
25 
26 // A BinPacking parser.
27 // It supports the following file format:
28 // - 2bp:
29 // see http://or.dei.unibo.it/library/two-dimensional-bin-packing-problem
30 // - Binpacking with conflicts:
31 // see http://or.dei.unibo.it/library/bin-packing-problem-conflicts
32 //
33 // The generated problems have the following characteristics:
34 //
35 // You have one box with n dimensions. The size of the box is stored in the
36 // field box_shape().
37 // You need to fit items into this box. Each item has the same number of
38 // dimensions and one or more possible shapes (this usually means that
39 // you can rotate the item). Each item has a value, and a possible list of
40 // conflicts (items you cannot put alongside this item).
41 // The objective of the problem is to fit as many items as possible in the box
42 // while maximizing the sum of values of selected items. For each item, you need
43 // to select the shape and the position of the item in the box.
44 // Each item must not overlap (in n dimensions) with any other item.
46  public:
48 
49  // Loads the 'instance'th instance of the bin packing problem if the given
50  // file. The instance are 1 based (first is 1).
51  // Only one call to a Load*() function is supported. All the subsequent
52  // calls will do nothing and return false.
53  bool Load2BPFile(const std::string& file_name, int instance);
54  MultipleDimensionsBinPackingProblem problem() const { return problem_; }
55 
56  private:
57  enum LoadStatus { NOT_STARTED = 0, INSTANCE_FOUND = 1, PARSING_FINISHED = 2 };
58 
59  void ProcessNew2BpLine(const std::string& line, int instance);
60 
61  MultipleDimensionsBinPackingProblem problem_;
62  int num_dimensions_;
63 
64  // Temporary.
65  LoadStatus load_status_;
66  int num_items_;
67  int instances_seen_;
68 };
69 
70 } // namespace packing
71 } // namespace operations_research
72 
73 #endif // OR_TOOLS_PACKING_BINPACKING_2D_PARSER_H_
MultipleDimensionsBinPackingProblem problem() const
bool Load2BPFile(const std::string &file_name, int instance)
Collection of objects used to extend the Constraint Solver library.