コード例 #1
0
ファイル: CyLPModel.py プロジェクト: immerrr/CyLP
 def objective(self, obj):
     if isinstance(obj, CyLPExpr):
         self.objective_ = obj.evaluate()
         obj = None
         #for varName in self.allVarNames:
         for varName in self.varNames:
             v_coef = self.generateVarObjCoef(varName)
             obj = sparseConcat(obj, v_coef, how='h')
     self.objective_ = obj
コード例 #2
0
ファイル: CyLPModel.py プロジェクト: zuoxiaolei/CyLP
 def objective(self, obj):
     if isinstance(obj, CyLPExpr):
         self.objective_ = obj.evaluate()
         obj = None
         #for varName in self.allVarNames:
         for varName in self.varNames:
             v_coef = self.generateVarObjCoef(varName)
             obj = sparseConcat(obj, v_coef, how='h')
         obj = np.squeeze(np.asarray(obj.todense()))
     self.objective_ = obj
コード例 #3
0
ファイル: CyLPModel.py プロジェクト: zuoxiaolei/CyLP
    def removeVariable(self, name):
        '''
        Remove a variable named ``name`` from the model
        '''
        if not self.inds.hasVar(name):
            raise Exception('Variable "%s" does not exist.' % name)

        self.nVars -= self.pvdims[name]
        start = self.inds.varIndex[name][0]
        end = start + self.pvdims[name]
        o = self.objective_

        if isinstance(o, np.ndarray):
            o = np.concatenate((o[:start], o[end:]), axis=0)
        else:
            if end == o.shape[1]:
                if start == 0:
                    print('Problem empty.')
                else:
                    o = o[0, :start]
            elif start == 0:
                o = o[0, end:]
            else:
                o = sparseConcat(o[0, :start], o[0, end:], how='h')

        # I'm not exactly sure why the objective gets changed into
        # csr_matrixPlus here when it may not be coming in. Shouldn't it
        # just always be?
        self.objective_ = csr_matrixPlus(o)

        del self.pvdims[name]
        self.varNames.remove(name)
        self.inds.removeVar(name)
        for i in range(len(self.variables)):
            var = self.variables[i]
            if var.name == name:
                del self.variables[i]
                break

        #Removing the variable from the constraints
        cons = self.constraints
        for c in cons:
            if name in c.varNames:
                c.varNames.remove(name)
                del c.parentVarDims[name]
                for v in list(c.varCoefs.keys()):
                    if v.name == name:
                        del c.varCoefs[v]

        for c in cons[:]:
            self.inds
            if not c.varCoefs:
                self.removeConstraint(c.name)
コード例 #4
0
ファイル: CyLPModel.py プロジェクト: Foris/CyLP
    def removeVariable(self, name):
        '''
        Remove a variable named ``name`` from the model
        '''
        if not self.inds.hasVar(name):
            raise Exception('Variable "%s" does not exist.' % name)

        self.nVars -= self.pvdims[name]
        start = self.inds.varIndex[name][0]
        end = start + self.pvdims[name]
        o = self.objective_

        if isinstance(o, np.ndarray):
            o = np.concatenate((o[:start], o[end:]), axis=0)
        else:
            if end == o.shape[1]:
                if start == 0:
                    print 'Problem empty.'
                else:
                    o = o[0, :start]
            elif start == 0:
                o = o[0, end:]
            else:
                o = sparseConcat(o[0, :start], o[0, end:], how='h')

        self.objective_ = csr_matrixPlus(o)

        del self.pvdims[name]
        self.varNames.remove(name)
        self.inds.removeVar(name)
        for i in range(len(self.variables)):
            var = self.variables[i]
            if var.name == name:
                del self.variables[i]
                break

        #Removing the variable from the constraints
        cons = self.constraints
        for c in cons:
            if name in c.varNames:
                c.varNames.remove(name)
                del c.parentVarDims[name]
                for v in c.varCoefs.keys():
                    if v.name == name:
                        del c.varCoefs[v]

        for c in cons[:]:
            self.inds
            if not c.varCoefs:
                self.removeConstraint(c.name)
