Skip to main content

Opvious Python SDK

Project description

Opvious Python SDK CI Pypi badge

An optimization SDK for solving linear, mixed-integer, and quadratic models

Highlights

Declarative modeling API

  • Extensive static validations
  • Exportable to LaTeX
  • Extensible support for high-level patterns (activation variables, masks, ...)
import opvious.modeling as om

class BinPacking(om.Model):
  items = om.Dimension()  # All items to bin
  weight = om.Parameter.non_negative(items)  # Weight per item
  bins = om.interval(1, om.size(items), name="B")  # Available bins
  max_weight = om.Parameter.non_negative()  # Maximum weight for each bin

  assigned = om.Variable.indicator(bins, items)  # Bin to item assignment
  used = om.fragments.ActivationIndicator(assigned, projection=1)  # 1 if a bin is used

  @om.constraint
  def each_item_is_assigned_once(self):
    for i in self.items:
      yield om.total(self.assigned(b, i) for b in self.bins) == 1

  @om.constraint
  def bin_weights_are_below_max(self):
    for b in self.bins:
      bin_weight = om.total(self.weight(i) * self.assigned(b, i) for i in self.items)
      yield bin_weight <= self.max_weight()

  @om.objective
  def minimize_bins_used(self):
    return om.total(self.used(b) for b in self.bins)

Auto-generated specification:

Bin package LaTeX specification

Transparent remote solves

  • No local solver installation required
  • Real-time progress notifications
  • Seamless data import/export via native support for pandas
  • Flexible multi-objective support: weighted sums, epsilon constraints, ...
  • Built-in debugging capabilities: relaxations, fully annotated LP formatting, ...
import opvious

client = opvious.Client.from_environment()

response = await client.run_solve(
  specification=BinPacking().specification(),
  parameters={
    "weight": {"a": 10.5, "b": 22, "c": 48},
    "binMaxWeight": 50,
  },
)
solution = response.outputs.variable("assigned")  # Optimal assignment dataframe

Take a look at https://opvious.readthedocs.io for the full documentation or these notebooks to see the SDK in action.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opvious-0.12.10.tar.gz (114.6 kB view hashes)

Uploaded Source

Built Distribution

opvious-0.12.10-py3-none-any.whl (59.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page