Example #1
0
void SplitLP::minimiseInput(stomap* conv, strvec& txs){
    strvec externals = getExternals();
    stomap obj;
    int nblock = 0;

    stomap::iterator cend = conv->end();
    for (strvec::iterator it = externals.begin(); it != externals.end(); ++it){
        string tx = getTransporterName(*it, 1);
        if (tx.size() > 0){
            stomap::iterator ct = conv->find(*it);
            if (ct != cend && ct->second < 0){
                obj[tx] = 1;
            }
            else{
                block(tx, true);
                nblock++;
            }
        }
    }
    setObjective(&obj);
    Solve(true);
    conv->clear();
    getConversion(conv);
    cleanTmpRows(nblock);
}
Example #2
0
strvec MtxLP::getTransporters()const{
    strvec rv;
    strvec ext = getExternals();
    for (strvec::iterator it = ext.begin(); it != ext.end(); ++it){
        stomap *sto = getRowSto(*it);
        string tx = sto->begin()->first;
        rv.push_back(tx);
        delete sto;
    }
    return rv;
}
Example #3
0
strvec MtxLP::getImporters()const{
    strvec rv;
    strvec ext = getExternals();
    for (strvec::iterator it = ext.begin(); it != ext.end(); ++it){
        stomap *sto = getRowSto(*it);
        for (stomap::iterator jt = sto->begin(); jt != sto->end(); ++jt)
            if (jt->second < 0)
                rv.push_back(jt->first);
        delete sto;
    }
    return rv;
}
Example #4
0
void SplitLP::minExchangeSets(solvec& solutions, stomap* obj, int dir, long nmax){
    strvec externals = getExternals();
    strvec txs(externals.size());// - obj->size());
    strvec::iterator ti = txs.begin();
    stomap::iterator oend = obj->end();
    for (strvec::iterator it = externals.begin(); it != externals.end(); ++it){
        string xname = *it;
        string txname = getTransporterName(xname, dir);
        stomap::iterator jt = obj->find(xname);
        if (jt != oend){
            double coef = jt->second;
            coef /= this->vmax;
            fix(txname, coef, true, txname + "_mxs");
        }
        else if (dir > 0){
                fix(txname, 0, true);
        }
        *ti++ = get_opp_name(txname);
    }
    setObjDir(false);
    setLenObjective(txs, true);

    strvec itxs = get_int_names(txs);

    long i = 0;
    while(i < nmax){
        stomap conv;
        stomap sol;

        Solve(true);
        getConversion(&conv);

        if (!isSolved())
            break;

        getSolution(&sol, itxs, INT, false);

        if (!conv.empty()){
            i++;
            if (dir < 0){
                minimiseInput(&conv, txs);
                setLenObjective(txs, true);
            }
            solutions.push_back(conv);
        }

        if (i < nmax)
            cutSolution(&sol, true);
    }

//    cleanTmpRows();
}
Example #5
0
void SplitLP::getConversion(stomap* comp, bool withzeroes) const{
    strvec externals = getExternals();
    for (strvec::iterator xi = externals.begin(); xi != externals.end(); ++xi){
        string xname = *xi;
        stomap *rsto = getRowSto(xname);
        string txname = rsto->begin()->first;   //getTransporterName(rsto, dir);
        string txopp = get_opp_name(txname);
        if(!is_pos(txname)){
            string mid = txname;
            txname = txopp;
            txopp = mid;
        }
        double coef = (*rsto)[txname];
        double flux = getColValue(txname) - getColValue(txopp);
        double conv = coef * flux * vmax;
        if (withzeroes || !is_zero(conv))
            (*comp)[xname] = conv;
        delete rsto;
    }
}
Example #6
0
int init_module()
{
  int res;

  if(!getExternals())
  {
    printk(KERN_INFO "timerfd-lethe failed to find necessary external symbols");
    return -EINVAL;
  }

  res = register_chrdev(TIMERFD_LETHE_MAJOR, "timerfd-lethe", &timerfd_fops);

  if(res < 0)
  {
    printk(KERN_INFO "Failed to register device number");
    return res;
  }

  printk(KERN_INFO "Successfully installed timerfd-lethe module");
  return 0;
}