From d22fa993b27be9a377275561326c4c2ffad196d2 Mon Sep 17 00:00:00 2001 From: Sajjad Ghaffarinasabsharabiani <ghaffas@hhu.de> Date: Tue, 9 Aug 2022 10:17:37 +0000 Subject: [PATCH] Upload New File --- .../helper/fastBlockedReact.R | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 networkComplexityBigg/helper/fastBlockedReact.R diff --git a/networkComplexityBigg/helper/fastBlockedReact.R b/networkComplexityBigg/helper/fastBlockedReact.R new file mode 100644 index 0000000..a02439b --- /dev/null +++ b/networkComplexityBigg/helper/fastBlockedReact.R @@ -0,0 +1,139 @@ +fastBlockedReact <- function(model, tol=SYBIL_SETTINGS("TOLERANCE"), exex=TRUE){ + stopifnot(is(model, "modelorg")) + + obj_coef(model) <- rep(0, react_num(model)) + sba <- sysBiolAlg(model, algorithm="fba") + + toCheck <- rep(T, react_num(model)) + blocked <- rep(F, react_num(model)) + + if(exex){ + toCheck[react_pos(findExchReact(model))] <- F + } + pb <- txtProgressBar(min=0, max=react_num(model), style=3) + while(any(toCheck)){ + setTxtProgressBar(pb, react_num(model)-sum(toCheck)) +# rid <- sample(which(toCheck), 1) + rid <- which(toCheck)[1] + max <- optimizeProb(sba, react=rid, obj_coef=1, lpdir="max") + if(length(checkSolStat(max$stat))!=0){ + if(SYBIL_SETTINGS("SOLVER") == "cplexAPI"){ + if(max$stat == CPX_STAT_OPTIMAL_INFEAS){ + warning(paste0("Status was:", getMeanStatus(max$stat))) + } + }else{ + stop(paste0("Solution is not optimal", getMeanStatus(max$stat))) + } + } + toCheck[toCheck][abs(max$fluxes[toCheck]) > tol] <- F + min <- optimizeProb(sba, react=rid, obj_coef=1, lpdir="min") + if(length(checkSolStat(min$stat))!=0){ + if(SYBIL_SETTINGS("SOLVER") == "cplexAPI"){ + if(min$stat == CPX_STAT_OPTIMAL_INFEAS){ + warning(paste0("Status was:", getMeanStatus(min$stat))) + } + }else{ + stop(paste0("Solution is not optimal", getMeanStatus(min$stat))) + } + } + toCheck[toCheck][abs(min$fluxes[toCheck]) > tol] <- F + + + if(abs(max$obj) < tol && abs(min$obj) < tol ){ + blocked[rid] <- T + } + + toCheck[rid] <- F + } + close(pb) + return(blocked) +} + +#irrevBlockedReact <- function(model, exex=TRUE, tol=SYBIL_SETTINGS("TOLERANCE")){ +# stopifnot(is(model, "modelorg_irrev")) +# +# sba <- sysBiolAlg(model, algorithm="fba") +# toCheck <- rep(T, react_num(model)) +## blocked <- rep(F, react_num(model)) +# +# if(exex){ +# toCheck[react_pos(findExchReact(model))] <- F +# } +# while(any(toCheck)){ +# print(sum(toCheck)) +# checkVector <- rep(0, react_num(model)) +# checkVector[toCheck] <- 1 +# fba <- optimizeProb(sba, +# react=1:(1*react_num(model)), +# obj_coef=c(checkVector)) +# stopifnot(length(checkSolStat(fba$stat))==0) +# +# f <- fba$fluxes +# toCheck[toCheck][abs(f[toCheck]) > tol] <- F +## blocked[toCheck][abs(f[toCheck]) > tol] <- F +# +# print(fba[c("obj", "stat")]) +# if(abs(fba$obj) < tol){ +# break +# } +# } +# return(toCheck) +#} + + + +#superFastBlockedReact <- function(model, tol=SYBIL_SETTINGS("TOLERANCE"), exex=TRUE){ +# stopifnot(is(model, "modelorg")) +# +# sba <- sysBiolAlg(model, algorithm="mtf", wtobj=0, lpdir="max") +# +# toCheck <- rep(T, react_num(model)) +## blocked <- rep(F, react_num(model)) +# +# if(exex){ +# toCheck[react_pos(findExchReact(model))] <- F +# } +# while(any(toCheck)){ +# print(sum(toCheck)) +# checkVector <- rep(0, react_num(model)) +# checkVector[toCheck] <- 1 +# mtf <- optimizeProb(sba, fldind=FALSE, +# react=1:(3*react_num(model)), +# obj_coef=c(rep(0, react_num(model)), checkVector, checkVector)) +# stopifnot(length(checkSolStat(mtf$stat))==0) +# +# f <- mtf$fluxes[1:react_num(model)] +# toCheck[toCheck][abs(f[toCheck]) > tol] <- F +## blocked[toCheck][abs(f[toCheck]) > tol] <- F +# +# print(mtf[c("obj", "stat")]) +# browser() +# if(abs(mtf$obj) < tol){ +# toCheck <- F +# } +# +# } +# return(toCheck) +#} + +#library(sybil) +#data(Ec_core) +#source("helperScripts/fastBlockedReact.R") +#superFastBlockedReact(Ec_core) + +#all(fastBlockedReact(Ec_core) == blockedReact(Ec_core)) +#load("~/workspace/models/iAF1260.Rdata") +#data.frame(round(f), checkVector, round(mtf$fluxes[react_num(model)+(1:react_num(model))])) + + + + + + + + + + + + + -- GitLab