Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
3d1435e
add docplex.mp translator
t-imamichi May 10, 2021
29a1036
revise type
t-imamichi May 10, 2021
6f61abf
Merge branch 'main' into translator2
t-imamichi May 10, 2021
a3622f4
revert a comment
t-imamichi May 10, 2021
63f1a86
update docstring
t-imamichi May 10, 2021
683286b
make _load_model private and qp.load static
t-imamichi May 11, 2021
4271523
Merge branch 'main' into translator2
t-imamichi May 18, 2021
65aa7ea
add is_installed
t-imamichi May 19, 2021
57dbfe7
add is_installed check
t-imamichi May 19, 2021
2d1dd9e
Merge branch 'main' into translator2
t-imamichi May 26, 2021
3d63fb0
Merge branch 'main' into translator2
t-imamichi May 27, 2021
d970362
update
t-imamichi May 27, 2021
4d3cb38
Merge branch 'main' into translator2
t-imamichi May 28, 2021
ffc8183
Merge branch 'main' into translator2
t-imamichi Jun 3, 2021
43e147c
(wip) add gurobi translaor and tests
t-imamichi Jun 3, 2021
e8036f6
(wip) add gurobi translaor and tests
t-imamichi Jun 3, 2021
c95cde9
fix
t-imamichi Jun 3, 2021
2549508
fix lint
t-imamichi Jun 4, 2021
083b2f1
Merge branch 'main' into translator2
t-imamichi Jun 7, 2021
dcf6659
add reno
t-imamichi Jun 7, 2021
1950452
add LPFileTranslator
t-imamichi Jun 7, 2021
962c32e
fix reno
t-imamichi Jun 7, 2021
733b87f
fix docstrings
t-imamichi Jun 7, 2021
208723f
update
t-imamichi Jun 7, 2021
6c04ebd
fix a unit test
t-imamichi Jun 7, 2021
8688824
rename qp.save with qp.export
t-imamichi Jun 7, 2021
2b6d7ce
integrate export_as_string with export
t-imamichi Jun 7, 2021
95faeea
simplify
t-imamichi Jun 7, 2021
f584b25
update
t-imamichi Jun 7, 2021
42a1953
fix
t-imamichi Jun 7, 2021
cac131f
rename model -> source
t-imamichi Jun 7, 2021
c19b5a1
simplify
t-imamichi Jun 7, 2021
088b44c
update reno and docstring
t-imamichi Jun 7, 2021
1dc4323
update
t-imamichi Jun 8, 2021
dfa1197
fix docstring
t-imamichi Jun 8, 2021
b828d2c
fix error message
t-imamichi Jun 8, 2021
3591b39
revert qp.export_as_lp_string and qp.export
t-imamichi Jun 8, 2021
7afe376
revise types
t-imamichi Jun 8, 2021
35a2cb9
Merge branch 'main' into translator2
t-imamichi Jun 9, 2021
3709c9b
revise the design
t-imamichi Jun 9, 2021
6bb3f82
update pylintdict
t-imamichi Jun 9, 2021
498f966
revert to_gurobi -> to_gurobipy
t-imamichi Jun 9, 2021
8bb85e9
revert a file
t-imamichi Jun 9, 2021
1c032e3
revert read and write lp files to qp
t-imamichi Jun 9, 2021
b155d33
change order
t-imamichi Jun 9, 2021
7da9930
update docstring
t-imamichi Jun 9, 2021
136c089
simplify
t-imamichi Jun 9, 2021
9b943d9
fix lint
t-imamichi Jun 9, 2021
6a0c961
update reno
t-imamichi Jun 9, 2021
49fd297
update
t-imamichi Jun 9, 2021
52172b9
update import
t-imamichi Jun 9, 2021
a1c67ed
update
t-imamichi Jun 9, 2021
7d88230
rename package gurobi to gurobipy
t-imamichi Jun 11, 2021
15e3200
revise error messages and docstrings
t-imamichi Jun 12, 2021
9b973ec
update applications
t-imamichi Jun 13, 2021
a68b2f2
use from_docplex_mp and to_docplex_mp
t-imamichi Jun 13, 2021
e25e7a9
update tutorials
t-imamichi Jun 13, 2021
5276258
Merge branch 'translator2' of github.com:t-imamichi/qiskit-optimizati…
t-imamichi Jun 13, 2021
b139757
update reno
t-imamichi Jun 13, 2021
ee9aba3
Merge branch 'main' into translator2
t-imamichi Jun 13, 2021
a21d2c5
add october to pylintdict
t-imamichi Jun 13, 2021
89b9f16
revert test_docplex and revise test_feasibility
t-imamichi Jun 13, 2021
66eca8b
fix unused import
t-imamichi Jun 13, 2021
87f477e
Merge branch 'main' into translator2
t-imamichi Jun 13, 2021
d36157c
revise deprecation message
t-imamichi Jun 13, 2021
958726a
remove test_docplex
t-imamichi Jun 14, 2021
a81b1ad
Revert "remove test_docplex"
t-imamichi Jun 14, 2021
cfe0b82
change stacklevel=2 of deprecation warning and surpress deprecation w…
t-imamichi Jun 14, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .pylintdict
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ nosignatures
np
num
numpy
october
optimality
optimizationresult
optimizationresultstatus
Expand Down
10 changes: 5 additions & 5 deletions docs/tutorials/01_quadratic_program.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@
"metadata": {},
"outputs": [],
"source": [
"from qiskit_optimization import QuadraticProgram"
"from qiskit_optimization import QuadraticProgram\n",
"from qiskit_optimization.translators import from_docplex_mp"
]
},
{
Expand All @@ -72,7 +73,7 @@
"Qiskit's optimization module supports the conversion from Docplex model. You can easily make a model of an optimization problem with Docplex.\n",
"You can find the documentation of Docplex at https://ibmdecisionoptimization.github.io/docplex-doc/mp/index.html\n",
"\n",
"You can load a Docplex model to `QuadraticProgram` by invoking `from_docplex`."
"You can load a Docplex model to `QuadraticProgram` by using `from_docplex_mp` function."
]
},
{
Expand Down Expand Up @@ -167,8 +168,7 @@
],
"source": [
"# load from a Docplex model\n",
"mod = QuadraticProgram()\n",
"mod.from_docplex(mdl)\n",
"mod = from_docplex_mp(mdl)\n",
"print(mod.export_as_lp_string())"
]
},
Expand Down Expand Up @@ -821,4 +821,4 @@
},
"nbformat": 4,
"nbformat_minor": 4
}
}
8 changes: 4 additions & 4 deletions docs/tutorials/04_grover_optimizer.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"\\min_{x \\in \\{0, 1\\}^3} -2x_1x_3 - x_2x_3 - 1x_1 + 2x_2 - 3x_3.\n",
"\\end{eqnarray}\n",
"\n",
"For our initial steps, we create a docplex model that defines the problem above, and then use the ```from_docplex()``` function to convert the model to a ```QuadraticProgram```, which can be used to represent a QUBO in Qiskit Optimization."
"For our initial steps, we create a docplex model that defines the problem above, and then use the ```from_docplex_mp()``` function to convert the model to a ```QuadraticProgram```, which can be used to represent a QUBO in Qiskit Optimization."
]
},
{
Expand All @@ -81,6 +81,7 @@
"from qiskit.algorithms import NumPyMinimumEigensolver\n",
"from qiskit_optimization.algorithms import GroverOptimizer, MinimumEigenOptimizer\n",
"from qiskit_optimization.problems import QuadraticProgram\n",
"from qiskit_optimization.translators import from_docplex_mp\n",
"from qiskit import BasicAer\n",
"from docplex.mp.model import Model\n",
"\n",
Expand Down Expand Up @@ -124,8 +125,7 @@
"x1 = model.binary_var(name='x1')\n",
"x2 = model.binary_var(name='x2')\n",
"model.minimize(-x0+2*x1-3*x2-2*x0*x2-1*x1*x2)\n",
"qp = QuadraticProgram()\n",
"qp.from_docplex(model)\n",
"qp = from_docplex_mp(model)\n",
"print(qp.export_as_lp_string())"
]
},
Expand Down Expand Up @@ -312,4 +312,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
}
}
6 changes: 3 additions & 3 deletions docs/tutorials/05_admm_optimizer.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
"from qiskit_optimization.algorithms import CobylaOptimizer, MinimumEigenOptimizer\n",
"from qiskit_optimization.problems import QuadraticProgram\n",
"from qiskit_optimization.algorithms.admm_optimizer import ADMMParameters, ADMMOptimizer\n",
"from qiskit_optimization.translators import from_docplex_mp\n",
"\n",
"# If CPLEX is installed, you can uncomment this line to import the CplexOptimizer.\n",
"# CPLEX can be used in this tutorial to solve the convex continuous problem, \n",
Expand Down Expand Up @@ -199,8 +200,7 @@
"mdl.add_constraint(v + w == 1, \"cons3\")\n",
"\n",
"# load quadratic program from docplex model\n",
"qp = QuadraticProgram()\n",
"qp.from_docplex(mdl)\n",
"qp = from_docplex_mp(mdl)\n",
"print(qp.export_as_lp_string())"
]
},
Expand Down Expand Up @@ -530,4 +530,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
}
}
4,547 changes: 98 additions & 4,449 deletions docs/tutorials/06_examples_max_cut_and_tsp.ipynb

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions docs/tutorials/08_cvar_optimization.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"from qiskit_optimization import QuadraticProgram\n",
"from qiskit_optimization.converters import LinearEqualityToPenalty\n",
"from qiskit_optimization.algorithms import MinimumEigenOptimizer\n",
"from qiskit_optimization.translators import from_docplex_mp\n",
"from qiskit import execute, Aer\n",
"from qiskit.utils import algorithm_globals\n",
"\n",
Expand Down Expand Up @@ -109,8 +110,7 @@
"mdl.add_constraint(mdl.sum(x[i] for i in range(n)) == budget)\n",
"\n",
"# case to \n",
"qp = QuadraticProgram()\n",
"qp.from_docplex(mdl)"
"qp = from_docplex_mp(mdl)"
]
},
{
Expand Down Expand Up @@ -384,4 +384,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
}
}
9 changes: 4 additions & 5 deletions docs/tutorials/10_warm_start_qaoa.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
"from qiskit_optimization.algorithms import MinimumEigenOptimizer, CplexOptimizer\n",
"from qiskit_optimization import QuadraticProgram\n",
"from qiskit_optimization.problems.variable import VarType\n",
"from qiskit_optimization.converters.quadratic_program_to_qubo import QuadraticProgramToQubo"
"from qiskit_optimization.converters.quadratic_program_to_qubo import QuadraticProgramToQubo\n",
"from qiskit_optimization.translators import from_docplex_mp"
]
},
{
Expand Down Expand Up @@ -83,9 +84,7 @@
" cost = mdl.sum(x)\n",
" mdl.add_constraint(cost == total)\n",
" \n",
" qp = QuadraticProgram()\n",
" qp.from_docplex(mdl)\n",
" \n",
" qp = from_docplex_mp(mdl)\n",
" return qp\n",
"\n",
"def relax_problem(problem) -> QuadraticProgram:\n",
Expand Down Expand Up @@ -758,4 +757,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
5 changes: 3 additions & 2 deletions qiskit_optimization/algorithms/cplex_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@

from qiskit.exceptions import MissingOptionalLibraryError

from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import to_docplex_mp
from .optimization_algorithm import (
OptimizationAlgorithm,
OptimizationResult,
OptimizationResultStatus,
)
from ..problems.quadratic_program import QuadraticProgram

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -139,7 +140,7 @@ def solve(self, problem: QuadraticProgram) -> OptimizationResult:
QiskitOptimizationError: If the problem is incompatible with the optimizer.
"""

mod = problem.to_docplex()
mod = to_docplex_mp(problem)
sol = mod.solve(log_output=self._disp, cplex_parameters=self._cplex_parameters)
if sol is None:
# no solution is found
Expand Down
10 changes: 6 additions & 4 deletions qiskit_optimization/algorithms/gurobi_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
import logging

from qiskit.exceptions import MissingOptionalLibraryError
from .optimization_algorithm import OptimizationAlgorithm, OptimizationResult

from ..exceptions import QiskitOptimizationError
from ..problems.quadratic_program import QuadraticProgram
from ..translators.gurobipy import to_gurobipy
from .optimization_algorithm import OptimizationAlgorithm, OptimizationResult

logger = logging.getLogger(__name__)

Expand All @@ -32,7 +34,7 @@
class GurobiOptimizer(OptimizationAlgorithm):
"""The Gurobi optimizer wrapped as an Qiskit :class:`OptimizationAlgorithm`.

This class provides a wrapper for ``gurobipy`` (https://pypi.gurobi.com)
This class provides a wrapper for ``gurobipy``
to be used within the optimization module.

Examples:
Expand Down Expand Up @@ -63,7 +65,7 @@ def __init__(self, disp: bool = False) -> None:
raise MissingOptionalLibraryError(
libname="GUROBI",
name="GurobiOptimizer",
pip_install="pip install -i https://pypi.gurobi.com gurobipy",
pip_install="pip install qiskit-optimization[gurobi]",
)

self._disp = disp
Expand Down Expand Up @@ -122,7 +124,7 @@ def solve(self, problem: QuadraticProgram) -> OptimizationResult:
"""

# convert to Gurobi problem
model = problem.to_gurobipy()
model = to_gurobipy(problem)

# Enable non-convex
model.Params.NonConvex = 2
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/clique.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .graph_optimization_application import GraphOptimizationApplication


Expand Down Expand Up @@ -64,8 +65,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
mdl.maximize(mdl.sum(x[i] for i in x))
else:
mdl.add_constraint(mdl.sum(x[i] for i in x) == self.size)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[int]:
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/exact_cover.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .optimization_application import OptimizationApplication


Expand Down Expand Up @@ -55,8 +56,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
mdl.add_constraint(
mdl.sum(x[i] for i, sub in enumerate(self._subsets) if element in sub) == 1
)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[List[int]]:
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/graph_partition.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .graph_optimization_application import GraphOptimizationApplication


Expand Down Expand Up @@ -49,8 +50,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
)
mdl.minimize(objective)
mdl.add_constraint(mdl.sum([x[i] for i in x]) == n // 2)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[List[int]]:
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/knapsack.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .optimization_application import OptimizationApplication


Expand Down Expand Up @@ -52,8 +53,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
x = {i: mdl.binary_var(name="x_{0}".format(i)) for i in range(len(self._values))}
mdl.maximize(mdl.sum(self._values[i] * x[i] for i in x))
mdl.add_constraint(mdl.sum(self._weights[i] * x[i] for i in x) <= self._max_weight)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[int]:
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/max_cut.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .graph_optimization_application import GraphOptimizationApplication


Expand Down Expand Up @@ -51,8 +52,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
for i, j in self._graph.edges
)
mdl.maximize(objective)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def _draw_result(
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/number_partition.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .optimization_application import OptimizationApplication


Expand Down Expand Up @@ -50,8 +51,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
mdl.add_constraint(
mdl.sum(num * (-2 * x[i] + 1) for i, num in enumerate(self._number_set)) == 0
)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[List[int]]:
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/set_packing.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .optimization_application import OptimizationApplication


Expand Down Expand Up @@ -56,8 +57,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
mdl.add_constraint(
mdl.sum(x[i] for i, sub in enumerate(self._subsets) if element in sub) <= 1
)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[List[int]]:
Expand Down
4 changes: 2 additions & 2 deletions qiskit_optimization/applications/stable_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.problems.quadratic_program import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .graph_optimization_application import GraphOptimizationApplication


Expand Down Expand Up @@ -48,8 +49,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
for w, v in self._graph.edges:
mdl.add_constraint(x[w] + x[v] <= 1)
mdl.maximize(objective)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(self, result: Union[OptimizationResult, np.ndarray]) -> List[int]:
Expand Down
10 changes: 5 additions & 5 deletions qiskit_optimization/applications/tsp.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
from docplex.mp.model import Model

from qiskit.utils import algorithm_globals
from ..algorithms import OptimizationResult
from ..exceptions import QiskitOptimizationError
from ..problems.quadratic_program import QuadraticProgram
from qiskit_optimization.algorithms import OptimizationResult
from qiskit_optimization.exceptions import QiskitOptimizationError
from qiskit_optimization.problems import QuadraticProgram
from qiskit_optimization.translators import from_docplex_mp
from .graph_optimization_application import GraphOptimizationApplication


Expand Down Expand Up @@ -60,8 +61,7 @@ def to_quadratic_program(self) -> QuadraticProgram:
mdl.add_constraint(mdl.sum(x[(i, k)] for k in range(n)) == 1)
for k in range(n):
mdl.add_constraint(mdl.sum(x[(i, k)] for i in range(n)) == 1)
op = QuadraticProgram()
op.from_docplex(mdl)
op = from_docplex_mp(mdl)
return op

def interpret(
Expand Down
Loading