Ignore:
Timestamp:
Dec 4, 2006 1:21:16 PM (14 years ago)
Author:
forrest
Message:

nonlinear

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/devel/Cbc/src/Cbc_ampl.cpp

    r492 r496  
    269269}
    270270int
    271 readAmpl(ampl_info * info, int argc, char **argv)
     271readAmpl(ampl_info * info, int argc, char **argv, void ** coinModel)
    272272{
    273273  char *stub;
     
    286286  double * rowUpper;
    287287  char ** saveArgv=argv;
     288  char fileName[1000];
     289  if (argc>1)
     290    strcpy(fileName,argv[1]);
     291  else
     292    fileName[0]='\0';
    288293  int saveArgc = argc;
    289294  memset(info,0,sizeof(ampl_info));
     
    314319  csd = suf_iput("sstatus", ASL_Sufkind_var, info->columnStatus);
    315320  rsd = suf_iput("sstatus", ASL_Sufkind_con, info->rowStatus);
    316   /* read linear model*/
    317   f_read(nl,0);
    318   // see if any sos
    319   if (true) {
    320     char *sostype;
    321     int nsosnz, *sosbeg, *sosind, * sospri;
    322     double *sosref;
    323     int nsos;
    324     int i = ASL_suf_sos_explict_free;
    325     int copri[2], **p_sospri;
    326     copri[0] = 0;
    327     copri[1] = 0;
    328     p_sospri = &sospri;
    329     nsos = suf_sos(i, &nsosnz, &sostype, p_sospri, copri,
    330                                 &sosbeg, &sosind, &sosref);
    331     if (nsos) {
    332       info->numberSos=nsos;
    333       info->sosType = (char *) malloc(nsos);
    334       info->sosPriority = (int *) malloc(nsos*sizeof(int));
    335       info->sosStart = (int *) malloc((nsos+1)*sizeof(int));
    336       info->sosIndices = (int *) malloc(nsosnz*sizeof(int));
    337       info->sosReference = (double *) malloc(nsosnz*sizeof(double));
    338       sos_kludge(nsos, sosbeg, sosref,sosind);
    339       for (int i=0;i<nsos;i++) {
    340         int ichar = sostype[i];
    341         assert (ichar=='1'||ichar=='2');
    342         info->sosType[i]=ichar-'0';
    343       }
    344       memcpy(info->sosPriority,sospri,nsos*sizeof(int));
    345       memcpy(info->sosStart,sosbeg,(nsos+1)*sizeof(int));
    346       memcpy(info->sosIndices,sosind,nsosnz*sizeof(int));
    347       memcpy(info->sosReference,sosref,nsosnz*sizeof(double));
    348     }
    349   }
    350 
    351   /*sos_finish(&specialOrderedInfo, 0, &j, 0, 0, 0, 0, 0);*/
    352   Oinfo.uinfo = tempBuffer;
    353   if (getopts(argv, &Oinfo))
    354     return 1;
    355   /* objective*/
    356   obj = (double *) malloc(n_var*sizeof(double));
    357   for (i=0;i<n_var;i++)
    358     obj[i]=0.0;;
    359   if (n_obj) {
    360     for (og = Ograd[0];og;og = og->next)
    361       obj[og->varno] = og->coef;
    362   }
    363   if (objtype[0])
    364     info->direction=-1.0;
    365   else
    366     info->direction=1.0;
    367   info->offset=objconst(0);
    368   /* Column bounds*/
    369   columnLower = (double *) malloc(n_var*sizeof(double));
    370   columnUpper = (double *) malloc(n_var*sizeof(double));
     321  // testosi parameter - if >= 10 then go in through coinModel
     322  int testOsi=-1;
     323  for (i=0;i<saveArgc;i++) {
     324    if (!strncmp(saveArgv[i],"testosi",7)) {
     325      testOsi = atoi(saveArgv[i+1]);
     326      break;
     327    }
     328  }
     329  if (!(nlvc+nlvo)||testOsi>=10) {
     330    /* read linear model*/
     331    f_read(nl,0);
     332    // see if any sos
     333    if (true) {
     334      char *sostype;
     335      int nsosnz, *sosbeg, *sosind, * sospri;
     336      double *sosref;
     337      int nsos;
     338      int i = ASL_suf_sos_explict_free;
     339      int copri[2], **p_sospri;
     340      copri[0] = 0;
     341      copri[1] = 0;
     342      p_sospri = &sospri;
     343      nsos = suf_sos(i, &nsosnz, &sostype, p_sospri, copri,
     344                     &sosbeg, &sosind, &sosref);
     345      if (nsos) {
     346        info->numberSos=nsos;
     347        info->sosType = (char *) malloc(nsos);
     348        info->sosPriority = (int *) malloc(nsos*sizeof(int));
     349        info->sosStart = (int *) malloc((nsos+1)*sizeof(int));
     350        info->sosIndices = (int *) malloc(nsosnz*sizeof(int));
     351        info->sosReference = (double *) malloc(nsosnz*sizeof(double));
     352        sos_kludge(nsos, sosbeg, sosref,sosind);
     353        for (int i=0;i<nsos;i++) {
     354          int ichar = sostype[i];
     355          assert (ichar=='1'||ichar=='2');
     356          info->sosType[i]=ichar-'0';
     357        }       
     358        memcpy(info->sosPriority,sospri,nsos*sizeof(int));
     359        memcpy(info->sosStart,sosbeg,(nsos+1)*sizeof(int));
     360        memcpy(info->sosIndices,sosind,nsosnz*sizeof(int));
     361        memcpy(info->sosReference,sosref,nsosnz*sizeof(double));
     362      }
     363    }
     364   
     365    /*sos_finish(&specialOrderedInfo, 0, &j, 0, 0, 0, 0, 0);*/
     366    Oinfo.uinfo = tempBuffer;
     367    if (getopts(argv, &Oinfo))
     368      return 1;
     369    /* objective*/
     370    obj = (double *) malloc(n_var*sizeof(double));
     371    for (i=0;i<n_var;i++)
     372      obj[i]=0.0;;
     373    if (n_obj) {
     374      for (og = Ograd[0];og;og = og->next)
     375        obj[og->varno] = og->coef;
     376    }
     377    if (objtype[0])
     378      info->direction=-1.0;
     379    else
     380      info->direction=1.0;
     381    info->offset=objconst(0);
     382    /* Column bounds*/
     383    columnLower = (double *) malloc(n_var*sizeof(double));
     384    columnUpper = (double *) malloc(n_var*sizeof(double));
    371385#define COIN_DBL_MAX DBL_MAX
    372   for (i=0;i<n_var;i++) {
    373     columnLower[i]=LUv[2*i];
    374     if (columnLower[i]<= negInfinity)
    375       columnLower[i]=-COIN_DBL_MAX;
    376     columnUpper[i]=LUv[2*i+1];
    377     if (columnUpper[i]>= Infinity)
    378       columnUpper[i]=COIN_DBL_MAX;
    379   }
    380   /* Row bounds*/
    381   rowLower = (double *) malloc(n_con*sizeof(double));
    382   rowUpper = (double *) malloc(n_con*sizeof(double));
    383   for (i=0;i<n_con;i++) {
    384     rowLower[i]=LUrhs[2*i];
    385     if (rowLower[i]<= negInfinity)
    386       rowLower[i]=-COIN_DBL_MAX;
    387     rowUpper[i]=LUrhs[2*i+1];
    388     if (rowUpper[i]>= Infinity)
    389       rowUpper[i]=COIN_DBL_MAX;
    390   }
    391   info->numberRows=n_con;
    392   info->numberColumns=n_var;
    393   info->numberElements=nzc;;
    394   info->numberBinary=nbv;
    395   info->numberIntegers=niv;
    396   info->objective=obj;
    397   info->rowLower=rowLower;
    398   info->rowUpper=rowUpper;
    399   info->columnLower=columnLower;
    400   info->columnUpper=columnUpper;
    401   info->starts=A_colstarts;
    402   /*A_colstarts=NULL;*/
    403   info->rows=A_rownos;
    404   /*A_rownos=NULL;*/
    405   info->elements=A_vals;
    406   /*A_vals=NULL;*/
    407   info->primalSolution=NULL;
    408   /* put in primalSolution if exists */
    409   if (X0) {
    410     info->primalSolution=(double *) malloc(n_var*sizeof(double));
    411     memcpy(info->primalSolution,X0,n_var*sizeof(double));
    412   }
    413   info->dualSolution=NULL;
    414   if (niv+nbv>0)
    415     mip_stuff(); // get any extra info
    416   if ((!(niv+nbv)&&(csd->kind & ASL_Sufkind_input))
    417       ||(rsd->kind & ASL_Sufkind_input)) {
    418     /* convert status - need info on map */
    419     static int map[] = {1, 3, 1, 1, 2, 1, 1};
    420     stat_map(info->columnStatus, n_var, map, 6, "incoming columnStatus");
    421     stat_map(info->rowStatus, n_con, map, 6, "incoming rowStatus");
     386    for (i=0;i<n_var;i++) {
     387      columnLower[i]=LUv[2*i];
     388      if (columnLower[i]<= negInfinity)
     389        columnLower[i]=-COIN_DBL_MAX;
     390      columnUpper[i]=LUv[2*i+1];
     391      if (columnUpper[i]>= Infinity)
     392        columnUpper[i]=COIN_DBL_MAX;
     393    }
     394    /* Row bounds*/
     395    rowLower = (double *) malloc(n_con*sizeof(double));
     396    rowUpper = (double *) malloc(n_con*sizeof(double));
     397    for (i=0;i<n_con;i++) {
     398      rowLower[i]=LUrhs[2*i];
     399      if (rowLower[i]<= negInfinity)
     400        rowLower[i]=-COIN_DBL_MAX;
     401      rowUpper[i]=LUrhs[2*i+1];
     402      if (rowUpper[i]>= Infinity)
     403        rowUpper[i]=COIN_DBL_MAX;
     404    }
     405    info->numberRows=n_con;
     406    info->numberColumns=n_var;
     407    info->numberElements=nzc;;
     408    info->numberBinary=nbv;
     409    info->numberIntegers=niv;
     410    info->objective=obj;
     411    info->rowLower=rowLower;
     412    info->rowUpper=rowUpper;
     413    info->columnLower=columnLower;
     414    info->columnUpper=columnUpper;
     415    info->starts=A_colstarts;
     416    /*A_colstarts=NULL;*/
     417    info->rows=A_rownos;
     418    /*A_rownos=NULL;*/
     419    info->elements=A_vals;
     420    /*A_vals=NULL;*/
     421    info->primalSolution=NULL;
     422    /* put in primalSolution if exists */
     423    if (X0) {
     424      info->primalSolution=(double *) malloc(n_var*sizeof(double));
     425      memcpy(info->primalSolution,X0,n_var*sizeof(double));
     426    }
     427    info->dualSolution=NULL;
     428    if (niv+nbv>0)
     429      mip_stuff(); // get any extra info
     430    if ((!(niv+nbv)&&(csd->kind & ASL_Sufkind_input))
     431        ||(rsd->kind & ASL_Sufkind_input)) {
     432      /* convert status - need info on map */
     433      static int map[] = {1, 3, 1, 1, 2, 1, 1};
     434      stat_map(info->columnStatus, n_var, map, 6, "incoming columnStatus");
     435      stat_map(info->rowStatus, n_con, map, 6, "incoming rowStatus");
     436    } else {
     437      /* all slack basis */
     438      // leave status for output */
     439#if 0
     440      free(info->rowStatus);
     441      info->rowStatus=NULL;
     442      free(info->columnStatus);
     443      info->columnStatus=NULL;
     444#endif
     445    }
    422446  } else {
    423     /* all slack basis */
    424     // leave status for output */
    425 #if 0
    426     free(info->rowStatus);
    427     info->rowStatus=NULL;
    428     free(info->columnStatus);
    429     info->columnStatus=NULL;
    430 #endif
     447    // QP
     448    CoinModel * model = new CoinModel(1,fileName);
     449    if (model->numberRows()>0)
     450      *coinModel=(void *) model;
     451    Oinfo.uinfo = tempBuffer;
     452    if (getopts(argv, &Oinfo))
     453      return 1;
     454    if (objtype[0])
     455      info->direction=-1.0;
     456    else
     457      info->direction=1.0;
     458    info->offset=objconst(0);
     459    info->numberRows=n_con;
     460    info->numberColumns=n_var;
     461    info->numberElements=nzc;;
     462    info->numberBinary=nbv;
     463    info->numberIntegers=niv;
    431464  }
    432465  /* add -solve - unless something there already
Note: See TracChangeset for help on using the changeset viewer.