Ignore:
Timestamp:
Apr 2, 2006 5:10:40 AM (15 years ago)
Author:
forrest
Message:

for ampl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Test/Cbc_ampl.cpp

    r260 r295  
    100100        { "sosref", 0, ASL_Sufkind_var | ASL_Sufkind_real },
    101101#endif
     102        { "direction", 0, ASL_Sufkind_var },
     103        { "downPseudocost", 0, ASL_Sufkind_var | ASL_Sufkind_real },
     104        { "priority", 0, ASL_Sufkind_var },
    102105        { strdup("sstatus"), 0, ASL_Sufkind_var, 0 },
    103         { strdup("sstatus"), 0, ASL_Sufkind_con, 0 }
     106        { strdup("sstatus"), 0, ASL_Sufkind_con, 0 },
     107        { "upPseudocost", 0, ASL_Sufkind_var | ASL_Sufkind_real }
    104108#if 0
    105109        { "unbdd", 0, ASL_Sufkind_var | ASL_Sufkind_outonly},
     
    113117static FILE *nl=NULL;
    114118
     119static void
     120mip_stuff(void)
     121{
     122  int i;
     123  double *pseudoUp, *pseudoDown;
     124  int *priority, *direction;
     125  SufDesc *dpup, *dpdown, *dpri, *ddir;
     126 
     127  ddir = suf_get("direction", ASL_Sufkind_var);
     128  direction = ddir->u.i;
     129  dpri = suf_get("priority", ASL_Sufkind_var);
     130  priority = dpri->u.i;
     131  dpdown = suf_get("downPseudocost", ASL_Sufkind_var);
     132  pseudoDown = dpdown->u.r;
     133  dpup = suf_get("upPseudocost", ASL_Sufkind_var);
     134  pseudoUp = dpup->u.r;
     135  assert(saveInfo);
     136  int numberColumns = saveInfo->numberColumns;
     137  if (direction) {
     138    int baddir=0;
     139    saveInfo->branchDirection = (int *) malloc(numberColumns*sizeof(int));
     140    for (i=0;i<numberColumns;i++) {
     141      int value = direction[i];
     142      if (value<-1||value>1) {
     143        baddir++;
     144        value=0;
     145      }
     146      saveInfo->branchDirection[i]=value;
     147    }
     148    if (baddir)
     149      fprintf(Stderr,
     150              "Treating %d .direction values outside [-1, 1] as 0.\n",
     151              baddir);
     152  }
     153  if (priority) {
     154    int badpri=0;
     155    saveInfo->priorities= (int *) malloc(numberColumns*sizeof(int));
     156    for (i=0;i<numberColumns;i++) {
     157      int value = priority[i];
     158      if (value<0) {
     159        badpri++;
     160        value=0;
     161      }
     162      saveInfo->priorities[i]=value;
     163    }
     164    if (badpri)
     165      fprintf(Stderr,
     166              "Treating %d negative .priority values as 0\n",
     167              badpri);
     168  }
     169  if (pseudoDown||pseudoUp) {
     170    int badpseudo=0;
     171    if (!pseudoDown||!pseudoUp)
     172      fprintf(Stderr,
     173              "Only one set of pseudocosts - assumed same\n");
     174    saveInfo->pseudoDown= (double *) malloc(numberColumns*sizeof(double));
     175    saveInfo->pseudoUp = (double *) malloc(numberColumns*sizeof(double));
     176    for (i=0;i<numberColumns;i++) {
     177      double valueD=0.0, valueU=0.0;
     178      if (pseudoDown) {
     179        valueD = pseudoDown[i];
     180        if (valueD<0) {
     181          badpseudo++;
     182          valueD=0.0;
     183        }
     184      }
     185      if (pseudoUp) {
     186        valueU = pseudoUp[i];
     187        if (valueU<0) {
     188          badpseudo++;
     189          valueU=0.0;
     190        }
     191      }
     192      if (!valueD)
     193        valueD=valueU;
     194      if (!valueU)
     195        valueU=valueD;
     196      saveInfo->pseudoDown[i]=valueD;
     197      saveInfo->pseudoUp[i]=valueU;
     198    }
     199    if (badpseudo)
     200      fprintf(Stderr,
     201              "Treating %d negative pseudoCosts as 0.0\n",badpseudo);
     202  }
     203}
    115204static void
    116205stat_map(int *stat, int n, int *map, int mx, const char *what)
     
    252341  }
    253342  info->dualSolution=NULL;
     343  if (niv+nbv>0)
     344    mip_stuff(); // get any extra info
    254345  if ((!(niv+nbv)&&(csd->kind & ASL_Sufkind_input))
    255346      ||(rsd->kind & ASL_Sufkind_input)) {
     
    353444  free(info->columnStatus);
    354445  info->columnStatus=NULL;
     446  free(info->priorities);
     447  info->priorities=NULL;
     448  free(info->branchDirection);
     449  info->branchDirection=NULL;
     450  free(info->pseudoDown);
     451  info->pseudoDown=NULL;
     452  free(info->pseudoUp);
     453  info->pseudoUp=NULL;
    355454  ASL_free(&asl);
    356455}
Note: See TracChangeset for help on using the changeset viewer.