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
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())
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)
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