コード例 #5
0
ファイル: CyLPModel.py プロジェクト: zuoxiaolei/CyLP
    def generateVarMatrix(self, varName):
        '''
        Create the coefficient matrix for a variable named
        varName. Return a csr_matrixPlus.
        '''
        #dim = self.allParentVarDims[varName]
        dim = self.pvdims[varName]
        mainCoef = None
        for c in self.constraints:
            coef = sparse.coo_matrix((c.nRows, dim))
            keys = [k for k in c.varCoefs.keys() if k.name == varName]
            for var in keys:
                coef = coef + c.varCoefs[var]
            mainCoef = sparseConcat(mainCoef, coef, 'v')

        return mainCoef
コード例 #6
0
ファイル: CyLPModel.py プロジェクト: Foris/CyLP
    def generateVarMatrix(self, varName):
        '''
        Create the coefficient matrix for a variable named
        varName. Return a csr_matrixPlus.
        '''
        #dim = self.allParentVarDims[varName]
        dim = self.pvdims[varName]
        mainCoef = None
        for c in self.constraints:
            coef = sparse.coo_matrix((c.nRows, dim))
            keys = [k for k in c.varCoefs.keys() if k.name == varName]
            for var in keys:
                coef = coef + c.varCoefs[var]
            mainCoef = sparseConcat(mainCoef, coef, 'v')

        return mainCoef
コード例 #7
0
ファイル: CyLPModel.py プロジェクト: Foris/CyLP
    def makeMatrices(self):
        '''
        Makes coef matrix and rhs vector from CyLPConstraints
        in self.constraints
        '''
        #if len(self.constraints) == 0:
        #    return
        self.makeIndexFactory()
        #self.getVarBounds()


        # Create the aggregated coef matrix
        masterCoefMat = None

        masterCoefMat = None
        if self.nCons > 0:
            for varName in self.varNames:# self.pvdims.keys():#self.allVarNames:
                vmat = self.generateVarMatrix(varName)

                if vmat is None:
                    vmat = csc_matrixPlus((self.nCons, self.pvdims[varName]))
                masterCoefMat = sparseConcat(masterCoefMat, vmat, 'h')

        # Create bound vectors
        c_lower = np.array([])
        c_upper = np.array([])
        for c in self.constraints:
            if not c.isRange:
                c_lower = np.concatenate((c_lower, c.lower), axis=0)
                c_upper = np.concatenate((c_upper, c.upper), axis=0)
        # Create variables bound vectors
        v_lower = np.array([])
        v_upper = np.array([])
        if self.nVars:
            v_lower = -getCoinInfinity() * np.ones(self.nVars)
            v_upper = getCoinInfinity() * np.ones(self.nVars)
            for v in self.variables:
                varinds = self.inds.varIndex[v.name]
                v_lower[varinds] = v.lower
                v_upper[varinds] = v.upper

                #v_lower = np.concatenate((v_lower, v.lower), axis=0)
                #v_upper = np.concatenate((v_upper, v.upper), axis=0)
        #if masterCoefMat is not None:
        return masterCoefMat, c_lower, c_upper, v_lower, v_upper
