“Sufficient and necessary” big M constraint
$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!
operations-research
$endgroup$
add a comment |
$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!
operations-research
$endgroup$
add a comment |
$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!
operations-research
$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
operations-research
asked Dec 22 '18 at 20:52
LeonardoLeonardo
3339
3339
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$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).
$endgroup$
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
$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).
$endgroup$
add a comment |
$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).
$endgroup$
add a comment |
$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).
$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).
answered Dec 24 '18 at 3:49
prubinprubin
1,695125
1,695125
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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