Contribute¶
Contributions to optlang are very welcome. Fork optlang at github, implement your feature and send us a pull request. Also, please use the GitHub issue tracker to let us know about bugs or feature requests, or if you have problems or questions regarding optlang.
Add solver interface¶
Put your interface for new solver XYZ into a python module with the
name xyz_interface.py. Please use the existing solver interfaces as a reference
for how to wrap a solver. For example, start by subclassing interface.Model
.
class Model(interface.Model):
def __init__(self, problem=None, *args, **kwargs):
super(Model, self).__init__(*args, **kwargs)
Then you can override the abstract methods defined in interface.Model
. For
example, override _add_constraints()
.
def _add_constraint(self, constraint):
# Check that constraint is actually supported by XYZ
if not constraint.is_Linear:
raise ValueError("XYZ only supports linear constraints. %s is not linear." % constraint)
# Add the constraint to the user level interface
super(Model, self)._add_constraint(constraint)
# Add variables that are not yet in the model ...
for var in constraint.variables:
if var.name not in self.variables:
self._add_variable(var)
# Link the model to the constraint
constraint.problem = self
# Add solver specific code ...
xyz_add_rows(self.problem, 1)
index = xyz_get_num_rows(self.problem)
xyz_set_row_name(self.problem, index, constraint.name)
...