{"id":37108,"date":"2019-10-31T22:15:47","date_gmt":"2019-10-31T19:15:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1\/"},"modified":"2019-10-31T22:15:47","modified_gmt":"2019-10-31T19:15:47","slug":"diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/news\/diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1","title":{"rendered":"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/89e9927c86cd36ee5b4ab37b5c0753c9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn this article, we will discuss how we addressed the issue of a shortage of available storage cells and the development of a discrete optimization algorithm to solve such a problem. We will explain how we 'constructed' a mathematical model for the optimization task and the unexpected difficulties we encountered when processing the input data for the algorithm.<\/p>\n<p>If you are interested in the applications of mathematics in business and are not afraid of applying equivalent transformations of formulas at a 5th-grade level, then welcome under the fold!<\/p>\n<p>This article will be useful for those who implement <i>WMS<\/i>-systems, work in the field of warehouse or production logistics, as well as programmers interested in the applications of mathematics in business and process optimization within the company.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introductory Part<\/h4>\n<p>\nThis publication continues a series of articles in which we share our successful experience with the implementation of optimization algorithms in warehouse processes. <\/p>\n<p>In <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463289\/\">the previous article<\/a><\/noindex> We describe the specifics of the warehouse where we implemented the <i>WMS<\/i>-system, and we also discuss why we needed to solve the problem of clustering batches of remaining goods during the implementation of the <i>WMS<\/i>-system, and how we approached it.<\/p>\n<p>When we finished writing the article on optimization algorithms, it turned out to be very extensive, so we decided to divide the accumulated material into two parts:<\/p>\n<ul>\n<li>In the first part (this article), we will describe how we 'constructed' the mathematical model of the problem and the significant challenges we unexpectedly faced when processing and transforming the input data for the algorithm.<\/li>\n<li>In the second part, we will thoroughly examine the implementation of the algorithm in the <i>C++<\/i>, conduct a computational experiment, and summarize the experiences we gained during the implementation of such 'intelligent technologies' into the customer's business processes.<\/li>\n<\/ul>\n<p>\nHow to read the article. If you have read the previous article, you can proceed directly to the chapter 'Overview of Existing Solutions'; if not, the description of the problem being solved is in the spoiler below.<\/p>\n<p><b class=\"spoiler_title\">Description of the problem being solved in the customer's warehouse<\/b><\/p>\n<h4>The bottleneck in the processes<\/h4>\n<p>\nIn 2018, we completed a project for the implementation of the <i>WMS<\/i>-system in the warehouse of 'Trade House LD' in Chelyabinsk. We deployed the product '1C-Logistics: Warehouse Management 3' at 20 workstations: operators <i>WMS<\/i>, warehouse workers, forklift drivers. The warehouse is medium-sized, about 4,000 m2, with 5,000 cells and 4,500 SKUs. The warehouse stores ball valves of our own production in various sizes from 1 kg to 400 kg. Inventory is stored by batches, as there is a need for goods selection by FIFO.<\/p>\n<p>During the design of automation schemes for warehouse processes, we encountered an existing problem of suboptimal inventory storage. The specifics of storing and stacking valves are such that only the nomenclature of one batch can be located in a cell for individual storage (see Fig. 1). Products arrive at the warehouse daily, and each arrival is a separate batch. In total, after one month of warehouse operation, 30 separate batches are created, and each must be stored in a separate cell. Goods are often selected not by entire pallets, but by individual pieces, resulting in many cells in the individual selection area showing the following situation: in a cell with a volume of over 1m3, there are several pieces of valves occupying less than 5-10% of the cell's volume. <\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a7c03f2302c3be02c00c670453353f16.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1. Photo of several pieces in a cell<\/i><\/p>\n<p>There is evident suboptimal use of warehouse capacity. To illustrate the scale of the issue, I can provide numbers: on average, there are between 100 to 300 cells with a volume of over 1m3 containing 'minimal' leftovers at different periods of warehouse operation. Since the warehouse is relatively small, during peak seasons, this factor becomes a 'bottleneck' that significantly slows down the warehouse processes of receiving and shipping.<\/p>\n<h4>The idea for solving the problem<\/h4>\n<p>\nThe idea arose: to consolidate batches of leftovers with the closest dates into a single batch and to compactly place such leftovers with a unified batch in one cell, or in several if one is not sufficient to accommodate the total amount of leftovers. An example of such 'compression' is shown in Figure 2.<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/792f114a7afa6272a6d152a784650681.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 2. Scheme for compressing leftovers in cells<\/i><\/p>\n<p>This significantly reduces the warehouse space occupied, which will be used for the new goods being stored. In situations with overloaded warehouse capacities, this measure is crucial; otherwise, there may simply not be enough free space to store new items, leading to a halt in the warehouse processes of placement and replenishment and, consequently, a stoppage in receiving and shipping. Previously, before the implementation of the WMS system, this operation was performed manually, which was inefficient since the process of finding suitable stocks in the bins took quite a long time. Now, with the implementation of the WMS system, we have decided to automate, speed up, and make the process intelligent.<\/p>\n<p>The process of solving such a task is divided into 2 stages: <\/p>\n<ul>\n<li>in the first stage, we find groups of batches that are close in date for compression (this task is dedicated) <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463289\/\">the previous article<\/a><\/noindex>);<\/li>\n<li>in the second stage, we calculate the most compact placement of inventory in the bins for each batch group. <\/li>\n<\/ul>\n<p>\nIn this article, we will focus on the second stage of the algorithm.<\/p>\n<h4>Overview of Existing Solutions<\/h4>\n<p>\nBefore moving on to the description of the algorithms we developed, it is worth conducting a brief overview of the systems already available on the market <i>WMS<\/i>, which implement similar functionality for optimal compression.<\/p>\n<p>First of all, it is necessary to note the product \"1C: Enterprise 8. WMS Logistics. Warehouse Management 4,\" which belongs to and is distributed by the company 1C and belongs to the fourth generation <i>WMS<\/i>-systems developed by AXELOT. This system claims functionality for compression, designed to consolidate fragmented inventory into a single common bin. It should be noted that the compression functionality in such a system also includes other capabilities, such as correcting the placement of items in the bins according to their ABC classes, but we will not dwell on them. <\/p>\n<p>Analyzing the code of the \"1C: Enterprise 8. WMS Logistics. Warehouse Management 4\" system (which is open in this part of the functionality), we can conclude the following. The algorithm for compressing stocks implements a rather primitive linear logic, and there can be no talk of any 'optimal' compression. Naturally, it does not provide for the clustering of batches. Several clients who have implemented such a system complained about the results of the compression planning. For example, it often happened in practice that when compressing, there was a situation where 100 units of stock from one cell were planned to be moved to another cell, where there was 1 unit of product, although it would be optimal in terms of time to do the opposite.<\/p>\n<p>The functionality for compressing stock in cells is also stated in many foreign <i>WMS<\/i>-systems, but unfortunately, we have neither real feedback on the effectiveness of the algorithms (this is a trade secret), nor any idea of the depth of their logic (proprietary software with closed code), so we cannot judge.<\/p>\n<h4>Searching for a mathematical model of the problem<\/h4>\n<p>\nIn order to design quality algorithms to solve the problem, it is necessary first to clearly formulate this problem mathematically, which we will do.<\/p>\n<p>There are many cells <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/bfff1fb95dd0c633ada02b9398778eab.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, in which there are stocks of a certain product. We will refer to such cells as donor cells. Let's denote <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/50ef693482cd4cb27410b30b0bc107b1.jpeg\" style=\"display:block;margin: 0 auto;\" \/> the volume of the product located in the cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/dc7faf1656fb12c8e467fe3a5b8977fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/>$.<\/p>\n<p>It is important to mention that the compression procedure can involve only one product from one batch, or several batches, which have been preliminarily combined into a cluster (read <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463289\/\">the previous article<\/a><\/noindex>), which is due to the specifics of storing and laying out products. Separate compression procedures should be launched for different products or different clusters of batches.<\/p>\n<p>There are many cells <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/b9aafca691626263d8ecc2faed8dfcfe.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, into which stocks from donor cells can potentially be placed. We will refer to such cells as container cells. These can be either free cells in the warehouse or donor cells from the multitude <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/25731bc72091e2284e76c434d2abdcfd.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. The multitude is always a subset of <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d407f97344131a3056b1eab1d3dd7dcd.jpeg\" style=\"display:block;margin: 0 auto;\" \/> For each cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/581806d446f3d8c91927045249698e71.jpeg\" style=\"display:block;margin: 0 auto;\" \/>.<\/p>\n<p>from the multitude <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/b084d5852a1e4f00d2498640534d66e9.jpeg\" style=\"display:block;margin: 0 auto;\" \/> there are capacity constraints assigned <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/236efb40a21865f78240c8e14303cc2e.jpeg\" style=\"display:block;margin: 0 auto;\" \/> . <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/fe253cfe5f2aa39bc8e064674fb206f8.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, measured in dm3. One dm3 represents a cube with sides of 10 cm. The products stored in the warehouse are large enough, so this level of discretization is sufficient in this case. <\/p>\n<p>The matrix of shortest distances is given <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/48c133b0affa17f6a2367a02241d5f17.jpeg\" style=\"display:block;margin: 0 auto;\" \/> in meters between each pair of cells <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/8fd860e331a8e42dd258857bdf580c05.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, where <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/feb9a48c6e9e4ccd8e9fa1db5565e96e.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d9a48a8a22ea984d0769373c5620c99a.jpeg\" style=\"display:block;margin: 0 auto;\" \/> belong to sets <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/e2dd20fda8a8b0b5ea2173c14f04fe00.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/0dabafdb55ac6b8495f6d5f657d6c01d.jpeg\" style=\"display:block;margin: 0 auto;\" \/> respectively. <\/p>\n<p>Let\u2019s denote <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/2994defad9bb0a44741f31a85273abf2.jpeg\" style=\"display:block;margin: 0 auto;\" \/> the 'costs' for moving goods from a cell<img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a2e54425ec786d3a88290dda47f4b9cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/> to another cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/bf4a9f1a1f396a9b7b6244cf8c77ecc8.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. Let\u2019s denote <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/6f4c10386fc638f6ca37e0ccdcf4ccb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/> the 'costs' for selecting a container <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/613d619ea5951551427f0cd45c7f79bf.jpeg\" style=\"display:block;margin: 0 auto;\" \/> to move leftovers from other cells into it. How and in what units the values will be calculated <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/22130f203fde6271e33cba0db14d6a80.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d75c50be3ee4f8e02a9523f2d2109f0d.jpeg\" style=\"display:block;margin: 0 auto;\" \/> will be discussed later (see the section on preparing input data); for now, it's sufficient to say that these quantities will be directly proportional to the amounts <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/5e4e80f122ac1fe43f94de2726c0d3b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/1b6a9d41ba4ad68d5a5fbae883b80596.jpeg\" style=\"display:block;margin: 0 auto;\" \/> respectively.<\/p>\n<p>Let\u2019s denote by <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/1ebfe4179740aff474a78d11a004aaa7.jpeg\" style=\"display:block;margin: 0 auto;\" \/> a variable that takes the value 1 if leftovers from a cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/48f9789788c38746ba4ac0c947e0a4ca.jpeg\" style=\"display:block;margin: 0 auto;\" \/> are moved to a container <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/58ce0b4c9bfb946c00bffdc0c50a05d6.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, and 0 otherwise. Let\u2019s denote by <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/642d5627193c55922be5274826b75cb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/> a variable that takes the value 1 if the container <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/6939c9f4daf2ecd531d9c2518c03401d.jpeg\" style=\"display:block;margin: 0 auto;\" \/> contains leftovers, and 0 otherwise.<\/p>\n<p><b>The problem is formulated as follows<\/b>: we need to find such a set of containers <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d6065db66f210083181dabb39f0e9e16.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and thus 'attach' donor cells to container cells in a way that minimizes the function<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/68d7f0271f9761fff2c762e0fe6f5207.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>under the constraints<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d57b8752aa4a8140e239dfa7fdc9ec36.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Thus, in solving the problem, we aim to: <\/p>\n<ul>\n<li>firstly, save warehouse capacity; <\/li>\n<li>secondly, save the time of warehouse workers. <\/li>\n<\/ul>\n<p>\nThe last constraint means that we cannot move goods to a container that we did not select, and thus did not incur 'costs' for its selection. This constraint also means that the volume of goods moved from cells to the container must not exceed the container's capacity. By the solution of the problem, we mean the set of containers <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/db0f987f2d388ad1394d21404e183c93.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and the ways of attaching donor cells to containers.<\/p>\n<p>This formulation of the optimization problem is not new and has been studied by many mathematicians since the early 1980s. In foreign literature, there are 2 optimization problems with an appropriate mathematical model: <noindex><a rel=\"nofollow\" href=\"http:\/\/www.math.nsc.ru\/AP\/benchmarks\/CFLP\/cflp.html\">Single-Source Capacitated Facility Location Problem<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/waset.org\/publications\/10002290\/a-survey-of-discrete-facility-location-problems\">Multi-Source Capacitated Facility Location Problem<\/a><\/noindex> (we will talk about the differences in tasks later). It is worth mentioning that in mathematical literature, the formulation of these two optimization problems is presented in terms of facility location, hence the name 'Facility Location.' This is largely a matter of tradition, as the need to solve such combinatorial problems first arose from the logistics field, primarily in the military-industrial sector in the 1950s. In terms of facility placement, these problems are formulated as follows: <\/p>\n<ul>\n<li>There is a finite set of cities where production facilities can potentially be located (hereafter referred to as producer cities). For each producer city, there are specified opening costs for establishing a facility, as well as constraints on the production capacities of the established facility.<\/li>\n<li>There is a finite set of cities where customers are actually located (hereafter referred to as customer cities). For each customer city, the demand for products is specified. For simplicity, let's consider that the product produced by the facilities and consumed by the customers is the same.<\/li>\n<li>For each pair of producer city and customer city, there is a specified amount of transportation costs for delivering the required volume of products from the producer to the customer.<\/li>\n<\/ul>\n<p>\nIt is required to determine in which cities to open facilities and how to assign customers to these facilities so that:<\/p>\n<ul>\n<li>The total opening costs of the facilities and transportation costs are minimized;<\/li>\n<li>The demand volume of customers assigned to any open facility does not exceed the production capacities of that facility.<\/li>\n<\/ul>\n<p>\nNow it is worth mentioning the only difference between these two classical problems:<\/p>\n<ul>\n<li>Single-Source Capacitated Facility Location Problem \u2013 the customer is supplied only from one open facility;<\/li>\n<li>Multi-Source Capacitated Facility Location Problem \u2013 the customer can be supplied from several open facilities simultaneously.<\/li>\n<\/ul>\n<p>\nThis difference between the two problems may seem minor at first glance, but in reality, it leads to completely different combinatorial structures of such problems and, consequently, completely different algorithms for solving them. The distinction between the problems is demonstrated in the figure below.<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/77962906c7de2fced174d4a2b7785cc2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 3. a) Multi-Source Capacitated Facility Location Problem<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/0242437e488a1aea0f00ce9ede02886d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 3. b) Single-Source Capacitated Facility Location Problem<\/i><\/p>\n<p>Both problems <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/b16678811fceca32d18c94e71cfaa603.jpeg\" style=\"display:block;margin: 0 auto;\" \/>-difficult, meaning there is no exact algorithm that can solve such a task in polynomial time based on the input size. In simpler terms, all exact algorithms for solving the task will work in exponential time, although possibly faster than a brute force approach. Since the task <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/09f42b4b905d9bdc3f00f21098f84ad7.jpeg\" style=\"display:block;margin: 0 auto;\" \/>-is difficult, we will consider only approximate heuristics, meaning algorithms that will compute solutions very close to optimal and will operate quickly enough. If there is interest in such tasks, a good overview can be found here in Russian.<\/p>\n<p>If we relate this to the terminology of our optimal product packing task in cells, then:<\/p>\n<ul>\n<li>client cities are donor cells <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/e6db70dbb85d1c7249f4c30e97e2942e.jpeg\" style=\"display:block;margin: 0 auto;\" \/> with product residues, <\/li>\n<li>producer cities are container cells <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/5ef31fe0483d2bc9a0c18b5dc25e9867.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, into which residues from other cells are expected to be placed,<\/li>\n<li>transport costs are time costs <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/afac567e9057a46de6e0f3d29df9315a.jpeg\" style=\"display:block;margin: 0 auto;\" \/> for the warehouse worker moving the volume of product from the donor cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/829df82255e40cb99024d7c8dd408d41.jpeg\" style=\"display:block;margin: 0 auto;\" \/> to the container cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/b87c9d9260adb26ce623dbe80b4f22c2.jpeg\" style=\"display:block;margin: 0 auto;\" \/>; <\/li>\n<li>opening enterprise costs are the costs of selecting a container <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/db4d21fc2067a23b5af5bb01c412323a.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, equal to the volume of the container cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/b631a01a65f1ffd3348cbcaeeab11f0d.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, multiplied by some coefficient of saving free volumes (the coefficient value is always &gt; 1) (see section preparing the input data).<\/li>\n<\/ul>\n<p>\nOnce the analogy with well-known classic supply problems is established, it is necessary to answer an important question that influences the choice of solution algorithm architecture: is the transfer of residues from the donor cell possible only to one and only one container (Single-Source), or is the transfer possible to multiple container cells (Multi-Source)?<\/p>\n<p>It should be noted that in practice both formulations of the task are present. Below, we present all the 'pros' and 'cons' for each formulation:<\/p>\n<table>\n<tr>\n<th>Task option<\/th>\n<th>Pros of the option<\/th>\n<th>Cons of the option<\/th>\n<\/tr>\n<tr>\n<td>Single-Source<\/td>\n<td>Goods movement operations calculated according to this task option:<\/p>\n<ul>\n<li>require less control from the warehouse worker (taking ALL from one cell, placing ALL in another container cell), which eliminates risks: mistakes in counting the quantity of goods during 'Put into cell' operations; input errors of the counted quantity into the TSD;<\/li>\n<li>No time is required to recalculate the quantity of goods when performing 'Put in cell' operations and entering them into the TSD.<\/li>\n<\/ul>\n<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Multi-Source<\/td>\n<td>Compressing, calculated for this task option, is usually more compact by 10-15% compared to compressions calculated for the 'Single-Source' option. However, it should also be noted that the fewer the stock quantities in the donor cells, the less pronounced this difference in compactness becomes.<\/td>\n<td>Goods movement operations calculated according to this task option:<\/p>\n<ul>\n<li>Require greater control from the warehouse operator (it is necessary to count the quantity of goods being moved to each of the planned container cells), which eliminates the risk of error when counting the quantity of goods and entering data into the TSD while performing 'Put in cell' operations.<\/li>\n<li>Time is required to recalculate the quantity of goods when performing 'Put in cell' operations.<\/li>\n<li>Time is required for 'overheads' (to stop, approach the pallet, scan the barcode of the container cell) when performing 'Put in cell' operations.<\/li>\n<li>Sometimes the algorithm can 'split' the quantity of an almost full pallet between a large number of container cells where suitable goods already exist, which, from the customer's perspective, is unacceptable.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/table>\n<p><i>Table 1. Pros and Cons of Single-Source and Multi-Source Options.<\/i><\/p>\n<p>Since the number of advantages for the Single-Source option is greater, and considering that the fewer the stock quantities in the donor cells, the smaller the difference in the degree of compactness of compression calculated for both task options, our choice fell on the Single-Source option.<\/p>\n<p>It is worth mentioning that the Multi-Source option also has its place. There are many effective algorithms for solving it, most of which can be reduced to solving a series of transportation problems. There are not only effective algorithms but also elegant ones, for example,<noindex><a rel=\"nofollow\" href=\"http:\/\/www.mathnet.ru\/php\/archive.phtml?wshow=paper&amp;jrnid=da&amp;paperid=791&amp;option_lang=rus\"> here.<\/a><\/noindex><\/p>\n<h4>Preparation of Input Data<\/h4>\n<p>\nBefore starting the analysis and development of the algorithm for solving the task, it is necessary to determine what data and in what form we will provide it as input. There are no issues with the volumes of goods left in the donor cells and the capacity of the container cells, as this is trivial \u2014 such quantities will be measured in m\u00b3, but the costs associated with using the container cell and the cost matrix for movement are not so straightforward!<\/p>\n<p>First, let's consider the calculation <b>costs of moving goods<\/b> from the donor cell to the container cell. First, we need to decide in which units we will calculate the costs of movement. The two most obvious options are meters and seconds. It makes no sense to calculate movement costs in 'pure' meters. Let\u2019s illustrate this with an example. Assume the cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/990a5fae8988ddf41395483263de2bcc.jpeg\" style=\"display:block;margin: 0 auto;\" \/> is located on the first level, and the cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/9d17b98e807444f431d01f2e77fc96f7.jpeg\" style=\"display:block;margin: 0 auto;\" \/> is 30 meters away and is located on the second level:<\/p>\n<ul>\n<li>Moving from <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/3188fd9853d5cda2834a5083539ac11d.jpeg\" style=\"display:block;margin: 0 auto;\" \/> downward API support (simultaneously with this in <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/e212a0be19ea687b1017c3aacec3df19.jpeg\" style=\"display:block;margin: 0 auto;\" \/> is more expensive than moving from <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d65e60dec37fb3b83c83ca1c566f1ee9.jpeg\" style=\"display:block;margin: 0 auto;\" \/> downward API support (simultaneously with this in <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/4168198a4c90bdd3dd4b7f0c904b06e0.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, as it is easier to lower items from the second level (1.5-2 meters from the floor) than to lift them to the second level, even though the distance covered will be the same;<\/li>\n<li>Moving 1 item from cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/039864ccd0a2bd14a99a83494f056fa3.jpeg\" style=\"display:block;margin: 0 auto;\" \/> downward API support (simultaneously with this in <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/9f9bc7a256119b110f47760b145e174b.jpeg\" style=\"display:block;margin: 0 auto;\" \/> will be easier than moving 10 items of the same product, even though the distance covered will be the same.<\/li>\n<\/ul>\n<p>\nIt is better to consider movement costs in seconds, as this accounts for both differences in levels and differences in quantities of goods moved. To account for movement costs in seconds, we need to break down the movement operation into its elementary components and measure the time taken for each elementary component.<\/p>\n<p>Let\u2019s say from cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/538c4304e37f340a5a5a8e47e0ee2865.jpeg\" style=\"display:block;margin: 0 auto;\" \/> we are moving <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/6c7e32728f4771726f8ef9b2d78111d6.jpeg\" style=\"display:block;margin: 0 auto;\" \/> items to container <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/fc2ad051b500eae5884404f4b9419841.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. Let\u2019s assume <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/6733192a31618a03e51e8e3133cb96ee.jpeg\" style=\"display:block;margin: 0 auto;\" \/> is the average speed of the worker moving through the warehouse, measured in m\/s. Let\u2019s say <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/97f7e9c65c2196fa586f957618d1c8a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/bbe48d987f180e2f9ccec6e090e6f942.jpeg\" style=\"display:block;margin: 0 auto;\" \/> are the average speeds for the operations of taking and placing respectively for a volume of goods equal to 4 dm\u00b3 (the average volume that a warehouse employee handles at one time). Let\u2019s say <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/267d74648f49d5a2d063b1377c6d2fe6.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/fefdd606d5a81ba4e2ce57b107dfe1e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/> are the heights of the cells from which the taking and placing operations are performed, respectively. For example, the average height of the first level (floor) is 1 m, and the second level is 2 m, and so on. Then the formula for calculating the total time required for the movement operation <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a48ae3c2e9dc8f2c3108cb2be1f96c40.jpeg\" style=\"display:block;margin: 0 auto;\" \/> is as follows:<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/55afb96b1141bb5656351bdaeba31ae4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Table 2 provides statistics on the time taken for each elementary operation, collected by warehouse employees considering the specifics of the stored goods.<\/p>\n<table>\n<tr>\n<th>Operation Name<\/th>\n<th>Designation<\/th>\n<th>Average Value<\/th>\n<\/tr>\n<tr>\n<td>Average speed of the worker moving through the warehouse<\/td>\n<td><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/dadbfb13d2b84b95ab2c5d653a21668b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/td>\n<td>1.5 m\/s<\/td>\n<\/tr>\n<tr>\n<td>Average speed of performing one taking operation (for a volume of goods of 4 dm\u00b3)<\/td>\n<td><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/aa619b43a70a7cf646ad35d5c8883329.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/td>\n<td>2.4 seconds<\/td>\n<\/tr>\n<\/table>\n<p><i>Table 2. Average Time for Warehouse Operations<\/i><\/p>\n<p>We have established the method for calculating movement costs. Now, it is necessary to determine how to calculate <b>costs for selecting the container cell<\/b>Here, things are much more complicated than the costs of movement because: <\/p>\n<ul>\n<li>firstly, the costs must be directly proportional to the volume of the cell \u2013 the same volume of stock being moved from donor cells should preferably be placed in a smaller container rather than a large one, provided that the volume fully fits into both containers. By minimizing the overall costs of container selection, we aim to save 'scarce' available warehouse capacity in the picking area in order to perform subsequent product placement operations in cells. Figure 4 illustrates the options for moving stocks into large and small containers and the consequences of such moving options during subsequent warehouse operations.<\/li>\n<li>secondly, since we need to minimize overall costs in the initial task solution, which is the sum of both the movement costs and the container selection costs, the volumes of the cells in cubic meters must be somehow correlated with seconds, which is far from trivial.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/2c906f9e80b32fcb111fcba7000ea2ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 4. Options for moving stocks into containers of different capacities.<\/i><\/p>\n<p>In Figure 4, the red color represents the volume of stocks that no longer fit into the container at the second stage of placing subsequent goods. <\/p>\n<p>The following requirements for the computed solutions of the problem will help correlate cubic meters of container selection costs with seconds of movement costs:<\/p>\n<ul>\n<li>It is necessary that the stocks from the donor cell be moved to the container cell in any case if it reduces the total number of container cells in which the goods are located.<\/li>\n<li>It is necessary to maintain a balance between the volumes of containers and the time costs of movement: for example, if in the new solution variant compared to the previous solution variant, the gain in volume is significant, while the loss in time costs is small, then the new variant should be chosen.<\/li>\n<\/ul>\n<p>\nLet's start with the last requirement. To specify the ambiguous word 'balance', we conducted a survey of warehouse employees to find out the following. Suppose there is a container cell with a volume <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/2b831b12448ccaee33c528ac622b7ee3.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, to which the movement of goods from donor cells is assigned and the total time of such movement is equal to <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/8050f4b02464164d334048bda86b3923.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Suppose there are several alternative options for placing the same amount of goods from the same donor cells into other containers, where each placement has its own assessments. <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/76f11cd5ab85f9092c8f458d01ac347b.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, where <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/9e735d8a9c4cff3c69fd926eac8c85aa.jpeg\" style=\"display:block;margin: 0 auto;\" \/>&lt;<img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d963e193a263a1505467c19e874f0aab.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/ff5d990cf5a1752d7bb45da9fd58cd7a.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, where <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/485f34b3e720011c38740712cdb8edd9.jpeg\" style=\"display:block;margin: 0 auto;\" \/>&gt;<img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/c66b20d93fd1791e9f186f707b1517bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. <\/p>\n<p>The question arises: what is the minimum volume gain <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/86861ad2236d827efdc683d759d4c120.jpeg\" style=\"display:block;margin: 0 auto;\" \/> acceptable, given a specified time loss. <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/3d49171042fd83244c054dfd84e5c6bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/>? \u041f\u043e\u044f\u0441\u043d\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u0431\u044a\u0435\u043c\u0430 1000 \u0434\u043c3 (1 \u043c3) \u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 70 \u0441\u0435\u043a\u0443\u043d\u0434. \u0415\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u0431\u044a\u0435\u043c\u0430 500 \u0434\u043c3 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c 130 \u0441\u0435\u043a\u0443\u043d\u0434. \u0412\u043e\u043f\u0440\u043e\u0441: \u0433\u043e\u0442\u043e\u0432\u044b \u043b\u0438 \u043c\u044b \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0449\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0434\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c 500 \u0434\u043c3 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430? \u041f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0441\u043a\u043b\u0430\u0434\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430.<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/283289c63fe1232e95b73d1dffdaa030.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 5. Chart of the relationship between the minimum allowable volume savings and the increase in time difference for the operation.<\/i><\/p>\n<p>That is, if the additional time costs amount to 40 seconds, we are only willing to incur them if the volume gain is at least 500 dm3. Despite the slight non-linearity observed in the relationship, for simplicity in further calculations, we will assume that the relationship between the quantities is linear and described by an inequality.<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/666802648033d918a1119e58963feffe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>In the figure below, we will consider the following methods of placing goods in containers.<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a1cb3a5bce4c369f63b3ebeebb738911.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 6. Option (a): 2 containers, total volume 400 dm3, total time 150 sec.<\/i><br \/>\n<img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a13f35b0e2a188e9a8cbf27bcfbf0292.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 6. Option (b): 2 containers, total volume 600 dm3, total time 190 sec.<\/i><br \/>\n<img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/35699c8bd00546c9828dbe50d4b53c46.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 6. Option (c): 1 container, total volume 400 dm3, total time 200 sec.<\/i><\/p>\n<p>Option (a) for choosing containers is more preferred than the initial option, as the inequality is satisfied: (800-400)\/10 &gt;= 150-120, which leads to 40 &gt;= 30. Option (b) is less preferred than the initial option since the inequality is not satisfied: (800-600)\/10 &gt;= 190-150, which leads to 20 &gt;= 40. But option (c) does not fit into such logic! Let's examine this option in more detail. On one hand, the inequality (800-400)\/10 &gt;= 200-120 holds, which means the inequality 40 &gt;= 80 is not satisfied, indicating that the volume gain does not justify such a significant time loss. <\/p>\n<p>On the other hand, in such option (c), we are not only reducing the total occupied volume but also decreasing the number of occupied cells, which is the first of two important requirements for computed solutions to the problems listed above. Clearly, for this requirement to start being fulfilled, we need to add a certain positive constant to the left side of the inequality. <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/61d6b2cb21474a2f4512d6a130a15a0a.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, and this constant should only be added when the number of containers decreases. Recall that <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d80d33679896035041d0ca9a78e8177a.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2014 is a variable equal to 1 when the container <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a83cd6273e544b63099939e6845740fb.jpeg\" style=\"display:block;margin: 0 auto;\" \/> is chosen, and 0 when the container. <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/bc94d9e952782e630125a6e8919ba5ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/> not selected. Let's designate, <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/1e3fb5d7013e60f67c56a56899630852.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2013 a multitude of containers in the original solution and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/26ac9732af37e865cea1bb10a343175c.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2013 a multitude of containers in the new solution. In general form, the new inequality will look like this:<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/1237914e5fdafcc6013203e2624009d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Transforming the inequality above, we obtain <\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/80b039f9ef44301c3b624ada42c28db8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Based on this, we have a formula for calculating the total cost <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/cb5bce584fee0156b23adbab83f66b33.jpeg\" style=\"display:block;margin: 0 auto;\" \/> of a certain variant of the task solution:<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/34f382d40368a980674914916c65b4ec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><b>But now the question arises<\/b>: what value should such a constant have <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/e4754f88bcddfba85b3c785512bee697.jpeg\" style=\"display:block;margin: 0 auto;\" \/>? \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c \u0437\u0430\u0434\u0430\u0447\u0438. \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0440\u0430\u0432\u043d\u043e\u0435 103 \u0438\u043b\u0438 106, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u00abmagic numbers\u00bb. \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u043b\u0430\u0434\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u043e\u0446\u0435\u043d\u043e\u043a \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b.<\/p>\n<p>Let <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/50deefe99bf1d5f948a49591904a8bfe.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2013 the maximum distance between warehouse cells in one zone ABC, equal to 100 m in our case. Let <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/466892dd75279d08b4835a42e62444d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2013 the maximum volume of a cell-container in the warehouse, equal to 1000 dm3 in our case.<\/p>\n<p><b>The first method of calculating the magnitude<\/b> <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/29b94b534da709020cbef206cb0d7dac.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. Let's consider a situation where there are 2 containers on the first tier, which already physically contain goods, meaning they are themselves donor cells, and the costs of moving goods to the same cells are naturally zero. It is necessary to find such a value of the constant <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/5cf81db57dd2a18cc0ec29bb7ca3da62.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, at which it would always be profitable to move leftovers from container 1 to container 2. Substituting values <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/20bbd09e167edc3eb1ed49d8078ecf19.jpeg\" style=\"display:block;margin: 0 auto;\" \/> and <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/605017af48e7b3ca4a323642db4227cd.jpeg\" style=\"display:block;margin: 0 auto;\" \/> into the inequality given above, we obtain:<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/2794955b8f9f3d64ffe4e2b449547555.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>from which it follows<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/292a6e80c646c7eed80e888c8805990c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Substituting the average execution time of elementary operations into the formula above, we get<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/1f56bf1f98c1a3bbd65a4cea99da7efb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><b>The second method of calculating the magnitude<\/b> <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/78e3dff7183b15136d9e03f4a5724479.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. Let's consider a situation where there are <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/02daff1eff70a2963ab8eaa067f15584.jpeg\" style=\"display:block;margin: 0 auto;\" \/> donor cells from which it is planned to move goods into container 1. Let's denote <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/df20c3f27815f2060aae20d260210893.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2013 the distance from the donor cell <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/a29ace66656cf1680c9e00258a9ff597.jpeg\" style=\"display:block;margin: 0 auto;\" \/> to container 1. There is also container 2, which already contains goods, and its volume allows accommodating leftovers from all <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/e25f0828e7d794f8d804528395f6dc7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/> cells. For simplicity, let\u2019s assume that the volume of goods being moved from donor cells to containers is the same and equals <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/35c3392a83fc3b7eef928ddb5e93961a.jpeg\" style=\"display:block;margin: 0 auto;\" \/>. It is required to determine such a value of the constant <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/c9bc10aade46cc3c63628c0ba100b364.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, at which placing all leftovers from <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/e610d9981da2857a541f028a217f2306.jpeg\" style=\"display:block;margin: 0 auto;\" \/> cells in container 2 would always be more profitable than placing them in different containers:<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/27f4f99a920799fba9725f30a04c8ebc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Transforming the inequality, we get<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/56abddb4fc3e54eeb1fe466c68e5d8d7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>To 'enhance' the value of the magnitude <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d77359ea816f9d45a8910cb26649f717.jpeg\" style=\"display:block;margin: 0 auto;\" \/>, let\u2019s assume that <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/9edf13fb4e34b5da26957e451300046f.jpeg\" style=\"display:block;margin: 0 auto;\" \/> = 0. The average number of cells usually involved in the procedure of compressing leftovers in the warehouse equals 10. Substituting the known values of the magnitudes, we have the following value for the constant<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/40323791fd8cd2be3f29a2becf78e175.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Taking the largest value computed for each variant, this will be the value of the magnitude <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/fd018460792c79b8a7953c06b839711d.jpeg\" style=\"display:block;margin: 0 auto;\" \/> for the given parameters of the warehouse. Now, to complete, let\u2019s write the formula for calculating the total costs <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/d4cb2c81bcc788380f1f0c1123b0eeda.jpeg\" style=\"display:block;margin: 0 auto;\" \/> for a certain permissible solution <img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/052e710199e9417aaea94b16dbed47d3.jpeg\" style=\"display:block;margin: 0 auto;\" \/>:<\/p>\n<p><img decoding=\"async\" alt=\"Discrete Mathematics for WMS: Product Compression Algorithm in Cells (Part 1)\" src=\"\/wp-content\/uploads\/2019\/08\/8dd672c7b91639fe1872ef50dca7a220.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Now, after all <b>the titanic efforts<\/b> to transform the input data, we can say that all input data has been transformed into the required format and is ready for use in the optimization algorithm.<\/p>\n<h4>Conclusion<\/h4>\n<p>\nAs practice shows, the labor intensity and importance of the data preparation and transformation stage for the algorithm is often underestimated. In this article, we specifically paid a lot of attention to this stage to show that only well-prepared input data can make the solutions computed by the algorithm truly valuable for the client. Yes, there were many formula outputs, but we warned you about this earlier \ud83d\ude42<\/p>\n<p>In the next article, we will finally get to the purpose of the previous two publications \u2013 the discrete optimization algorithm.<\/p>\n<p><i>The article was prepared by<br \/>\nRoman Shangin, a programmer in the project department,<br \/>\nFirst Bit Company, Chelyabinsk<\/i><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463481\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0440\u0435\u0448\u0430\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u0441\u043a\u043b\u0430\u0434\u0435 \u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u00ab\u0441\u0442\u0440\u043e\u0438\u043b\u0438\u00bb \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u043e \u0442\u043e\u043c \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043c\u044b \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 \u0431\u0438\u0437\u043d\u0435\u0441\u0435 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27819,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-37108","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/news\/diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0434\u043b\u044f WMS: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0436\u0430\u0442\u0438\u044f \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/news\/diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Discrete Mathematics for WMS: The Algorithm for Compressing Products in Cells (Part 1) | ProHoster","description":"In the article we.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/news\/diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0434\u043b\u044f WMS: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0436\u0430\u0442\u0438\u044f \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster","og:description":"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b.","og:url":"https:\/\/prohoster.info\/en\/blog\/news\/diskretnaya-matematika-dlya-wms-algoritm-szhatiya-tovarov-v-yachejkah-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:47+00:00","article:modified_time":"2019-10-31T19:15:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37108","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 06:08:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:33:24","updated":"2026-01-22 06:08:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=37108"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37108\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/27819"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=37108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=37108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=37108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}