I would like to scale my linear/integer program and also mixed-integer program using the equilibrium scaling method. I have worked on two research papers and one research book. However, they did the same thing in different ways (in a somewhat conflicting manner) so I would like to learn what is the correct way to scale linear/integer program or/and mixed-integer program.
My observations so far: The book creates a row and column scaling factors first. To find the row scaling factor, at first it find biggest elements in all rows and then it becomes divisor in a following manner: [ 1/max(first row); 1/max (second row); 1/max(third row). To find column scaling factor it does the same thing for the columns. Finally, it multiplies matrix A first with row scaling factor and then column scaling factors and creates scaled A. It multiplies b with row scaling factor and creates scaled b. It multiplies c with column scaling factor and creates scaled c. I think the following example from the book explains everything.
Therefore, there is one 3x1 column scaling factor matrix and one 4x1 column scaling factor matrix for a 3x4 A matrix.
On the other hand, both of the articles mention R and C diagonal matrices that are used in the scaling LP/IPs. The first article also differentiates MIP scaling from IP/LP scaling. It says "Note that for a for MIP, integer columns are not scaled..." Does it mean numbers that are integers do not enter scaling or does it mean columns that represent integers in MIP do not enter scaling? A full description from the first article could be seen below.
The paragraphs continue with the statement that: "...ST first scales rows by dividing each row by the absolute value of the nearest power of two of its largest element and then scales columns in the same fashion."
The second article is a very old one. Actually, it is one of the oldest papers about the Scaling of linear programs. In a similar manner, it mentions R and C diagonal scaling factors. You can see the way it describes;
To sum up, I have been working on scaling applications in C++, so far I have applied the Equilibrium scaling method in a way it is described in the book. However, the articles confused me with diagonal matrices, the reason is how R and C are created is not explained properly in both of those articles. My question is if these diagonal matrices play role in the scaling, How can I create these diagonal R and C matrices from the A matrix given to me. Let's assume our A matrix is the one given above in the picture.
If they do not play role in equilibrium scaling, can I just assume the way the book uses is the correct and proper way to conduct equilibrium scaling?
All three sources in MLA format could be seen below.
The Book: Ploskas, Nikolaos, and Nikolaos Samaas. Linear Programming Using MATLAB®. Vol. 127. Switzerland: Springer, 2017.
First Article: Berthold, Timo, and Gregor Hendel. "Learning to scale mixed-integer programs." Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 5. 2021.
Second Article: Tomlin, John A. "On scaling linear programming problems." Computational practice in mathematical programming. Springer, Berlin, Heidelberg, 1975. 146-166.
EDIT: If you are saying they are the same thing, I would be more than welcome if you can prove your point.