summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNao Pross <np@0hm.ch>2024-06-04 18:05:23 +0200
committerNao Pross <np@0hm.ch>2024-06-04 18:05:23 +0200
commit9dabb70d887fc9ab1a1aad870af88ec9385d3646 (patch)
treebe2e589df7bc168e070616c7ae0059f7e256a9e5
parentUpdate variables to use symbols, see polymatrix dependency (diff)
downloadsumofsquares-9dabb70d887fc9ab1a1aad870af88ec9385d3646.tar.gz
sumofsquares-9dabb70d887fc9ab1a1aad870af88ec9385d3646.zip
Make make_problem add PSatz automatically if necessary
-rw-r--r--sumofsquares/__init__.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/sumofsquares/__init__.py b/sumofsquares/__init__.py
index e6af1e7..bd5ec6a 100644
--- a/sumofsquares/__init__.py
+++ b/sumofsquares/__init__.py
@@ -53,9 +53,9 @@ Class diagram: Arrows denote inheritance, diamonds indicate composition.
┃ ┃
┃ ┌─.canon───────────────────────────────────────────────────┐ ┌─.variable─────────────────┐ ┃ ┏━━━polymatrix package━━━━━━━━━┓
┃ │ │ │ │ ┃ ┃ ┃
- ┃ │ ┌────────────────────┐ │ │ ┌───────────┐ │ ┃ ┃ ┌──────────┐ ┌──────────┐ ┃
- ┃ │ │ Canonicalization │ │ │ │OptVariable│──────────┼──╋───╋─▶│ Variable │ │Expression│ ┃
- ┃ │ └────────────────────┘ │ │ └───────────┘ │ ┃ ┃ └──────────┘ └──────────┘ ┃
+ ┃ │ ┌────────────────────┐ │ │ ┌───────────┐ │ ┃ ┃ ┌────────┐ ┌──────────┐ ┃
+ ┃ │ │ Canonicalization │ │ │ │OptSymbol │──────────┼──╋───╋─▶│ Symbol │ │Expression│ ┃
+ ┃ │ └────────────────────┘ │ │ └───────────┘ │ ┃ ┃ └────────┘ └──────────┘ ┃
┃ │ ▲ │ │ ▲ │ ┃ ┃ │ ┃
┃ │ ├────────────────────┐ │ │ │ │ ┃ ┃ ┌─────────┘ ┃
┃ │ │ │ │ │ │ │ ┃ ┃ ◇ ┃
@@ -97,7 +97,7 @@ def make_problem(
cost: Expression | None = None,
constraints: Iterable[Constraint] = (),
solver: Solver = Solver.CVXOPT,
- psatz: type[Canonicalization] | None = None,
+ psatz: type[Canonicalization] = PutinarPSatz,
) -> SOSProblem:
"""
Create a sum-of-squares optimization problem.
@@ -108,7 +108,13 @@ def make_problem(
cost = poly.from_number(0)
prob = SOSProblem(cost, constraints, solver)
- if psatz is not None:
+
+ needs_psatz = any(c.domain is not None
+ for c in (constr
+ for constr in constraints
+ if isinstance(constr, NonNegative)))
+
+ if needs_psatz:
return psatz(SOSProblem(cost, constraints, solver))
return prob