MINLP alternatives

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
0
down vote

favorite












I have a problem in which I need to allocate an amount of a service and each allocation consumes time.



The mathematical formulation would be something like:



$$
min: f=sum_s^Ssum_h^HAmount_s, h cdot Used_s, h cdot Price_s
$$
st:
$$
sum_h^HUsed_s, h cdot Time_s leq Max_usage_time_s quad forall s in S
$$



$Used_s, h$ is a integer variable that determines if the service $s$ is used in the hour $h$.



$Amount_s, h$ is the amount of service $s$ used in the hour $h$.



In the ideal situation, this problem requires the use of a Non-Linear Mixed Integer programming library.



However I don't have the budget to spend in Gurobi or alike to solve this.



Hence, which are reasonable methods that can be used for this problem instead of MINLP?



And if you know of open source implementations better.







share|cite|improve this question




















  • Most commercial solvers have free trial licenses with no size restrictions. If you only need to solve the problem few times go for that. Otherwise look for open source solvers projects.coin-or.org/Bonmin or projects.coin-or.org/Cbc depending on whether you solve a MILP or MINLP.
    – AndreaCassioli
    May 3 '17 at 9:54










  • Have a look at sourceforge.net/directory/os:windows/…
    – Claude Leibovici
    May 3 '17 at 9:56














up vote
0
down vote

favorite












I have a problem in which I need to allocate an amount of a service and each allocation consumes time.



The mathematical formulation would be something like:



$$
min: f=sum_s^Ssum_h^HAmount_s, h cdot Used_s, h cdot Price_s
$$
st:
$$
sum_h^HUsed_s, h cdot Time_s leq Max_usage_time_s quad forall s in S
$$



$Used_s, h$ is a integer variable that determines if the service $s$ is used in the hour $h$.



$Amount_s, h$ is the amount of service $s$ used in the hour $h$.



In the ideal situation, this problem requires the use of a Non-Linear Mixed Integer programming library.



However I don't have the budget to spend in Gurobi or alike to solve this.



Hence, which are reasonable methods that can be used for this problem instead of MINLP?



And if you know of open source implementations better.







share|cite|improve this question




















  • Most commercial solvers have free trial licenses with no size restrictions. If you only need to solve the problem few times go for that. Otherwise look for open source solvers projects.coin-or.org/Bonmin or projects.coin-or.org/Cbc depending on whether you solve a MILP or MINLP.
    – AndreaCassioli
    May 3 '17 at 9:54










  • Have a look at sourceforge.net/directory/os:windows/…
    – Claude Leibovici
    May 3 '17 at 9:56












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a problem in which I need to allocate an amount of a service and each allocation consumes time.



The mathematical formulation would be something like:



$$
min: f=sum_s^Ssum_h^HAmount_s, h cdot Used_s, h cdot Price_s
$$
st:
$$
sum_h^HUsed_s, h cdot Time_s leq Max_usage_time_s quad forall s in S
$$



$Used_s, h$ is a integer variable that determines if the service $s$ is used in the hour $h$.



$Amount_s, h$ is the amount of service $s$ used in the hour $h$.



In the ideal situation, this problem requires the use of a Non-Linear Mixed Integer programming library.



However I don't have the budget to spend in Gurobi or alike to solve this.



Hence, which are reasonable methods that can be used for this problem instead of MINLP?



And if you know of open source implementations better.







share|cite|improve this question












I have a problem in which I need to allocate an amount of a service and each allocation consumes time.



The mathematical formulation would be something like:



$$
min: f=sum_s^Ssum_h^HAmount_s, h cdot Used_s, h cdot Price_s
$$
st:
$$
sum_h^HUsed_s, h cdot Time_s leq Max_usage_time_s quad forall s in S
$$



$Used_s, h$ is a integer variable that determines if the service $s$ is used in the hour $h$.



$Amount_s, h$ is the amount of service $s$ used in the hour $h$.



In the ideal situation, this problem requires the use of a Non-Linear Mixed Integer programming library.



However I don't have the budget to spend in Gurobi or alike to solve this.



Hence, which are reasonable methods that can be used for this problem instead of MINLP?



And if you know of open source implementations better.









share|cite|improve this question











share|cite|improve this question




share|cite|improve this question










asked May 3 '17 at 9:17









Santi Peñate-Vera

1049




