Как убрать ограничение в ORTools

1

Есть ли способ удалить определенное ограничение из решателя без разрешения очистки и создания ограничений с первого раза?

предположим, моя проблема состоит в том, чтобы максимизировать сумму трех переменных, которые связаны двумя ограничениями

constraint1: переменная 2 должна быть от 8 до 10

constraint2: переменная 3 должна быть между 5 - 10

from ortools.linear_solver import pywraplp

solver = pywraplp.Solver('SolveIntegerProblem',
                       pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)

objective = solver.Objective()

Variable[0] = solver.IntVar(0, 5, variable 0 )
Variable[1] = solver.IntVar(0, 10, variable 1 )
Variable[2] = solver.IntVar(0, 20, variable 2 )

objective.SetCoefficient(Variable[0], 1)
objective.SetCoefficient(Variable[1], 1)
objective.SetCoefficient(Variable[2], 1)

objective.SetMaximization() 

constraints.append(solver.Constraint(8,10))
constraints[0].SetCoefficient(variable[1],1) 

constraints.append(solver.Constraint(5,10))
constraints[1].SetCoefficient(variable[2],1)  

Теперь во втором запуске моего кода я хочу удалить ограничение числа 2, но я не могу найти никакой операции для этого, и единственный способ - очистить решатель и определить ограничение с первого раза.

В этом полукодере количество ограничений было ограничено, но на самом деле в моем реальном коде число ограничений много, и я не могу определить их с первого раза.

Теги:
or-tools

1 ответ

0

Вы пытались использовать метод MPConstraint::Clear()?

Декларация: https://github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/linear_solver/linear_solver.h#L865
Определение: https://github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/linear_solver/linear_solver.cc#L101

Что касается оболочки MPConstraint экспортируется как объект Constraint.
src: https://github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/linear_solver/python/linear_solver.i#L180
Но метод Constraint::Clear() не отображается https://github.com/google/or-tools/blob/9487eb85f4620f93abfed64899371be88d65c6ec/ortools/linear_solver/python/linear_solver.i#L270

Вы можете попробовать исправить файл swig и перекомпилировать make python && make install_python

  • 0
    это для C программирования, не так ли? Есть ли документ для программирования на Python?
  • 0
    Python - это обёртка, автоматически генерируемая из заголовков заголовков C ++ с использованием SWIG. cf ссылка linear_solver.i ....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню