“Sufficient and necessary” big M constraint












1












$begingroup$


I have been given a problem to translate into a linear model.



The relevant part to my question is: we're given $ {{ 1,..., m}}$ robots to work on ${ 1,...,n } $ products




  • each robot $i$ takes time $a_{ij}$ to complete his task on product $j$

  • each robot $i$ has a life time $b_i$

  • if the robot $j$ is employed in producing $j$ we'll incur in a cost $c_{ij}$

  • each product $j$ can be sold at a price of $p_j$

  • a net income of $B$ must be achieved


The task is to make the production uniform (i.e. maximizing the least produced product).



Now, calling $x_{ij} in mathbb{R}^+ cup{0}$ the amount of $j$ produced by $i$ and $y_{ij} in { 0,1 } $ the variable indicating "$x_{ij}>0$" this is what I've come up with:



$max v$



$text{s.t.}:$





  • $v leq x_{ij}$ $forall (i,j) $, to ensure $v$ is the minimum


  • $sum _j a_{ij} x_{ij} leq b_i$ $forall i $, to guarantee that each robot's capacity is not exceeded


  • $sum_jp_jsum_ix_{ij}-sum_{i,j}c_{ij} y_{ij} geq B$, minimum net income


  • $x_{ij} leq frac{b_i}{a_{ij}} y_{ij} $ $forall (i,j) $, to translate $x_{ij} > 0 implies y_{ij}=1$

  • *


where $v in mathbb{R}^+ cup {0} $



Now, instead of * I'd like to include a constraint for which $x_{ij} =0 implies y_{ij}=0$. In the solutions I've been provided with this is not included, and I'm wondering why: if * is not present then $y_{ij} = 1 $ $wedge $ $x_{ij}=0$ would be admissible, and we could be paying more than we're actually paying.



Why is it correct to formulate the model without * ?



Thanks in advance!










share|cite|improve this question









