Skip to content
Snippets Groups Projects
Select Git revision
  • 8af3d7041183865ccfbda8f4fa4c5394af371c9f
  • master default protected
2 results

createDocs.sh

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    sysBiolAlg_fvClass.R 8.36 KiB
    #  sysBiolAlg_fvClass.R
    #  FBA and friends with R.
    #
    #  Copyright (C) 2010-2014 Gabriel Gelius-Dietrich, Dpt. for Bioinformatics,
    #  Institute for Informatics, Heinrich-Heine-University, Duesseldorf, Germany.
    #  All right reserved.
    #  Email: geliudie@uni-duesseldorf.de
    #
    #  This file is part of sybil.
    #
    #  Sybil is free software: you can redistribute it and/or modify
    #  it under the terms of the GNU General Public License as published by
    #  the Free Software Foundation, either version 3 of the License, or
    #  (at your option) any later version.
    #
    #  Sybil is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with sybil.  If not, see <http://www.gnu.org/licenses/>.
    
    
    #------------------------------------------------------------------------------#
    #                    definition of the class sysBiolAlg_fv                     #
    #------------------------------------------------------------------------------#
    
    setClass(Class = "sysBiolAlg_fv",
             contains = "sysBiolAlg"
    )
    
    
    #------------------------------------------------------------------------------#
    #                            default constructor                               #
    #------------------------------------------------------------------------------#
    
    # contructor for class sysBiolAlg_fv
    setMethod(f = "initialize",
              signature = "sysBiolAlg_fv",
              definition = function(.Object,
                                    model,
                                    percentage = 100,
                                    Zopt = NULL,
                                    fixObjVal = TRUE,
                                    tol = SYBIL_SETTINGS("TOLERANCE"),
                                    lpdir = SYBIL_SETTINGS("OPT_DIRECTION"),
                                    useNames = SYBIL_SETTINGS("USE_NAMES"),
                                    cnames = NULL,
                                    rnames = NULL,
                                    pname = NULL,
                                    scaling = NULL,
                                    writeProbToFileName = NULL, ...) {
    
                  if ( ! missing(model) ) {
    
                      stopifnot(is(model, "modelorg"),
                                (is.null(Zopt) || is(Zopt, "numeric")),
                                is(tol, "numeric"),
                                is(percentage, "numeric"),
                                is(lpdir, "character"))
                      
                      # problem dimensions
                      nCols <- react_num(model)
                      nRows <- met_num(model)
    
                      # row and column names for the problem object
                      if (isTRUE(useNames)) {
                          if (is.null(cnames)) {
                              colNames <- .makeLPcompatible(react_id(model),
                                                                    prefix = "x")
                          }
                          else {
                              stopifnot(is(cnames, "character"),
                                        length(cnames) == nCols)
                              colNames <- cnames
                          }
    
                          if (is.null(rnames)) {
                              rowNames <- .makeLPcompatible(met_id(model),
                                                                    prefix = "r")
                          }
                          else {
                              stopifnot(is(rnames, "character"),
                                        length(rnames) == nRows)
                              rowNames <- rnames
                          }
    
                          if (is.null(pname)) {
                              probName <- .makeLPcompatible(
                                  paste("FV", mod_id(model), sep = "_"),
                                  prefix = "")
                          }
                          else {
                              stopifnot(is(pname, "character"),
                                        length(pname) == 1)
                              probName <- pname
                          }
                      }
                      else {
                          colNames <- NULL
                          rowNames <- NULL
                          probName <- NULL
                      }
    
                      .Object <- callNextMethod(.Object,
                                                sbalg      = "fv",
                                                pType      = "lp",
                                                scaling    = scaling,
                                                fi         = 1:nCols,
                                                nCols      = nCols,
                                                nRows      = nRows,
                                                mat        = S(model),
                                                ub         = uppbnd(model),
                                                lb         = lowbnd(model),
                                                obj        = rep(0, nCols),
                                                rlb        = rep(0, nRows),
                                                rtype      = rep("E", nRows),
                                                lpdir      = lpdir,
                                                rub        = NULL,
                                                ctype      = NULL,
                                                cnames     = colNames,
                                                rnames     = rowNames,
                                                pname      = probName,
                                                algPar     = list("percentage" = percentage,
                                                                  "Zopt"       = Zopt),
                                                ...)
    
                      # objective value
                      if ( (isTRUE(fixObjVal)) && (any(obj_coef(model) != 0)) ) {
                          if (is.null(Zopt)) {
                              optimal <- optimizeProb(model,
                                                      retOptSol = FALSE,
                                                      algorithm = "fba",
                                                      lpdir = lpdir,
                                                      scaling = scaling, ...)
    
                              if (optimal$ok == 0) {
                                  if (lpdir == "max") {
                                      obj <- .floorValues(optimal$obj,
                                                           tol = tol)*percentage/100
                                  }
                                  else {
                                      obj <- .ceilValues(optimal$obj,
                                                           tol = tol)*percentage/100
                                  }
                              }
                              else {
                                  stop("No optimal solution!")
                              }
                          }
                          else {
                              #obj <- Zopt
                              obj <- Zopt * (percentage/100)
                          }
    
                          # add a row to the problem
                          #type <- ifelse(lpdir == "max", "L", "U")
                          if (lpdir == "max") {
                              type <- "L"
                              lowb <- obj
                              uppb <- SYBIL_SETTINGS("MAXIMUM")
                          }
                          else {
                              type <- "U"
                              lowb <- SYBIL_SETTINGS("MAXIMUM") * -1
                              uppb <- obj
                          }
                          oind <- which(obj_coef(model) != 0)
                          oval <- obj_coef(model)[oind]
                          addRowsToProb(lp = problem(.Object),
                                        i = met_num(model)+1,
                                        type = type, lb = lowb, ub = uppb,
                                        cind = list(oind), nzval = list(oval),
                                        rnames = "Z")
                          .Object@nr <- .Object@nr + 1L
                          .Object@alg_par[["Zopt"]] <- obj
    
                      }
    
                      if (!is.null(writeProbToFileName)) {
                          writeProb(problem(.Object),
                                    fname = as.character(writeProbToFileName))
                      }
    
                  }
                  return(.Object)
              }
    )
    
    
    #------------------------------------------------------------------------------#