New Reply

If-then-else construction

 
Share Thread Thread Tools
Dec9-12, 03:51 AM   #1
 

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
PhysOrg
science news on PhysOrg.com

>> Front-row seats to climate change
>> Attacking MRSA with metals from antibacterial clays
>> New formula invented for microscope viewing, substitutes for federally controlled drug
Dec9-12, 05:37 AM   #2
 
Recognitions:
Homework Helper Homework Help
Hi Alexx1!

Perhaps like this?
y[i][k] = (b[i][k] > 0);
 
Dec9-12, 05:53 AM   #3
 
If you know that b[i][k] will never be negative, you have y[i][k] = sgn( b[i][k] ).
 
Dec9-12, 12:24 PM   #4
 

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
 
Dec9-12, 01:03 PM   #5
 
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?
 
Dec10-12, 03:41 AM   #6
 
Quote by Michael Redei View Post
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?
 
Dec10-12, 06:31 AM   #7
 
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;
 
Dec10-12, 09:17 AM   #8
 
Recognitions:
Gold Membership Gold Member
Science Advisor 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....
 
New Reply
Thread Tools


Similar Threads for: If-then-else construction
Thread Forum Replies
Information on construction elevators (construction hoists, buck hoists) General Engineering 0
2D Matrix construction Linear & Abstract Algebra 5
th construction of e General Math 3
the construction of pi General Math 6
Is there a name for this construction? Linear & Abstract Algebra 1