[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: Help: Switching between different objective function

**From**: |
Heinrich Schuchardt |

**Subject**: |
Re: Help: Switching between different objective function |

**Date**: |
Thu, 26 Nov 2020 20:30:07 +0100 |

**User-agent**: |
Mozilla/5.0 (X11; Linux aarch64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 |

On 11/26/20 7:55 PM, Manuel Castro wrote:

Hi there,
I am wondering how I can use an if statement to switch between different
objective functions.
For example, how do I represent the following:
If (StatusFlag_X == 1 && StatusFlag_Y == 0) then
minimize cost: sum{i in I, j in J} c[i,j] * x[i,j];
end if
If (StatusFlag_X == 0 && StatusFlag_Y == 1) then
minimize cost: sum{i in I, j in J} c[i,j] * x[i,j] + d[i,j] * Y[i,j];

The line above cannot be valid as the indices for d and Y are not
defined. You forgot the parentheses.

end if

I am assuming StatusFlag_X and StatusFlag_Y are parameters.
The following can be used as template if you have a lot of different
objective functions with complex selection criteria:
minimize cost:
sum{i in {1} : StatusFlag_X == 1 && StatusFlag_Y == 0} 1 *
(sum{i in I, j in J} c[i,j] * x[i,j]) +
sum{i in {1} : StatusFlag_X == 0 && StatusFlag_Y == 1} 1 *
(sum{i in I, j in J} c[i,j] * x[i,j] + d[i,j] * Y[i,j])
In your case this simplifies to:
minimize cost:
sum{i in I, j in J} c[i,j] * x[i,j] +
StatusFlag_Y * sum{i in I, j in J} d[i,j] * Y[i,j]
Best regards
Heinrich

Both are mutually exclusive, i.e. either you do one or the other, i.e.
both objective functions will never be activate at the same time
This is what I used to do in "mosel" language from FICO Xpress (I don't
have a license anymore so I am discovering GLPK[Smile] ). How can I do
this in GLPK language? What's the workaround that we can use for this?
Many thanks in advance for your help. It's really appreciated.
Kind regards,
Manuel.