help-glpk
[Top][All Lists]

## 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?

```