How to Define a Constraint Using If-Then-Else for Vegetable Growth?

  • Thread starter Thread starter Alexx1
  • Start date Start date
  • Tags Tags
    Construction
Alexx1
Messages
86
Reaction score
0
How can we define a constraint saying:

if b is larger than zero then y has to equal 1
if b is equal to zero then y has to equal 0

?

It concerns the following problem:
b[k] = amount of vegetable i growing on patch k
y[k] = 1 if vegetable i is grown on patch k
= 0 otherwise

So we want to say that if the amount of vegetable i on patch k is larger than zero (i.e. b[k] > 0), vegetable i must be assigned to patch k (i.e. y[k] = 1)
I was thinking that it could be something like that:

for all i
sum(k) b[k]*y[k] = b[k]

But I don't know if this is correct or not, since you could cancel out both terms b[k]

What do you guys think?

Kind regards,
Alex
 
Last edited:
Physics news on Phys.org
Hi Alexx1!

Perhaps like this?
y[k] = (b[k] > 0);
 
If you know that b[k] will never be negative, you have y[k] = sgn( b[k] ).
 
The thing is I need a constraint to use in the program
IBM ILOG CPLEX Optimization Studio

None of both constraints is accepted in CPLEX
 
According to Wikipedia's entry on OPL (the programming lanuage used in the program you mention), it does support an IF-THEN-ELSE construct. Why don't you use that?
 
Michael Redei said:
According to Wikipedia's entry on OPL (the programming lanuage used in the program you mention), it does support an IF-THEN-ELSE construct. Why don't you use that?

I would prefer stating it in a constraint only using =/>=/<=/</>
Do you know an alternative?
 
Here's some examples from IBM's manual on OPL:
Code:
int value = ...; 
int signValue = (value>0) ? 1 : (value<0) ? -1 : 0;
int absValue = (value>=0) ? value : -value;

It seems that OPL supports a "... ? ... : ..." construct. Have you tried that? E.g.

y[k] = (b[k] > 0) ? 1 : 0;
 
That is a ternary operator like the one in the C language:
Code:
                   if()               then             else
int variable=(boolean statement) ? [when true] : [when false];

The example on line two above "concatenates" or nests operators
Code:
int signValue = (value>0) ? 1 :[/color] (value<0) ? -1 : 0;[/color]

Maybe that will help...
 

Similar threads

Replies
6
Views
1K
Replies
12
Views
2K
Replies
17
Views
989
Replies
2
Views
1K
Replies
0
Views
1K
Replies
6
Views
2K
Replies
8
Views
2K
Back
Top