def create_model(N): m = Model() coords = [arange(N), arange(N)] x = m.add_variables(coords=coords) y = m.add_variables(coords=coords) m.add_constraints(x - y >= arange(N)) m.add_constraints(x + y >= 0) m.add_objective((2 * x).sum() + y.sum()) return m
def milp_model_r(): m = Model() lower = pd.Series(0, range(10)) x = m.add_variables(coords=[lower.index], name="x", binary=True) y = m.add_variables(lower, name="y") m.add_constraints(x + y, ">=", 10) m.add_objective(2 * x + y) return m
def model_chunked(): m = Model(chunk="auto") x = m.add_variables(name="x") y = m.add_variables(name="y") m.add_constraints(2 * x + 6 * y, ">=", 10) m.add_constraints(4 * x + 2 * y, ">=", 3) m.add_objective(2 * y + x) return m
def model_anonymous_constraint(): m = Model(chunk=None) x = m.add_variables(name="x") y = m.add_variables(name="y") m.add_constraints(2 * x + 6 * y >= 10) m.add_constraints(4 * x + 2 * y >= 3) m.add_objective(2 * y + x) return m
def test_nan_in_objective(): m = Model() x = m.add_variables(name="x") y = m.add_variables(name="y") m.add_constraints(2 * x + 6 * y, ">=", np.nan) m.add_constraints(4 * x + 2 * y, ">=", 3) m.add_objective(np.nan * y + x) with pytest.raises(ValueError): m.solve()
def model(n, solver, integerlabels): m = Model() if integerlabels: N, M = [arange(n), arange(n)] else: N, M = [arange(n).astype(float), arange(n).astype(str)] x = m.add_variables(coords=[N, M]) y = m.add_variables(coords=[N, M]) m.add_constraints(x - y >= N) m.add_constraints(x + y >= 0) m.add_objective((2 * x).sum() + y.sum()) m.solve(solver) return
def masked_constraint_model(): m = Model() lower = pd.Series(0, range(10)) x = m.add_variables(lower, name="x") y = m.add_variables(lower, name="y") mask = pd.Series([True] * 8 + [False, False]) m.add_constraints(x + y, ">=", 10, mask=mask) # for the last two entries only the following constraint will be active m.add_constraints(x + y, ">=", 5) m.add_objective(2 * x + y) return m
def masked_variable_model(): m = Model() lower = pd.Series(0, range(10)) x = m.add_variables(lower, name="x") mask = pd.Series([True] * 8 + [False, False]) y = m.add_variables(lower, name="y", mask=mask) m.add_constraints(x + y, ">=", 10) m.add_constraints(y, ">=", 0) m.add_objective(2 * x + y) return m
def test_to_blocks(tmp_path): m = Model() lower = pd.Series(range(20)) upper = pd.Series(range(30, 50)) x = m.add_variables(lower, upper) y = m.add_variables(lower, upper) m.add_constraints(x + y, "<=", 10) m.add_objective(2 * x + 3 * y) m.blocks = xr.DataArray([1] * 10 + [2] * 10) m.to_block_files(tmp_path)
def test_to_file(tmp_path): import gurobipy m = Model() x = m.add_variables(4, pd.Series([8, 10])) y = m.add_variables(0, pd.DataFrame([[1, 2], [3, 4], [5, 6]])) m.add_constraints(x + y, "<=", 10) m.add_objective(2 * x + 3 * y) fn = tmp_path / "test.lp" m.to_file(fn) gurobipy.read(str(fn))
def test_to_netcdf(tmp_path): m = Model() x = m.add_variables(4, pd.Series([8, 10])) y = m.add_variables(0, pd.DataFrame([[1, 2], [3, 4], [5, 6]])) m.add_constraints(x + y, "<=", 10) m.add_objective(2 * x + 3 * y) fn = tmp_path / "test.nc" m.to_netcdf(fn) p = read_netcdf(fn) for k in m.scalar_attrs: if k != "objective_value": assert getattr(m, k) == getattr(p, k) for k in m.dataset_attrs: assert_equal(getattr(m, k), getattr(p, k))