예제 #1
0
 def _Prepare(self):
     if self._milp_prepared: return
     self._milp_prepared = True
     LP._Prepare(self)
     r = []
     if type(self.intVars) not in [list, tuple, set] and not isinstance(self.intVars, ndarray):
         self.intVars = [self.intVars]
     if self.isFDmodel:
         
         ########### obsolete, to be removed in future versions
         if self.intVars != []:
             s = '''
             For FuncDesigner models prob parameter intVars is deprecated
             and will be removed in future versions, use oovar(..., domain = int) instead'''
             self.pWarn(s)
         for iv in self.intVars:
             if self.fixedVars is not None and iv in self.fixedVars or\
             self.freeVars is not None and iv not in self.freeVars:
                 continue
             r1, r2 = self._oovarsIndDict[iv]
             r += range(r1, r2)
         ########### obsolete, to be removed in future versions
     
         for v in self._freeVarsList:
             if isinstance(v.domain, (tuple, list, ndarray, set)):
                 self.err('for FuncDesigner MILP models only variables with domains int, bool or None (real) are implemented for now')
             if v.domain in (int, 'int', bool, 'bool'):
                 r1, r2 = self._oovarsIndDict[v]
                 r += range(r1, r2)
         
         self.intVars, self._intVars = r, self.intVars
     self._intVars_vector = self.intVars
             
     if SMALL_DELTA_X in self.kernelIterFuncs: self.kernelIterFuncs.pop(SMALL_DELTA_X)
     if SMALL_DELTA_F in self.kernelIterFuncs: self.kernelIterFuncs.pop(SMALL_DELTA_F)
     def getMaxResidualWithIntegerConstraints(x, retAll = False):
         r, fname, ind = self.getMaxResidual2(x, True)
         if len(self.intVars) != 0:
             intV = x[self.intVars]
             intDifference = abs(intV-intV.round())
             intConstraintNumber = argmax(intDifference)
             intConstraint = intDifference[intConstraintNumber]
             #print 'intConstraint:', intConstraint
             if intConstraint > r:
                 intConstraintNumber = self.intVars[intConstraintNumber]
                 r, fname, ind = intConstraint, 'int', intConstraintNumber 
         if retAll:
             return r, fname, ind
         else:
             return r
     self.getMaxResidual, self.getMaxResidual2 = getMaxResidualWithIntegerConstraints, self.getMaxResidual
     
     # TODO: 
     # 1) ADD BOOL VARS
     self.lb, self.ub = copy(self.lb), copy(self.ub)
     self.lb[self.intVars] = ceil(self.lb[self.intVars])
     self.ub[self.intVars] = floor(self.ub[self.intVars])
예제 #2
0
 def __finalize__(self):
     LP.__finalize__(self)
     if self.isFDmodel: self.intVars = self._intVars
예제 #3
0
파일: MILP.py 프로젝트: javafx2010/OOSuite
 def __finalize__(self):
     LP.__finalize__(self)
     if self.isFDmodel: self.intVars = self._intVars
예제 #4
0
파일: MILP.py 프로젝트: javafx2010/OOSuite
    def _Prepare(self):
        if self._milp_prepared: return
        self._milp_prepared = True
        LP._Prepare(self)
        r = []
        if type(self.intVars) not in [
                list, tuple, set
        ] and not isinstance(self.intVars, ndarray):
            self.intVars = [self.intVars]
        if self.isFDmodel:

            ########### obsolete, to be removed in future versions
            if self.intVars != []:
                s = '''
                For FuncDesigner models prob parameter intVars is deprecated
                use oovar(..., domain = int) instead'''
                self.err(s)
#            for iv in self.intVars:
#                if self.fixedVars is not None and iv in self.fixedVars or\
#                self.freeVars is not None and iv not in self.freeVars:
#                    continue
#                r1, r2 = self._oovarsIndDict[iv]
#                r += range(r1, r2)
########### obsolete, to be removed in future versions

            for v in self._freeVarsList:
                if isinstance(v.domain, (tuple, list, ndarray, set)):
                    self.err(
                        'for FuncDesigner MILP models only variables with domains int, bool or None (real) are implemented for now'
                    )
                if v.domain is int or v.domain is 'int' or v.domain is bool or v.domain is 'bool':
                    r1, r2 = self._oovarsIndDict[v]
                    r += arange(r1, r2).tolist()

            self.intVars, self._intVars = r, self.intVars
        self._intVars_vector = self.intVars

        if SMALL_DELTA_X in self.kernelIterFuncs:
            self.kernelIterFuncs.pop(SMALL_DELTA_X)
        if SMALL_DELTA_F in self.kernelIterFuncs:
            self.kernelIterFuncs.pop(SMALL_DELTA_F)

        def getMaxResidualWithIntegerConstraints(x, retAll=False):
            r, fname, ind = self.getMaxResidual2(x, True)
            if len(self.intVars) != 0:
                intV = x[self.intVars]
                intDifference = abs(intV - intV.round())
                intConstraintNumber = argmax(intDifference)
                intConstraint = intDifference[intConstraintNumber]
                if intConstraint > r:
                    intConstraintNumber = self.intVars[intConstraintNumber]
                    r, fname, ind = intConstraint, 'int', intConstraintNumber
            if retAll:
                return r, fname, ind
            else:
                return r

        self.getMaxResidual, self.getMaxResidual2 = getMaxResidualWithIntegerConstraints, self.getMaxResidual

        # TODO:
        # 1) ADD BOOL VARS
        self.lb, self.ub = copy(self.lb), copy(self.ub)
        self.lb[self.intVars] = ceil(self.lb[self.intVars])
        self.ub[self.intVars] = floor(self.ub[self.intVars])
예제 #5
0
#!/usr/bin/python3

from LP import LP
lp = LP([40, 30, 0, 0, 0, 0],
        [[1, 2, 1, 0, 0, 16], [1, 1, 0, 1, 0, 9], [3, 2, 0, 0, 1, 24]])
lp.iterate()
print(lp.objective)

from LP import LP
objective_equation = [4, 5, 6, 0, 0, 0, 0]
constraint_equation = [[1, 2, 3, 1, 0, 0, 12], [3, 1, 2, 0, 1, 0, 20],
                       [4, 1, 1, 0, 0, 1, 16]]
l = LP(objective_equation, constraint_equation)
l.iterate()
l.iterate()
import pdb
pdb.set_trace()
l.iterate()
print(l.entering, l.leaving)