Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only

dual variables (MILP problem)

  • 1.  dual variables (MILP problem)

    Posted Fri November 21, 2008 03:48 PM

    Originally posted by: SystemAdmin


    [frenky_ser said:]

    Good afternoon! (Sorry for my English)
    Your help is very necessary to me!
    According to users manual(ILOG CPLEX) for solution of the MILP problem I take following steps:

    1.Create problem
    [problemPtr, env, status] = calllib(Params('CplexLibraryName'), 'CPXcreateprob', EnvCPLEX, 0, 'testMilpProblem')

    2.Set data
    status = calllib(Params('CplexLibraryName'), 'CPXcopylp', EnvCPLEX, problemPtr, size(A,2), size(A,1), fn_CPLEX_Consts('CPX_MIN'),...
                                full(f), full(b), sense, matbeg, matcnt, matind, matval, full(lb), full(ub), []);

    3.Change problem type
    status = calllib(Params('CplexLibraryName'), 'CPXchgprobtype', EnvCPLEX, problemPtr, fn_CPLEX_Consts('CPXPROB_MILP'));

    4.Change variables type
    status = calllib(Params('CplexLibraryName'), 'CPXcopyctype', EnvCPLEX, problemPtr, var_type);
    where var_type - array 'IIII...'. This array elements count = variables count

    5. Optimise (CPXmipopt)
    status = calllib(Params('CplexLibraryName'), 'CPXmipopt', EnvCPLEX, problemPtr);

    6. Solution
                numcols = calllib(Params('CplexLibraryName'), 'CPXgetnumcols', EnvCPLEX, problemPtr);
                numrows = calllib(Params('CplexLibraryName'), 'CPXgetnumrows', EnvCPLEX, problemPtr);

                %  Оптимальное решение
                pxmin = libpointer('doublePtr', zeros([numcols 1]));
                [status, env, envProblem, xmin] = calllib(Params('CplexLibraryName'), 'CPXgetx', EnvCPLEX, problemPtr, pxmin, 0, numcols - 1);
    Solution correct, all is excellent!!! :)))

    7. Change problem type (CPXPROB_FIXEDMILP)
    status = calllib(Params('CplexLibraryName'), 'CPXchgprobtype', EnvCPLEX, problemPtr, fn_CPLEX_Consts('CPXPROB_FIXEDMILP'));

    8. Optimise (CPXlpopt or CPXprimopt)
    status = calllib(Params('CplexLibraryName'), 'CPXlpopt', EnvCPLEX, problemPtr);

    9. Get dual parameters
        pdual = libpointer('doublePtr', zeros([numrows 1]));
        [status, env, envProblem, [b]dual[/b]] = calllib(Params('CplexLibraryName'), 'CPXgetpi', EnvCPLEX, problemPtr, pdual, 0, numrows - 1);

    Where parameter  [b]dual[/b] = empty array [0 0 0 ...] [b]ALWAYS:(([/b], even for very simple tasks...Why?

    Thanks

    #CPLEXOptimizers
    #DecisionOptimization