Beispiel #1
0
 def set_decomposition_tree(self, tree):
   if not isinstance(tree, decomposition_tree.DecompositionTree):
     raise TypeError()
   self._decomposition_tree = tree
   for model in tree.get_models():
     node = tree.node[model.get_name()]
     sql_script = _MODEL_SCHEMA_TEMPLATE.format(
       table_name=model.get_name(),
       columns=','.join(['%s INTEGER DEFAULT NULL' % name for name in
                         node.get_shared_variables()]),
       key_columns=','.join(node.get_shared_variables())
     )
     for dep_node in tree.predecessors(node.get_name()):
       edge = tree.get_edge_between(dep_node, node.get_name())
       shared_vars = edge.get_shared_variables()
       sql_script += _INDEX_TEMPLATE.format(
         index='_'.join(shared_vars) + '_index',
         name=model.get_name(),
         shared_vars=', '.join(shared_vars))
     try:
       conn = self.get_data_store().get_connection()
       conn.executescript(sql_script)
       self.get_data_store().release_connection(conn)
     except sqlite3.OperationalError, e:
       logging.warning('SQLite script %s: %s' % (sql_script, e))
       raise Error()
Beispiel #2
0
  def check_columns_values(self, columns_values):
    """Checks whether the given columns values are correct.

    :param columns_values: A list of column values.

    :returns: ``True`` or ``False``.
    """
    raise NotImplementedError()
    # TODO: solution can be a tuple, list or sparse.base.spmatrix
    if type(columns_values) in (tuple, list):
      columns_values = numpy.array(columns_values)
    if columns_values.shape[0] != self.get_num_columns():
      logging.warning("Number of columns values doesn't match number of "
                      "columns: %d != %d", columns_values.shape[0],
                      self.get_num_columns())
      return False
    v = self.rows_coefficients.dot(columns_values)
    for i in xrange(len(v)):
      # TODO: add sense.
      if not v[i] <= self.rows_rhs[i]:
        return False
    return True
Beispiel #3
0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

from les.utils import logging
from les.backend_solvers import backend_solvers_pb2

from les.backend_solvers.knapsack_solver import fractional_knapsack_solver
try:
  from les.backend_solvers import scip
except ImportError, e:
  logging.warning('SCIP is not supported: %s', e)

_SOLVERS_TABLE = {}

# Sync backend solvers IDs.
SCIP_ID = backend_solvers_pb2.SCIP
FRAKTIONAL_KNAPSACK_SOLVER_ID = getattr(backend_solvers_pb2,
                                        'FRAKTIONAL_KNAPSACK_SOLVER')

_DEFAULT_SOLVERS_TABLE = {}
if 'les.backend_solvers.scip' in sys.modules:
  _DEFAULT_SOLVERS_TABLE[SCIP_ID] = scip.SCIP
_SOLVERS_TABLE.update(_DEFAULT_SOLVERS_TABLE)

_RELAXATION_SOLVERS_TABLE = {
  FRAKTIONAL_KNAPSACK_SOLVER_ID: fractional_knapsack_solver.FractionalKnapsackSolver,