Skip to content

Commit

Permalink
Fix pipelines (#834)
Browse files Browse the repository at this point in the history
* Use backwards compatible type hint

* Install bison in macos pipeline

* Enable integration test for pull requests for now

* Install locales needed by tests in ubuntu integration test

* Turn off again integration tests for PRs
  • Loading branch information
mmghannam committed Apr 2, 2024
1 parent cc24fc8 commit eff4bd0
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 20 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ jobs:
wget --quiet --no-check-certificate https://github.com/scipopt/scip/releases/download/$(echo "v${{env.version}}" | tr -d '.')/SCIPOptSuite-${{ env.version }}-Linux-ubuntu20.deb
sudo apt-get update && sudo apt install -y ./SCIPOptSuite-${{ env.version }}-Linux-ubuntu20.deb
- name: Install locales for tests
run: sudo apt-get install tzdata locales -y && sudo locale-gen pt_PT && sudo update-locale # add pt_PT locale that is used in tests

- name: Setup python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
Expand Down Expand Up @@ -109,7 +112,7 @@ jobs:
- name: Install dependencies (SCIPOptSuite)
if: steps.cache-scip.outputs.cache-hit != 'true'
run: |
brew install tbb boost
brew install tbb boost bison
wget --quiet --no-check-certificate https://github.com/scipopt/scip/releases/download/$(echo "v${{env.version}}" | tr -d '.')/scipoptsuite-${{ env.version }}.tgz
tar xfz scipoptsuite-${{ env.version }}.tgz
cd scipoptsuite-${{ env.version }}
Expand Down
41 changes: 22 additions & 19 deletions src/pyscipopt/recipes/piecewise.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from typing import List

from pyscipopt import Model, quicksum, Variable, Constraint

def add_piecewise_linear_cons(model: Model, X: Variable, Y: Variable, a: list[float], b: list[float]) -> Constraint:
"""add constraint of the form y = f(x), where f is a piecewise linear function

def add_piecewise_linear_cons(model: Model, X: Variable, Y: Variable, a: List[float], b: List[float]) -> Constraint:
"""add constraint of the form y = f(x), where f is a piecewise linear function
:param model: pyscipopt model to add the constraint to
:param X: x variable
:param Y: y variable
:param a: array with x-coordinates of the points in the piecewise linear relation
Expand All @@ -12,25 +15,25 @@ def add_piecewise_linear_cons(model: Model, X: Variable, Y: Variable, a: list[fl
Disclaimer: For the moment, can only model 2d piecewise linear functions
Adapted from https://github.com/scipopt/PySCIPOpt/blob/master/examples/finished/piecewise.py
"""
assert len(a) == len(b), "Must have the same number of x and y-coordinates"
assert len(a) == len(b), "Must have the same number of x and y-coordinates"

K = len(a) - 1
w, z = {}, {}
for k in range(K):
w[k] = model.addVar(lb=-model.infinity())
z[k] = model.addVar(vtype="B")

for k in range(K):
model.addCons(w[k] >= a[k] * z[k])
model.addCons(w[k] <= a[k + 1] * z[k])

K = len(a)-1
w,z = {},{}
for k in range(K):
w[k] = model.addVar(lb=-model.infinity())
z[k] = model.addVar(vtype="B")
model.addCons(quicksum(z[k] for k in range(K)) == 1)

for k in range(K):
model.addCons(w[k] >= a[k]*z[k])
model.addCons(w[k] <= a[k+1]*z[k])
model.addCons(X == quicksum(w[k] for k in range(K)))

model.addCons(quicksum(z[k] for k in range(K)) == 1)
c = [float(b[k + 1] - b[k]) / (a[k + 1] - a[k]) for k in range(K)]
d = [b[k] - c[k] * a[k] for k in range(K)]

model.addCons(X == quicksum(w[k] for k in range(K)))
new_cons = model.addCons(Y == quicksum(d[k] * z[k] + c[k] * w[k] for k in range(K)))

c = [float(b[k+1]-b[k]) / (a[k+1]-a[k]) for k in range(K)]
d = [b[k] - c[k]*a[k] for k in range(K)]

new_cons = model.addCons(Y == quicksum(d[k]*z[k] + c[k]*w[k] for k in range(K)))

return new_cons
return new_cons

0 comments on commit eff4bd0

Please sign in to comment.