$endgroup$

















    1












    $begingroup$


    I have been given a problem to translate into a linear model.



    The relevant part to my question is: we're given $ {{ 1,..., m}}$ robots to work on ${ 1,...,n } $ products




    • each robot $i$ takes time $a_{ij}$ to complete his task on product $j$

    • each robot $i$ has a life time $b_i$

    • if the robot $j$ is employed in producing $j$ we'll incur in a cost $c_{ij}$

    • each product $j$ can be sold at a price of $p_j$

    • a net income of $B$ must be achieved


    The task is to make the production uniform (i.e. maximizing the least produced product).



    Now, calling $x_{ij} in mathbb{R}^+ cup{0}$ the amount of $j$ produced by $i$ and $y_{ij} in { 0,1 } $ the variable indicating "$x_{ij}>0$" this is what I've come up with:



    $max v$



    $text{s.t.}:$





    • $v leq x_{ij}$ $forall (i,j) $, to ensure $v$ is the minimum


    • $sum _j a_{ij} x_{ij} leq b_i$ $forall i $, to guarantee that each robot's capacity is not exceeded


    • $sum_jp_jsum_ix_{ij}-sum_{i,j}c_{ij} y_{ij} geq B$, minimum net income


    • $x_{ij} leq frac{b_i}{a_{ij}} y_{ij} $ $forall (i,j) $, to translate $x_{ij} > 0 implies y_{ij}=1$

    • *


    where $v in mathbb{R}^+ cup {0} $



    Now, instead of * I'd like to include a constraint for which $x_{ij} =0 implies y_{ij}=0$. In the solutions I've been provided with this is not included, and I'm wondering why: if * is not present then $y_{ij} = 1 $ $wedge $ $x_{ij}=0$ would be admissible, and we could be paying more than we're actually paying.



    Why is it correct to formulate the model without * ?



    Thanks in advance!










    share|cite|improve this question









    $endgroup$















      1












      1








      1





      $begingroup$


      I have been given a problem to translate into a linear model.



      The relevant part to my question is: we're given $ {{ 1,..., m}}$ robots to work on ${ 1,...,n } $ products




      • each robot $i$ takes time $a_{ij}$ to complete his task on product $j$

      • each robot $i$ has a life time $b_i$

      • if the robot $j$ is employed in producing $j$ we'll incur in a cost $c_{ij}$

      • each product $j$ can be sold at a price of $p_j$

      • a net income of $B$ must be achieved


      The task is to make the production uniform (i.e. maximizing the least produced product).



      Now, calling $x_{ij} in mathbb{R}^+ cup{0}$ the amount of $j$ produced by $i$ and $y_{ij} in { 0,1 } $ the variable indicating "$x_{ij}>0$" this is what I've come up with:



      $max v$



      $text{s.t.}:$





      • $v leq x_{ij}$ $forall (i,j) $, to ensure $v$ is the minimum


      • $sum _j a_{ij} x_{ij} leq b_i$ $forall i $, to guarantee that each robot's capacity is not exceeded


      • $sum_jp_jsum_ix_{ij}-sum_{i,j}c_{ij} y_{ij} geq B$, minimum net income


      • $x_{ij} leq frac{b_i}{a_{ij}} y_{ij} $ $forall (i,j) $, to translate $x_{ij} > 0 implies y_{ij}=1$

      • *


      where $v in mathbb{R}^+ cup {0} $



      Now, instead of * I'd like to include a constraint for which $x_{ij} =0 implies y_{ij}=0$. In the solutions I've been provided with this is not included, and I'm wondering why: if * is not present then $y_{ij} = 1 $ $wedge $ $x_{ij}=0$ would be admissible, and we could be paying more than we're actually paying.



      Why is it correct to formulate the model without * ?



      Thanks in advance!










      share|cite|improve this question









      $endgroup$




      I have been given a problem to translate into a linear model.



      The relevant part to my question is: we're given $ {{ 1,..., m}}$ robots to work on ${ 1,...,n } $ products




      • each robot $i$ takes time $a_{ij}$ to complete his task on product $j$

      • each robot $i$ has a life time $b_i$

      • if the robot $j$ is employed in producing $j$ we'll incur in a cost $c_{ij}$

      • each product $j$ can be sold at a price of $p_j$

      • a net income of $B$ must be achieved


      The task is to make the production uniform (i.e. maximizing the least produced product).



      Now, calling $x_{ij} in mathbb{R}^+ cup{0}$ the amount of $j$ produced by $i$ and $y_{ij} in { 0,1 } $ the variable indicating "$x_{ij}>0$" this is what I've come up with:



      $max v$



      $text{s.t.}:$





      • $v leq x_{ij}$ $forall (i,j) $, to ensure $v$ is the minimum


      • $sum _j a_{ij} x_{ij} leq b_i$ $forall i $, to guarantee that each robot's capacity is not exceeded


      • $sum_jp_jsum_ix_{ij}-sum_{i,j}c_{ij} y_{ij} geq B$, minimum net income


      • $x_{ij} leq frac{b_i}{a_{ij}} y_{ij} $ $forall (i,j) $, to translate $x_{ij} > 0 implies y_{ij}=1$

      • *


      where $v in mathbb{R}^+ cup {0} $



      Now, instead of * I'd like to include a constraint for which $x_{ij} =0 implies y_{ij}=0$. In the solutions I've been provided with this is not included, and I'm wondering why: if * is not present then $y_{ij} = 1 $ $wedge $ $x_{ij}=0$ would be admissible, and we could be paying more than we're actually paying.



      Why is it correct to formulate the model without * ?



      Thanks in advance!







      operations-research






      share|cite|improve this question













      share|cite|improve this question











      share|cite|improve this question




      share|cite|improve this question










      asked Dec 22 '18 at 20:52









      LeonardoLeonardo

      3339




      3339






















          1 Answer
          1






          active

          oldest

          votes


















          0












          $begingroup$

          The fundamental issue is that you have a secondary criterion (minimize cost, or maximize net income, or at least don't spend money you don't need to) that is not incorporated in the objective function. If the objective function contained a penalty term for spending, then you would automatically get $y_{ij}=0$ whenever $x_{ij}=0$.



          As it stands, the model without * is correct in the sense that, given an optimal solution with gratuitous spending, you can manually change $y_{ij}$ to zero when $x_{ij}$ is zero and get another solution that is both feasible and optimal in the model (but without the gratuitous spending). To enforce this in a constraint, you would need in effect to declare a minimum production level (call it $L_{ij}$) for each combination of robot and product when the robot does in fact produce the product. Constraints * would then be $x_{ij} ge L_{ij} y_{ij},forall (i,j).$ In a real-world production problem, a constraint like this would be perfectly reasonable from a practical perspective (we're not going to turn the robot on / use operator time / whatever) to make a tiny amount of product (if a tiny amount of product even makes sense, which for discrete products like television sets or metal stampings it clearly does not).






          share|cite|improve this answer









          $endgroup$














            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "69"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            noCode: true, onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3049839%2fsufficient-and-necessary-big-m-constraint%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0












            $begingroup$

            The fundamental issue is that you have a secondary criterion (minimize cost, or maximize net income, or at least don't spend money you don't need to) that is not incorporated in the objective function. If the objective function contained a penalty term for spending, then you would automatically get $y_{ij}=0$ whenever $x_{ij}=0$.



            As it stands, the model without * is correct in the sense that, given an optimal solution with gratuitous spending, you can manually change $y_{ij}$ to zero when $x_{ij}$ is zero and get another solution that is both feasible and optimal in the model (but without the gratuitous spending). To enforce this in a constraint, you would need in effect to declare a minimum production level (call it $L_{ij}$) for each combination of robot and product when the robot does in fact produce the product. Constraints * would then be $x_{ij} ge L_{ij} y_{ij},forall (i,j).$ In a real-world production problem, a constraint like this would be perfectly reasonable from a practical perspective (we're not going to turn the robot on / use operator time / whatever) to make a tiny amount of product (if a tiny amount of product even makes sense, which for discrete products like television sets or metal stampings it clearly does not).






            share|cite|improve this answer









            $endgroup$


















              0












              $begingroup$

              The fundamental issue is that you have a secondary criterion (minimize cost, or maximize net income, or at least don't spend money you don't need to) that is not incorporated in the objective function. If the objective function contained a penalty term for spending, then you would automatically get $y_{ij}=0$ whenever $x_{ij}=0$.



              As it stands, the model without * is correct in the sense that, given an optimal solution with gratuitous spending, you can manually change $y_{ij}$ to zero when $x_{ij}$ is zero and get another solution that is both feasible and optimal in the model (but without the gratuitous spending). To enforce this in a constraint, you would need in effect to declare a minimum production level (call it $L_{ij}$) for each combination of robot and product when the robot does in fact produce the product. Constraints * would then be $x_{ij} ge L_{ij} y_{ij},forall (i,j).$ In a real-world production problem, a constraint like this would be perfectly reasonable from a practical perspective (we're not going to turn the robot on / use operator time / whatever) to make a tiny amount of product (if a tiny amount of product even makes sense, which for discrete products like television sets or metal stampings it clearly does not).






              share|cite|improve this answer









              $endgroup$
















                0












                0








                0





                $begingroup$

                The fundamental issue is that you have a secondary criterion (minimize cost, or maximize net income, or at least don't spend money you don't need to) that is not incorporated in the objective function. If the objective function contained a penalty term for spending, then you would automatically get $y_{ij}=0$ whenever $x_{ij}=0$.



                As it stands, the model without * is correct in the sense that, given an optimal solution with gratuitous spending, you can manually change $y_{ij}$ to zero when $x_{ij}$ is zero and get another solution that is both feasible and optimal in the model (but without the gratuitous spending). To enforce this in a constraint, you would need in effect to declare a minimum production level (call it $L_{ij}$) for each combination of robot and product when the robot does in fact produce the product. Constraints * would then be $x_{ij} ge L_{ij} y_{ij},forall (i,j).$ In a real-world production problem, a constraint like this would be perfectly reasonable from a practical perspective (we're not going to turn the robot on / use operator time / whatever) to make a tiny amount of product (if a tiny amount of product even makes sense, which for discrete products like television sets or metal stampings it clearly does not).






                share|cite|improve this answer









                $endgroup$



                The fundamental issue is that you have a secondary criterion (minimize cost, or maximize net income, or at least don't spend money you don't need to) that is not incorporated in the objective function. If the objective function contained a penalty term for spending, then you would automatically get $y_{ij}=0$ whenever $x_{ij}=0$.



                As it stands, the model without * is correct in the sense that, given an optimal solution with gratuitous spending, you can manually change $y_{ij}$ to zero when $x_{ij}$ is zero and get another solution that is both feasible and optimal in the model (but without the gratuitous spending). To enforce this in a constraint, you would need in effect to declare a minimum production level (call it $L_{ij}$) for each combination of robot and product when the robot does in fact produce the product. Constraints * would then be $x_{ij} ge L_{ij} y_{ij},forall (i,j).$ In a real-world production problem, a constraint like this would be perfectly reasonable from a practical perspective (we're not going to turn the robot on / use operator time / whatever) to make a tiny amount of product (if a tiny amount of product even makes sense, which for discrete products like television sets or metal stampings it clearly does not).







                share|cite|improve this answer












                share|cite|improve this answer



                share|cite|improve this answer










                answered Dec 24 '18 at 3:49









                prubinprubin

                1,695125




                1,695125






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Mathematics Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3049839%2fsufficient-and-necessary-big-m-constraint%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Plaza Victoria

                    Puebla de Zaragoza

                    Musa