Ejemplo n.º 1
0
    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