Changeset 307


Ignore:
Timestamp:
Oct 29, 2009 9:06:40 PM (10 years ago)
Author:
bjarni
Message:

Added code to implement CoinLoadPriority?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • stable/1.4/CoinMP/src/CoinMP.cpp

    r306 r307  
    879879                                                                          int* PriorValues, int* BranchDir)
    880880{
    881         return SOLV_CALL_FAILED;
     881        PCOIN pCoin = (PCOIN)hProb;
     882        int *priorVar;
     883        int *priorCbc;
     884        int i,k;
     885
     886        pCoin->PriorCount = PriorCount;
     887        if (PriorIndex)  pCoin->PriorIndex  = (int* )malloc(PriorCount * sizeof(int));
     888        if (PriorValues) pCoin->PriorValues = (int* )malloc(PriorCount * sizeof(int));
     889        if (BranchDir)   pCoin->BranchDir   = (int* )malloc(PriorCount * sizeof(int));
     890        if (pCoin->PriorIndex)  memcpy(pCoin->PriorIndex,  PriorIndex,  PriorCount * sizeof(int));
     891        if (pCoin->PriorValues) memcpy(pCoin->PriorValues, PriorValues, PriorCount * sizeof(int));
     892        if (pCoin->BranchDir)   memcpy(pCoin->BranchDir,   BranchDir,   PriorCount * sizeof(int));
     893
     894        if (!pCoin->SolveAsMIP) {
     895                return SOLV_CALL_FAILED;
     896        }
     897        if (!pCoin->IsInt) {
     898                return SOLV_CALL_FAILED;
     899        }
     900
     901        priorVar = (int *)malloc(pCoin->ColCount * sizeof(int));
     902        if (!priorVar) {
     903                return SOLV_CALL_FAILED;
     904        }
     905        //reset the priorVar
     906        for (i = 0; i < pCoin->ColCount; i++) {
     907                priorVar[i] = 1000;
     908        }
     909        for (i = 0; i < PriorCount; i++) {
     910                if ((PriorIndex[i] < 0) || (PriorIndex[i] >= pCoin->ColCount)) {
     911                        free(priorVar);
     912                        return SOLV_CALL_FAILED;
     913                }
     914                priorVar[PriorIndex[i]] = PriorValues[i];
     915        }
     916        //Create an array to give to cbc
     917        priorCbc = (int *)malloc(pCoin->numInts * sizeof(int));
     918        if (!priorCbc) {
     919                free(priorVar);
     920                return SOLV_CALL_FAILED;
     921        }
     922        k = 0;
     923        for (i = 0; i < pCoin->ColCount; i++) {
     924                if (pCoin->IsInt[i]) {
     925                        priorCbc[k++] = priorVar[i];
     926                }
     927        }
     928        pCoin->cbc->passInPriorities(priorCbc, false);
     929        free(priorCbc);
     930        free(priorVar);
     931        return SOLV_CALL_SUCCESS;
    882932}
    883933
Note: See TracChangeset for help on using the changeset viewer.