Ignore:
Timestamp:
Dec 16, 2013 9:57:22 AM (6 years ago)
Author:
tkr
Message:

Syncing with trunk at r2006

Location:
stable/1.15/Clp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable/1.15/Clp

  • stable/1.15/Clp/src

  • stable/1.15/Clp/src/ClpMain.cpp

    r1949 r2007  
    4040#include "ClpFactorization.hpp"
    4141#include "CoinTime.hpp"
     42#include "CoinWarmStartBasis.hpp"
    4243#include "ClpSimplex.hpp"
    4344#include "ClpSimplexOther.hpp"
     
    6263#include "AbcDualRowDantzig.hpp"
    6364#endif
    64 //#define COIN_HAS_ASL
    6565#ifdef COIN_HAS_ASL
    6666#include "Clp_ampl.h"
     
    307307                if (returnCode)
    308308                    return returnCode;
     309                if (info.numberBinary+info.numberIntegers+info.numberSos
     310                    &&!info.starts) {
     311                  printf("Unable to handle integer problems\n");
     312                  return 1;
     313                }
    309314                CbcOrClpRead_mode = 2; // so will start with parameters
    310315                // see if log in list (including environment)
     
    323328                    printf("%d rows, %d columns and %d elements\n",
    324329                           info.numberRows, info.numberColumns, info.numberElements);
     330                if (!coinModelStart.model) {
     331                  // linear
    325332                    models->loadProblem(info.numberColumns, info.numberRows, info.starts,
    326333                                        info.rows, info.elements,
    327334                                        info.columnLower, info.columnUpper, info.objective,
    328335                                        info.rowLower, info.rowUpper);
     336                } else {
     337                  // QP
     338                  models->loadProblem(*(coinModelStart.model));
     339                }
    329340                // If we had a solution use it
    330341                if (info.primalSolution) {
     
    10221033                                   try {
    10231034                                        status = model2->initialSolve(solveOptions);
     1035#ifdef COIN_HAS_ASL
     1036                            if (usingAmpl) {
     1037                                double value = model2->getObjValue() * model2->getObjSense();
     1038                                char buf[300];
     1039                                int pos = 0;
     1040                                int iStat = model2->status();
     1041                                if (iStat == 0) {
     1042                                    pos += sprintf(buf + pos, "optimal," );
     1043                                } else if (iStat == 1) {
     1044                                    // infeasible
     1045                                    pos += sprintf(buf + pos, "infeasible,");
     1046                                } else if (iStat == 2) {
     1047                                    // unbounded
     1048                                    pos += sprintf(buf + pos, "unbounded,");
     1049                                } else if (iStat == 3) {
     1050                                    pos += sprintf(buf + pos, "stopped on iterations or time,");
     1051                                } else if (iStat == 4) {
     1052                                    iStat = 7;
     1053                                    pos += sprintf(buf + pos, "stopped on difficulties,");
     1054                                } else if (iStat == 5) {
     1055                                    iStat = 3;
     1056                                    pos += sprintf(buf + pos, "stopped on ctrl-c,");
     1057                                } else if (iStat == 6) {
     1058                                    // bab infeasible
     1059                                    pos += sprintf(buf + pos, "integer infeasible,");
     1060                                    iStat = 1;
     1061                                } else {
     1062                                    pos += sprintf(buf + pos, "status unknown,");
     1063                                    iStat = 6;
     1064                                }
     1065                                info.problemStatus = iStat;
     1066                                info.objValue = value;
     1067                                pos += sprintf(buf + pos, " objective %.*g", ampl_obj_prec(),
     1068                                               value);
     1069                                sprintf(buf + pos, "\n%d iterations",
     1070                                        model2->getIterationCount());
     1071                                free(info.primalSolution);
     1072                                int numberColumns = model2->numberColumns();
     1073                                info.primalSolution = reinterpret_cast<double *> (malloc(numberColumns * sizeof(double)));
     1074                                CoinCopyN(model2->primalColumnSolution(), numberColumns, info.primalSolution);
     1075                                int numberRows = model2->numberRows();
     1076                                free(info.dualSolution);
     1077                                info.dualSolution = reinterpret_cast<double *> (malloc(numberRows * sizeof(double)));
     1078                                CoinCopyN(model2->dualRowSolution(), numberRows, info.dualSolution);
     1079                                CoinWarmStartBasis * basis = model2->getBasis();
     1080                                free(info.rowStatus);
     1081                                info.rowStatus = reinterpret_cast<int *> (malloc(numberRows * sizeof(int)));
     1082                                free(info.columnStatus);
     1083                                info.columnStatus = reinterpret_cast<int *> (malloc(numberColumns * sizeof(int)));
     1084                                // Put basis in
     1085                                int i;
     1086                                // free,basic,ub,lb are 0,1,2,3
     1087                                for (i = 0; i < numberRows; i++) {
     1088                                    CoinWarmStartBasis::Status status = basis->getArtifStatus(i);
     1089                                    info.rowStatus[i] = status;
     1090                                }
     1091                                for (i = 0; i < numberColumns; i++) {
     1092                                    CoinWarmStartBasis::Status status = basis->getStructStatus(i);
     1093                                    info.columnStatus[i] = status;
     1094                                }
     1095                                // put buffer into info
     1096                                strcpy(info.buffer, buf);
     1097                                delete basis;
     1098                            }
     1099#endif
    10241100#ifndef NDEBUG
    10251101                                        // if infeasible check ray
Note: See TracChangeset for help on using the changeset viewer.