コード例 #8
0
ファイル: CyLPModel.py プロジェクト: vbadanov/CyLP
    def makeMatrices(self):
        '''
        Makes coef matrix and rhs vector from CyLPConstraints
        in self.constraints
        '''
        #if len(self.constraints) == 0:
        #    return
        self.makeIndexFactory()
        #self.getVarBounds()


        # Create the aggregated coef matrix
        masterCoefMat = None

        masterCoefMat = None
        if self.nCons > 0:
            for varName in self.varNames:# self.pvdims.keys():#self.allVarNames:
                vmat = self.generateVarMatrix(varName)

                if vmat is None:
                    vmat = csc_matrixPlus((self.nCons, self.pvdims[varName]))
                masterCoefMat = sparseConcat(masterCoefMat, vmat, 'h')

        # Create bound vectors
        c_lower = np.array([])
        c_upper = np.array([])
        for c in self.constraints:
            if not c.isRange:
                c_lower = np.concatenate((c_lower, c.lower), axis=0)
                c_upper = np.concatenate((c_upper, c.upper), axis=0)
        # Create variables bound vectors
        v_lower = np.array([])
        v_upper = np.array([])
        if self.nVars:
            v_lower = -getCoinInfinity() * np.ones(self.nVars)
            v_upper = getCoinInfinity() * np.ones(self.nVars)
            for v in self.variables:
                varinds = self.inds.varIndex[v.name]
                v_lower[varinds] = v.lower
                v_upper[varinds] = v.upper

                #v_lower = np.concatenate((v_lower, v.lower), axis=0)
                #v_upper = np.concatenate((v_upper, v.upper), axis=0)
        #if masterCoefMat is not None:
        return masterCoefMat, c_lower, c_upper, v_lower, v_upper
コード例 #9
0
ファイル: CyLPModel.py プロジェクト: zuoxiaolei/CyLP
    def addVariable(self, name, dim, isInt=False):
        '''
        Create a new instance of :py:class:`CyLPVar` using the given
        arguments and add it to current model's variable list.
        '''

        if dim == 0:
            return
        var = CyLPVar(name, dim, isInt)
        self.variables.append(var)

        #If mulidim, correct dim
        if isinstance(dim, tuple):
            dim = reduce(mul, dim)

        if not self.inds.hasVar(var.name):
            self.inds.addVar(var.name, dim)
            self.nVars += dim
            self.varNames.append(var.name)
            self.pvdims[var.name] = dim

            if var.dims:
                var.mpsNames = [var.name + '_' + '_'.join(x) for x in \
                        product(*[map(str, range(i)) for i in var.dims])]
            else:
                var.mpsNames = [
                    '%s_%s' % (var.name, i) for i in range(var.dim)
                ]

            o = self.objective_
            if isinstance(o, np.ndarray):
                o = np.concatenate((o, np.zeros(dim)), axis=0)
            else:
                o = sparseConcat(o, csr_matrixPlus(np.zeros(dim)), 'h')

            # I'm not exactly sure why the objective gets changed into
            # csr_matrixPlus here when it may not be coming in. Shouldn't it
            # just always be?
            self.objective_ = csr_matrixPlus(o)

        else:
            raise Exception('Varaible %s already exists.' % var.name)

        return var
コード例 #10
0
ファイル: CyLPModel.py プロジェクト: Foris/CyLP
    def addVariable(self, name, dim, isInt=False):
        '''
        Create a new instance of :py:class:`CyLPVar` using the given
        arguments and add it to current model's variable list.
        '''

        if dim == 0:
            return
        var = CyLPVar(name, dim, isInt)
        self.variables.append(var)

        #If mulidim, correct dim
        if isinstance(dim, tuple):
            dim = reduce(mul, dim)

        if not self.inds.hasVar(var.name):
            self.inds.addVar(var.name, dim)
            self.nVars += dim
            self.varNames.append(var.name)
            self.pvdims[var.name] = dim

            if var.dims:
                var.mpsNames = [var.name + '_' + '_'.join(x) for x in \
                        product(*[map(str, range(i)) for i in var.dims])]
            else:
                var.mpsNames = ['%s_%s' % (var.name, i) for i in xrange(var.dim)]

            o = self.objective_
            if isinstance(o, np.ndarray):
                o = np.concatenate((o, np.zeros(dim)), axis=0)
            else:
                o = sparseConcat(o, csr_matrixPlus(np.zeros(dim)), 'h')

            self.objective_ = csr_matrixPlus(o)

        else:
            raise Exception('Varaible %s already exists.' % var.name)

        return var