def minimize(self, **kwargs): """ solve the linear problem with the solver given in self.solver Returns: obj_value, solution obj_value -- value of the objective function at the discovered solution solution -- the solution flux vector (indexed like matrix columns) """ if self.solver == _GLPK: # Use pyMathProg interface to GLPK solver self.glpkP.solve() self.istop = self.glpkP.status() # print "istop:", self.istop self.status = glpkToSolverStatus(self.istop) if self.status == SolverStatus.OPTIMAL: self.obj_value = self.glpkP.vobj() self.solution = [ self.glpkVar[i].primal for i in range(len(self.glpkVar)) ] else: self.obj_value = 0. self.solution = [] else: # Use OpenOpt interface lp = LP(self.obj, A=self.Aineq, Aeq=self.Aeq, b=self.bineq, beq=self.beq, lb=self.lb, ub=self.ub, **kwargs) lp.debug = 1 # lp.iprint=-1 # suppress solver output r = lp.solve(self.solver if self.solver != _OOGLPK else 'glpk') if r.istop <= 0. or r.ff != r.ff: # check halting condition self.obj_value = 0. self.solution = [] self.istop = r.istop else: self.obj_value = r.ff self.solution = r.xf self.istop = r.istop # print self.istop return self.obj_value, self.solution