[Coin-symphony] How to enforce "at least one variable is zero"
    Michael Hennebry 
    hennebry at web.cs.ndsu.NoDak.edu
       
    Thu Jan  3 17:36:51 EST 2008
    
    
  
On Thu, 3 Jan 2008, Mark Williams wrote:
> I need a constraint of the form "at least one of these (real valued, >=0) variables is zero".
>
> Initially, I thought I could use "user_is_feasible", "user_shall_we_branch" and "user_select_candidates". But it looks like this kind of branching (where each child constrains a different variable) is not supported.
You will need to do something nonlinear.
The condition allows (1, 0) and (0, 1), but not (0.5, 0.5).
> I realize I can do this by creating a parallel set of boolean variables, constraining the sum of those variables to be one, and then adding constraints of the form Vi <= M - M*bi (for suitably large M). But this approach appears to run into severe difficulties (very high runtimes for relatively small problems).
Not quite:
Vi <= Mi*bi
SUM (1-bi) >= 1
 i
The trick is to pick the smallest M's that will work.
If you work at it, you only need ceil(lg(n)) binaries,
where n is the number of variables.
I don't know that that would be an improvement.
-- 
Michael   hennebry at web.cs.ndsu.NoDak.edu
"I AM DEATH, NOT TAXES.  *I* TURN UP ONLY ONCE."  --  Death
    
    
More information about the Symphony
mailing list