def new_multitype_var_list(self,
                               size,
                               vartypes,
                               lbs=None,
                               ubs=None,
                               names=None,
                               key_format=None):
        if not size:
            return []
        mdl = self._model
        assert size == len(vartypes)
        assert size == len(lbs)
        assert size == len(ubs)
        assert size == len(names)

        allvars = [
            Var(mdl,
                vartypes[k],
                names[k] if names[k] else None,
                lbs[k],
                ubs[k],
                _safe_lb=True,
                _safe_ub=True) for k in fast_range(size)
        ]

        indices = self._engine.create_multitype_variables(
            size, vartypes, lbs, ubs, names)
        mdl._register_block_vars(allvars, indices, names)
        return allvars
Beispiel #2
0
    def fast_add_linear1290(self,
                            cpx,
                            lin_expr,
                            cpx_senses,
                            rhs,
                            names,
                            ranges=None):
        # INTERNAL
        # BEWARE: expects a string for senses, not a list
        cpx_linearcts = cpx.linear_constraints
        num_old_rows = cpx_linearcts.get_num()
        num_new_rows = len(rhs)
        cpxenv = cpx._env
        # noinspection PyArgumentList
        with self.chbmatrix(lin_expr, cpx._env_lp_ptr, 0,
                            cpxenv._apienc) as (rmat, nnz):
            # noinspection PyArgumentList
            self.addrows(cpxenv._e, cpx._lp, 0, len(rhs), nnz, rhs, cpx_senses,
                         rmat, [], names, cpxenv._apienc)
        if ranges:
            self.chgrngval(
                cpxenv._e, cpx._lp,
                list(range(num_old_rows, num_old_rows + num_new_rows)), ranges)

        return fast_range(num_old_rows, cpx_linearcts.get_num())
Beispiel #3
0
    def add_linear(self, cpx, lin_expr, cpx_senses, rhs, names, ranges=None):
        if not self.is_post1210 and self.chbmatrix:
            # BEWARE: expects a string for senses, not a list
            cpx_linearcts = cpx.linear_constraints
            num_old_rows = cpx_linearcts.get_num()
            num_new_rows = len(rhs)
            cpxenv = cpx._env
            # noinspection PyArgumentList
            with self.chbmatrix(lin_expr, cpx._env_lp_ptr, 0,
                                cpxenv._apienc) as (rmat, nnz):
                # noinspection PyArgumentList
                self.addrows(cpxenv._e, cpx._lp, 0, len(rhs), nnz, rhs,
                             cpx_senses, rmat, [], names, cpxenv._apienc)
            if ranges:
                self.chgrngval(
                    cpxenv._e, cpx._lp,
                    list(range(num_old_rows, num_old_rows + num_new_rows)),
                    ranges)

            return fast_range(num_old_rows, cpx_linearcts.get_num())
        else:  # pragma: no cover
            return cpx.linear_constraints.add(lin_expr=lin_expr,
                                              senses=cpx_senses,
                                              rhs=rhs,
                                              names=names,
                                              range_values=ranges)
Beispiel #4
0
    def new_var_list(self,
                     var_container,
                     key_seq,
                     vartype,
                     lb=None,
                     ub=None,
                     name=str,
                     dimension=1,
                     key_format=None):
        number_of_vars = len(key_seq)
        if 0 == number_of_vars:
            return []

        # compute defaults once
        default_lb = vartype.default_lb
        default_ub = vartype.default_ub

        xlbs = self._expand_bounds(key_seq,
                                   lb,
                                   default_lb,
                                   number_of_vars,
                                   true_if_lb=True)
        xubs = self._expand_bounds(key_seq,
                                   ub,
                                   default_ub,
                                   number_of_vars,
                                   true_if_lb=False)
        # at this point both list are either [] or have size numberOfVars

        all_names = self._expand_names(key_seq, name, dimension, key_format)

        safe_lbs = not xlbs
        safe_ubs = not xubs
        if xlbs and xubs:
            self._checker.check_vars_domain(xlbs, xubs, all_names)

        mdl = self._model
        allvars = [
            Var(mdl,
                vartype,
                all_names[k] if all_names else None,
                xlbs[k] if xlbs else default_lb,
                xubs[k] if xubs else default_ub,
                container=var_container,
                _safe_lb=safe_lbs,
                _safe_ub=safe_ubs) for k in fast_range(number_of_vars)
        ]

        # query the engine for a list of indices.
        indices = self._engine.create_variables(len(key_seq), vartype, xlbs,
                                                xubs, all_names)
        mdl._register_block_vars(allvars, indices, all_names)
        return allvars