1049











  • Most commercial solvers have free trial licenses with no size restrictions. If you only need to solve the problem few times go for that. Otherwise look for open source solvers projects.coin-or.org/Bonmin or projects.coin-or.org/Cbc depending on whether you solve a MILP or MINLP.
    – AndreaCassioli
    May 3 '17 at 9:54










  • Have a look at sourceforge.net/directory/os:windows/…
    – Claude Leibovici
    May 3 '17 at 9:56
















  • Most commercial solvers have free trial licenses with no size restrictions. If you only need to solve the problem few times go for that. Otherwise look for open source solvers projects.coin-or.org/Bonmin or projects.coin-or.org/Cbc depending on whether you solve a MILP or MINLP.
    – AndreaCassioli
    May 3 '17 at 9:54










  • Have a look at sourceforge.net/directory/os:windows/…
    – Claude Leibovici
    May 3 '17 at 9:56















Most commercial solvers have free trial licenses with no size restrictions. If you only need to solve the problem few times go for that. Otherwise look for open source solvers projects.coin-or.org/Bonmin or projects.coin-or.org/Cbc depending on whether you solve a MILP or MINLP.
– AndreaCassioli
May 3 '17 at 9:54




Most commercial solvers have free trial licenses with no size restrictions. If you only need to solve the problem few times go for that. Otherwise look for open source solvers projects.coin-or.org/Bonmin or projects.coin-or.org/Cbc depending on whether you solve a MILP or MINLP.
– AndreaCassioli
May 3 '17 at 9:54












Have a look at sourceforge.net/directory/os:windows/…
– Claude Leibovici
May 3 '17 at 9:56




Have a look at sourceforge.net/directory/os:windows/…
– Claude Leibovici
May 3 '17 at 9:56










1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










I assume that the variable Used$_s,h$ is binary and determines if the service $s$ is used in hour $h$ if Used$_s,h=1$ and Used$_s,h=0$ otherwise.



If you have an upper bound to the variable Amount$_s,h$ then you can linearize the expression Amount$_s,hcdot$ Used$_s,h$ in the objective function to turn your problem into an LP which you can then solve with an ordinary LP-solver (by the cost of introducing additional variables).



In order to linearize the expression, let $A$ denote the upper bound to Amount$_s,h$ for all $s$ and $h$. Then you introduce a new variable $z_s,h$ and add the following constraints:



$$z_s,h leq A cdot Used_s,h$$
$$z_s,h leq Amount_s,h$$
$$z_s,h geq Amount_s,h - (1-Used_s,h)A $$
$$z_s,h geq 0$$



As objective function you now minimize



$$min: f=sum_s^Ssum_h^Hz_s, h cdot Price_s$$
If $Used_s,h=0$ for a given pair $(s,h)$, it follows from the first and fourth constraint that $z_s,h=0$. If $Used_s,h=1$, then constraints number 2 and 3 will force $z_s,h= Amount_s,h$.



Hence, you now have a linear model.






