Search code examples
matlaboptimizationmathematical-optimizationlinear-programmingcplex

Giving priority to some variables in linear programming


I have to optimize an objective using binary integer linear programming, my objective function is:

Maximize f= (c1 * x1) + (c2 * x2) +(c3 * x3) + ... + (c10000 * x10000)
Subject to some constraints

For solving the problem efficiently I want to use some heuristics, according to one of the heuristics, some variables(xi) have more chance to be part of the answer (Xi=1), so my goal is to give priority (preference) to such variables to solve the problem faster than usual way, I know the solution may be sub-optimal but our main concern is time.

So my question are:

  • How to prioritize this variables in the LP model?
  • Can we multiply coefficients of this variables by constant (C>1) in order to increase their priority? or decrease priority of other variables by multiply their coefficients by another constant (D<1)?
  • If we use the approach of question #2, do we have to do that just with objective function coefficients or both of objective function coefficients and constraints coefficients should be altered related to those variables?

  • It should be noted that in the approach of question #2, after solving the LP model, we rollback any of changes in the coefficients according to the solution (Which variables are in the solution).

Thanks in advance


Solution

  • According to CPLEX Performance Tuning for Mixed Integer Programs and Issuing priority orders we can set priority orders to increase or decrease priority of some variables in CPLEX, this approach is as follows:

    options = cplexoptimset('cplex');
    options.mip.ordertype=fsl;
    [x,fval,exitflag,output] = cplexbilp(f, Aineq, bineq, Aeq, beq,[],options);
    

    fsl is priority array for problem variables. Because CPLEX can generate a priority order automatically, based on problem-data characteristics, we can leave the prioritization decision to CPLEX as follows:

    value    branching priority order  
    =====    ========================
    
      0      no automatic priority order will be generated (default)
      1      decreasing cost coefficients among the variables 
      2      increasing bound range among the variables
      3      increasing cost per matrix coefficient count among the variables
    

    After using priorities, my problem is solved, the solution is valid and converging to solution is faster than before!