## If-then-else construction

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[i][k] = amount of vegetable i growing on patch k
y[i][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[i][k] > 0), vegetable i must be assigned to patch k (i.e. y[i][k] = 1)
I was thinking that it could be something like that:

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

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

What do you guys think?

Kind regards,
Alex

 PhysOrg.com science news on PhysOrg.com >> Hong Kong launches first electric taxis>> Morocco to harness the wind in energy hunt>> Galaxy's Ring of Fire
 Recognitions: Homework Help Hi Alexx1! Perhaps like this? y[i][k] = (b[i][k] > 0);
 If you know that b[i][k] will never be negative, you have y[i][k] = sgn( b[i][k] ).

## If-then-else construction

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?

 Quote by Michael Redei 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[i][k] = (b[i][k] > 0) ? 1 : 0;
 Recognitions: Gold Member Science Advisor 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 : (value<0) ? -1 : 0; Maybe that will help....