share|cite|improve this answer




















    Your Answer




    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    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',
    convertImagesToLinks: true,
    noModals: false,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    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%2f2263575%2fminlp-alternatives%23new-answer', 'question_page');

    );

    Post as a guest






























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    I assume that the variable Used$_s,h$ is binary and determines if the service $s$ is used in hour $h$ if Used$_s,h=1$ and Used$_s,h=0$ otherwise.



    If you have an upper bound to the variable Amount$_s,h$ then you can linearize the expression Amount$_s,hcdot$ Used$_s,h$ in the objective function to turn your problem into an LP which you can then solve with an ordinary LP-solver (by the cost of introducing additional variables).



    In order to linearize the expression, let $A$ denote the upper bound to Amount$_s,h$ for all $s$ and $h$. Then you introduce a new variable $z_s,h$ and add the following constraints:



    $$z_s,h leq A cdot Used_s,h$$
    $$z_s,h leq Amount_s,h$$
    $$z_s,h geq Amount_s,h - (1-Used_s,h)A $$
    $$z_s,h geq 0$$



    As objective function you now minimize



    $$min: f=sum_s^Ssum_h^Hz_s, h cdot Price_s$$
    If $Used_s,h=0$ for a given pair $(s,h)$, it follows from the first and fourth constraint that $z_s,h=0$. If $Used_s,h=1$, then constraints number 2 and 3 will force $z_s,h= Amount_s,h$.



    Hence, you now have a linear model.






    share|cite|improve this answer
























      up vote
      1
      down vote



      accepted










      I assume that the variable Used$_s,h$ is binary and determines if the service $s$ is used in hour $h$ if Used$_s,h=1$ and Used$_s,h=0$ otherwise.



      If you have an upper bound to the variable Amount$_s,h$ then you can linearize the expression Amount$_s,hcdot$ Used$_s,h$ in the objective function to turn your problem into an LP which you can then solve with an ordinary LP-solver (by the cost of introducing additional variables).



      In order to linearize the expression, let $A$ denote the upper bound to Amount$_s,h$ for all $s$ and $h$. Then you introduce a new variable $z_s,h$ and add the following constraints:



      $$z_s,h leq A cdot Used_s,h$$
      $$z_s,h leq Amount_s,h$$
      $$z_s,h geq Amount_s,h - (1-Used_s,h)A $$
      $$z_s,h geq 0$$



      As objective function you now minimize



      $$min: f=sum_s^Ssum_h^Hz_s, h cdot Price_s$$
      If $Used_s,h=0$ for a given pair $(s,h)$, it follows from the first and fourth constraint that $z_s,h=0$. If $Used_s,h=1$, then constraints number 2 and 3 will force $z_s,h= Amount_s,h$.



      Hence, you now have a linear model.






      share|cite|improve this answer






















        up vote
        1
        down vote



        accepted







        up vote
        1
        down vote



        accepted






        I assume that the variable Used$_s,h$ is binary and determines if the service $s$ is used in hour $h$ if Used$_s,h=1$ and Used$_s,h=0$ otherwise.



        If you have an upper bound to the variable Amount$_s,h$ then you can linearize the expression Amount$_s,hcdot$ Used$_s,h$ in the objective function to turn your problem into an LP which you can then solve with an ordinary LP-solver (by the cost of introducing additional variables).



        In order to linearize the expression, let $A$ denote the upper bound to Amount$_s,h$ for all $s$ and $h$. Then you introduce a new variable $z_s,h$ and add the following constraints:



        $$z_s,h leq A cdot Used_s,h$$
        $$z_s,h leq Amount_s,h$$
        $$z_s,h geq Amount_s,h - (1-Used_s,h)A $$
        $$z_s,h geq 0$$



        As objective function you now minimize



        $$min: f=sum_s^Ssum_h^Hz_s, h cdot Price_s$$
        If $Used_s,h=0$ for a given pair $(s,h)$, it follows from the first and fourth constraint that $z_s,h=0$. If $Used_s,h=1$, then constraints number 2 and 3 will force $z_s,h= Amount_s,h$.



        Hence, you now have a linear model.






        share|cite|improve this answer












        I assume that the variable Used$_s,h$ is binary and determines if the service $s$ is used in hour $h$ if Used$_s,h=1$ and Used$_s,h=0$ otherwise.



        If you have an upper bound to the variable Amount$_s,h$ then you can linearize the expression Amount$_s,hcdot$ Used$_s,h$ in the objective function to turn your problem into an LP which you can then solve with an ordinary LP-solver (by the cost of introducing additional variables).



        In order to linearize the expression, let $A$ denote the upper bound to Amount$_s,h$ for all $s$ and $h$. Then you introduce a new variable $z_s,h$ and add the following constraints:



        $$z_s,h leq A cdot Used_s,h$$
        $$z_s,h leq Amount_s,h$$
        $$z_s,h geq Amount_s,h - (1-Used_s,h)A $$
        $$z_s,h geq 0$$



        As objective function you now minimize



        $$min: f=sum_s^Ssum_h^Hz_s, h cdot Price_s$$
        If $Used_s,h=0$ for a given pair $(s,h)$, it follows from the first and fourth constraint that $z_s,h=0$. If $Used_s,h=1$, then constraints number 2 and 3 will force $z_s,h= Amount_s,h$.



        Hence, you now have a linear model.







        share|cite|improve this answer












        share|cite|improve this answer



        share|cite|improve this answer










        answered Aug 28 at 13:14









        YukiJ

        1,6742624




        1,6742624



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f2263575%2fminlp-alternatives%23new-answer', 'question_page');

            );

            Post as a guest













































































            這個網誌中的熱門文章

            How to combine Bézier curves to a surface?

            Carbon dioxide

            Why am i infinitely getting the same tweet with the Twitter Search API?